使用与 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 保存更改的原始文件。如何否定这一点?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript与C#的互操作示例

字符串数组 C# 与 C++ dll 的互操作性;从 C# 到 C++ dll 的字符串数组,它设置数据并将其发送回 c#

ToLua框架下C#与Lua代码的互调

poi与excel表格数据的互转

保存 Excel 工作簿 C#

在 VSTO 插件 C# 中保存 Excel 工作簿