3

問題があります。ボタンクリックメソッドでデータを挿入したいのですが、このメソッドはリボンメニュー(VSTO)で作成されます。

これをよりよく理解するために、データベースでクエリを実行してそれを人のリストに送信し、その人から見たいものをExcelに印刷したいと思います。たとえば、名前と生年月日、または名前、ID、職業を表示したいだけです。

これを行うには、アプリケーションの実行時に開いたワークブックを選択する必要があります。だから私はこれを試してみます:

private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook.InnerObject;
            Excel.Worksheet ws = wb.Sheets["Sheet1"];
            ws.Cells[1, 2] = "teste";
        }
  • Excelを使用=Microsoft.Office.Tools.Excel;
  • ExcelTools=Microsoft.Office.Toolsを使用します。
  • Microsoft.Office.Interop.Excelを使用する;

しかし、私はこのエラーを受け取ります: **"Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Tools.Excel.Workbook'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B74CBB86-9C9F-4172-9AE7-3CE4A7BFA5EB}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."**

おそらく私が見ているよりも簡単ですが、私はとても疲れているので、これを終える必要があります...

4

2 に答える 2

4

男はこれを試してみてください:

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
Excel.Worksheet wsheet =
  (Excel.Worksheet)Globals.ThisAddIn.Application.ActiveSheet;
于 2012-10-19T16:11:25.673 に答える
3

以下は機能するはずです(.InnerObjectを削除してください)

private void button1_Click(object sender, RibbonControlEventArgs e) 
        { 
            Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook; 
            Excel.Worksheet ws = wb.Sheets["Sheet1"]; 
            ws.Cells[1, 2] = "teste"; 
        } 

InnerObjectプロパティは、基になる(COMを読み取る)ワークブックへの参照を返します。戻りの種類はMicrosoft.Office.Interop.Excel.Workbookです(ブックの.NetラップバージョンであるMicrosoft.Office.Tools.Excel.Workbookではありません)

同じことがシートにも当てはまります。
ネイティブのComワークブックのSheetsコレクションにアクセスすると、Microsoft.Office.Interop.Excel.WorkSheetが返され、Excel.WorkbookにアクセスするとExcel.WorkSheetが返されます。

vstoラップされたオブジェクトの詳細については、これを参照してください。

于 2012-10-16T11:43:17.530 に答える