C# 如何使用Excel DNA创建新工作表并用数据行填充它?
我的Excel dna加载项后面有c代码,它正在成功地从服务下载数据。我已经在Excel dna中创建了一个功能区,其中有一个按钮可以触发下载,现在我想在新的工作表中显示数据。如何创建工作表并添加行 我尝试使用以下方法从我的c代码调用:C# 如何使用Excel DNA创建新工作表并用数据行填充它?,c#,excel-dna,C#,Excel Dna,我的Excel dna加载项后面有c代码,它正在成功地从服务下载数据。我已经在Excel dna中创建了一个功能区,其中有一个按钮可以触发下载,现在我想在新的工作表中显示数据。如何创建工作表并添加行 我尝试使用以下方法从我的c代码调用: ExcelReference newSheet = (ExcelReference)XlCall.Excel(XlCall.xlcWorkbookInsert, 1); 但我总是得到一个ExcelDna.Integration.XlCallExceptio
ExcelReference newSheet = (ExcelReference)XlCall.Excel(XlCall.xlcWorkbookInsert, 1);
但我总是得到一个ExcelDna.Integration.XlCallException异常。这是正确的方法,还是有更简单的方法
我还尝试将数据的对象[,]粘贴到现有图纸:
ExcelReference sheet1 = (ExcelReference)XlCall.Excel(XlCall.xlSheetId, "Sheet1");
ExcelReference myTargetPasteArea = new ExcelReference(1, 1, 2, 10, sheet1.SheetId);
myTargetPasteArea.SetValue(result);
这次没有错误,但是什么也没有发生,尽管我可以在调试中看到代码正在执行。您的代码正在通过C API调用Excel,这就是XlCall.Excel。。。并在作品中提供参考资料。但是不能直接从功能区事件处理程序调用C API。您有两个选择: 通过宏绕道而行。如果更改功能区xml代码,这很容易: 然后定义一个宏:
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的特定于版本的主互操作程序集,或某些与版本无关的互操作程序集,如。
您的代码正在通过C API调用Excel,这就是XlCall.Excel。。。并在作品中提供参考资料。但是不能直接从功能区事件处理程序调用C API。您有两个选择: 通过宏绕道而行。如果更改功能区xml代码,这很容易: 然后定义一个宏:
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的特定于版本的主互操作程序集,或某些与版本无关的互操作程序集,如。
在xlcWorkbookInsert之前,您可能需要xlcNew。查看Excel.cs中GetApplication方法的Excel Dna源。在xlcWorkbookInsert之前,您可能需要xlcNew。查看Excel.cs中GetApplication方法的Excel Dna源代码
XlCall.Excel(XlCall.xlcWorkbookInsert, 1);
返回布尔值:true-成功,false-失败
因此,将其强制转换为ExcelReference是异常的原因
返回布尔值:true-成功,false-失败
因此,将其转换为ExcelReference是异常的原因。感谢您的快速回答!我认为您发布的ribbon xml代码已经被吃掉了。你能重新发布它吗?啊,我尝试了基于代码的方法,现在我可以创建一个新的工作表,并用我以前的代码编写它。尽管我无法让RunTagMacro属性正常工作,但没关系。谢谢宏方法可以有参数吗?谢谢-我修复了xml。如果您自己调用宏,它可以有参数-也可以将参数添加到InvokeMember调用中。ribbon中的RunTagMacro辅助程序无法满足这一需求。很好,我可以自己称之为RunTagMacro!现在我可以继续制作很棒的东西了,再次感谢你谢谢你的快速回答!我认为您发布的ribbon xml代码已经被吃掉了。你能重新发布它吗?啊,我尝试了基于代码的方法,现在我可以创建一个新的工作表,并用我以前的代码编写它。尽管我无法让RunTagMacro属性正常工作,但没关系。谢谢宏方法可以有参数吗?谢谢-我修复了xml。如果您自己调用宏,它可以有参数-也可以将参数添加到InvokeMember调用中。ribbon中的RunTagMacro辅助程序无法满足这一需求。很好,我可以自己称之为RunTagMacro!现在我可以继续制作很棒的东西了,再次感谢你D