通过将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#中这样做而麻烦