相关疑难解决方法(0)

如何正确清理Excel互操作对象?

我在C#(ApplicationClass)中使用Excel互操作,并在我的finally子句中放置了以下代码:

while (System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheet) != 0) { }
excelSheet = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)

虽然这种工作,Excel.exe即使我关闭Excel后,该过程仍然在后台.只有在我的应用程序手动关闭后才会发布.

我做错了什么,或者是否有其他方法可以确保互操作对象得到妥善处理?

c# excel interop com-interop

733
推荐指数
20
解决办法
30万
查看次数

您可以使用Excel Interop使用剪贴板一次性粘贴一个单元格块吗?

我正在尝试将数据从DataSet传输到Excel工作簿.不幸的是,我需要更多的控制,只需通过ADO.NET链接到Excel并使用标准SQL来选择和插入数据,所以我使用excel互操作.

我的原始算法涉及循环遍历数据集的所有表/行/项,并Formula在Excel中单独设置每个单元格.这很有效,但转移所有数据需要将近半分钟.

我决定尝试不同的解决方案:每个表格转换为制表符分隔字符串(使用的组合StringBuilderstring.Join(),复制字符串到剪贴板,并使用互操作调用Excel上粘贴命令Worksheet对象.

这也有效,并将时间缩短了50%以上,但我对使用剪贴板传输数据有点偏执.如果用户在传输过程中开始执行涉及剪贴板的其他事情,会发生什么?我还想知道如果我可以直接粘贴字符串而不是必须使用剪贴板作为中介,它是否会更快.

那么,这就是我的问题...... 是否有一些命令允许我直接从C#字符串中一次性"粘贴"一个数据块,而无需使用剪贴板?

c# excel vba excel-vba office-interop excel-interop

4
推荐指数
1
解决办法
3954
查看次数