使用 Interop 与 C#、Excel 保存更改的原始文件。如何否定这一点?

StackOverflow https://stackoverflow.com/questions/29141

  •  09-06-2019
  •  | 
  •  

问题:加载 Excel 电子表格模板。使用具有不同文件名的“保存”命令,然后退出互操作对象。这最终保存了原始模板文件。不是大家喜欢的结果。

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

打开的原始文件是C: Testing Template.xls在IS C: Testing 7777(Date).xls中传递的文件名

有人有答案吗?

(我选择的答案是最正确和最彻底的,尽管 wbk.Close() 需要传递给它的参数。谢谢。)

有帮助吗?

解决方案

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();

一定要喜欢所有那些类型缺失。但我认为它们是必要的。

其他提示

您可以使用 Workbook 对象并调用 SaveAs() 方法,而不是使用 ExcelApplication。您可以在其中传递更新的文件名。

您是否尝试过工作表中的另存为?

  1. 另存为同上
  2. 每当我需要进行 Interop 时,我都会创建一个单独的 VB.NET 类库并在 VB 中编写逻辑。在 C# 中这么麻烦是不值得的
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top