【问题标题】:Using Interop with C#, Excel Save changing original. How to negate this?使用与 C# 的互操作,Excel 保存更改的原始文件。如何否定这一点?
【发布时间】:2010-09-06 22:43:47
【问题描述】:

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

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

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

有人有答案吗?

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

【问题讨论】:

    标签: c# excel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:
          1. 另存为同上
          2. 每当我必须进行互操作时,我都会创建一个单独的 VB.NET 类库并在 VB 中编写逻辑。在 C# 中这样做是不值得的麻烦

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-21
            • 1970-01-01
            • 1970-01-01
            • 2011-10-24
            • 1970-01-01
            • 2022-07-26
            • 1970-01-01
            相关资源
            最近更新 更多