1

Excel-dnaアドインの背後にc#コードがあり、サービスからデータを正常にダウンロードしています。ダウンロードをトリガーするボタンを備えたリボンをExcel-dnaで作成しました。次に、新しいワークシートにデータを表示したいと思います。ワークシートを作成して行を追加するにはどうすればよいですか?

次を使用して、C#コードからxlcWorkbookInsertを呼び出してみました。

  ExcelReference newSheet = (ExcelReference)XlCall.Excel(XlCall.xlcWorkbookInsert, 1);

しかし、私は常にExcelDna.Integration.XlCallException例外を受け取ります。これは正しいアプローチですか、それともこれを行うためのより簡単な方法がありますか?

object[,]また、既存のシートにデータを貼り付けてみました。

   ExcelReference sheet1 = (ExcelReference)XlCall.Excel(XlCall.xlSheetId, "Sheet1");

   ExcelReference myTargetPasteArea = new ExcelReference(1, 1, 2, 10, sheet1.SheetId);

   myTargetPasteArea.SetValue(result);

今回はエラーはありませんが、何も起こりません(ただし、デバッグをステップスルーすると、実行されているコードを確認できます)。

4

3 に答える 3

3

コードはCAPIを介してExcelを呼び出しています(これが、 Excel-DNAのXlCall.Excel(...)およびExcelReferenceの機能です)。ただし、リボンイベントハンドラーから直接CAPIを呼び出すことはできません。2つのオプションがあります。

  • マクロを介して迂回します。リボンのxmlコードを変更すると、これは簡単です。

    <button onAction = "RunTagMacro" tag = "MyMacro" />

次に、マクロを定義します。

public static void MyMacro()
{
    // ... do your work here ....
}

イベントハンドラーから自分でマクロを呼び出すこともできます-RunTagMacro内部的には

object app = ExcelDnaUtil.Application;
app.GetType().InvokeMember("Run", BindingFlags.InvokeMethod, 
    null, app, new object[] { control.Tag }, new CultureInfo(1033));
  • もう1つのオプションは、COMAPIを使用するようにインタラクションコードを変更することです。このためには、.NET 4の「動的」サポートを使用するか、相互運用機能アセンブリ(Office用のバージョン固有のプライマリ相互運用機能アセンブリ、またはNetOfficeなどのバージョンに依存しない相互運用機能アセンブリ)を参照する必要があります。
于 2012-06-27T13:31:52.553 に答える
2
XlCall.Excel(XlCall.xlcWorkbookInsert, 1);

booltrue-成功、false-失敗を返します

したがって、それをにキャストすることExcelReferenceがの原因ですexception

于 2015-04-20T15:16:53.707 に答える
0

そのxlcWorkbookInsertの前にxlcN​​ewが必要になる場合があります。Excel.csのGetApplicationメソッドでExcel-Dnaソースを確認してください。

于 2015-01-18T11:26:15.230 に答える