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

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

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

打开的原始文件是c:\ testing \ template.xls传入的文件名是c:\ testing \ 7777(date).xls

有没有人有答案?

(我select的答案是最正确和彻底的,虽然wbk.Close()需要传递给它的参数,谢谢。)

Excel互操作是非常痛苦的。 我挖了一个旧的项目,做了一个小小的摆弄,我想这就是你要找的。 其他的评论者都是对的,但是,至less在我的经验中,如果你在VBA中使用了相同的对象(没有interop包装器),调用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。 但我认为他们是必要的。

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

你有没有尝试从工作表的SaveAs?

  1. 另存为
  2. 每当我必须做互操作我创build一个单独的VB.NET类库,并写在VB中的逻辑。 这是不值得在C#中做这件事的麻烦