11

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

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

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

有人有答案吗?

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

4

4 回答 4

8

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

于 2008-08-27T00:02:59.557 回答
1

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

于 2008-08-26T23:53:28.580 回答
0

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

于 2008-08-26T23:48:04.693 回答
0
  1. 在 SaveAs 上同上
  2. 每当我必须进行互操作时,我都会创建一个单独的 VB.NET 类库并在 VB 中编写逻辑。在 C# 中这样做是不值得的
于 2008-08-27T14:49:42.937 回答