簡體   English   中英

如何使用Excel-DNA創建一個新的工作表並用數據行填充它?

[英]How do I create a new worksheet and populate it with rows of data using Excel-DNA?

我的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);

這次沒有錯誤,但是什么也沒有發生(盡管我在調試中逐步看到了正在執行的代碼)。

您的代碼通過C API調用Excel(這就是Excel-DNA中 XlCall.Excel(...)和ExcelReference的工作方式)。 但是您不能直接從功能區事件處理程序中調用C API。 您有兩種選擇:

  • 通過宏繞行。 如果您更改功能區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));
  • 另一個選擇是更改您的交互代碼以使用COM API。 為此,您需要使用.NET 4中的“動態”支持,或引用互操作程序集-Office特定於版本的主互操作程序集,或某些獨立於版本的互操作程序集,例如NetOffice
XlCall.Excel(XlCall.xlcWorkbookInsert, 1);

返回booltrue成功, false失敗

因此,將其強制轉換為ExcelReference是導致exception的原因。

在該xlcWorkbookInsert之前,您可能需要一個xlcNew。 在Excel-Dna源代碼中的Excel.cs中查看GetApplication方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM