通过将Interop与C#一起使用,Excel保存更改后的原稿。如何否定这个?

时间:2020-03-05 18:43:34  来源:igfitidea点击:

问题:加载excel电子表格模板。使用具有不同文件名的Save命令,然后退出interop对象。这样就保存了原始模板文件。不是喜欢的结果。

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

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

有人有答案吗?

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

解决方案

回答

我们是否尝试过工作表中的SaveAs?

回答

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

回答

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。但是我认为它们是必要的。

回答

  • 同上的另存为
  • 每当需要做Interop时,我都会创建一个单独的VB.NET类库,并在VB中编写逻辑。只是不值得在C#中这样做而麻烦