使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?
Posted
技术标签:
【中文标题】使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?【英文标题】:Using Interop with C#, Excel Save changing original. How to negate this? 【发布时间】:2010-09-06 22:43:47 【问题描述】:问题:加载一个 Excel 电子表格模板。使用具有不同文件名的保存命令,然后退出互操作对象。这最终保存了原始模板文件。不是喜欢的结果。
public void saveAndExit(string filename)
excelApplication.Save(filename);
excelApplication.Quit();
打开的原始文件是 c:\testing\template.xls 传入的文件名是c:\testing\7777 (date).xls
有人有答案吗?
(我选择的答案是最正确和最彻底的,尽管 wbk.Close() 需要传递给它的参数。谢谢。)
【问题讨论】:
【参考方案1】:Excel 互操作非常痛苦。我挖掘了一个旧项目,做了一些小改动,我认为这就是你要找的。其他评论者是对的,但是,至少根据我的经验,如果您在 VBA 中使用相同的对象(没有互操作包装器),调用 SaveAs() 会比您预期的要多得多。
Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0]; //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);
wbk.Close();
excelApplication.Quit();
一定要喜欢所有那些 Type.Missings。但我认为它们是必要的。
【讨论】:
【参考方案2】:您可以使用 Workbook 对象并调用 SaveAs() 方法,而不是使用 ExcelApplication。您可以在其中传递更新后的文件名。
【讨论】:
【参考方案3】:您是否尝试过工作表中的另存为?
【讨论】:
【参考方案4】:-
另存为同上
每当我必须进行互操作时,我都会创建一个单独的 VB.NET 类库并在 VB 中编写逻辑。在 C# 中这样做是不值得的麻烦
【讨论】:
以上是关于使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?的主要内容,如果未能解决你的问题,请参考以下文章
字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#