[英]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));
XlCall.Excel(XlCall.xlcWorkbookInsert, 1);
返回bool
: true
成功, false
失敗
因此,將其強制轉換為ExcelReference
是導致exception
的原因。
在該xlcWorkbookInsert之前,您可能需要一個xlcNew。 在Excel-Dna源代碼中的Excel.cs中查看GetApplication方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.