我的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);
这次没有错误,但没有任何反应(尽管我在调试时可以看到正在执行的代码)。
答案 0 :(得分:3)
您的代码通过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));
答案 1 :(得分:2)
XlCall.Excel(XlCall.xlcWorkbookInsert, 1);
返回bool
:true
- 成功,false
- 失败
因此将其转换为ExcelReference
是exception
。
答案 2 :(得分:0)
在xlcWorkbookInsert之前,您可能需要xlcNew。在Excel.cs中的GetApplication方法中查看Excel-Dna源代码。