在 VSTO 插件 C# 中保存 Excel 工作簿

Posted

技术标签:

【中文标题】在 VSTO 插件 C# 中保存 Excel 工作簿【英文标题】:Save Excel Workbook in VSTO Addin C# 【发布时间】:2017-12-25 12:37:11 【问题描述】:

我编写了一个 Excel 插件,当按下按钮时,它会更改某些单元格的内容。 现在我想添加在这些替换发生后将工作簿保存到新文件的功能。

这是我的尝试,但不知何故,这并不像我想象的那样工作。

这是将文件保存在我的 ThisAddIn.cs 中的代码:

public static void saveasnewfile()
        
            Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(@"C:\XXXX.XLS");
        

这就是我调用这个函数的方式(比如按下按钮时):

//...
ThisAddIn.saveasnewfile();
//...

现在当我按下所述按钮时,我会收到以下错误消息:

Microsoft Excel 无法访问文件“C:\XXXX.XLS”。有 几个可能的原因:

• 文件名或路径不存在。 • 该文件正被另一个程序使用。 • 您尝试保存的工作簿与当前打开的工作簿同名。

这对我来说似乎有点奇怪。当然该文件不存在,因为我想创建它...

那么我在这里错过了什么?

我想添加功能,以便稍后通过保存文件对话框提示用户输入路径。所以那里的一些提示也会有所帮助:)

【问题讨论】:

你真的要写在 C: 的根目录下吗? 用于测试目的是的。 尝试一个文件夹,比如 C:\Temp 或您创建的任何其他文件夹。 哦,好的,谢谢!我真是个笨蛋…… 【参考方案1】:

解决方案:

对于任何可能偶然发现相同事物的人,以下是我使用 SaveFileDialog 实现它的方法:

var saveDialog = new SaveFileDialog() //create new instance of savefiledialog
  
    Title = "Save As", //sets title of dialog box
    Filter = "Excel Worbook (*.xlsx)|*.xlsx", //filter for .xlsx files
    AddExtension = true, //automatically adds the .xlsx extension
    CheckPathExists = true //checks if the given path really exists


if (saveDialog.ShowDialog() == DialogResult.OK)

Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(saveDialog.FileName);

【讨论】:

以上是关于在 VSTO 插件 C# 中保存 Excel 工作簿的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VSTO 插件项目轻松创建 Excel UDF

如何在 Excel VSTO 加载项中为 OnUndo 调用 C# 方法?

设置 Font.Color 时 Excel 2007 VSTO 插件异常

使用 UDF 发布 C# Excel 插件

vsto 插件使用 excel 应用程序域

Excel 插件 COM 插件 VS VSTO 插件