2

(我是英语周,所以首先请原谅我解释不好:D)

我通过我的应用程序打开一个 excel 文件。

我在 Excel 中有一个加载项,在功能区中有一个用于保存的按钮(正是保存按钮执行的保存操作)按钮的 Click 事件代码在这里:

Globals.ThisAddIn.Application.ActiveWorkbook.Save();

在我的应用程序中,我将一个方法(称为 WorkbookBeforeSave)分配给工作簿的“BeforeSave”事件处理程序,该处理程序将工作簿手动保存在我的自定义目录中。

private void WorkbookBeforeSave(bool saveasui, ref bool cancel)
{
    _excelApp.EnableEvents = false;//_excelApp is my Excel Application

    if (!_excelWorkbook.Saved)//_excelWorkbook is Active Excel Workbook
    {
        _excelWorkbook.SaveCopyAs(_savedFilePath);//_savedFilePath is my custom directory

        _excelWorkbook.Saved = true;
    }

    cancel = true;

    _excelApp.EnableEvents = true;
}

问题是当我单击原始 Excel 保存按钮“SaveCopyAs”方法正常工作但单击我的自定义保存按钮时“SaveCopyAs”方法不起作用。 (没有抛出异常,所有代码都已编译和调试)

4

1 回答 1

1

尝试用 调试 try-catch,它应该对你有帮助。

// using interop, excel tool, interop-excel, core

public void MyBeforeSave(Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel)
{
  //Globals.ThisAddIn.Application.ActiveWorkbook.SaveCopyAs(filename2); // if u use an external class to save (for threading or something else )
  this.Application.ActiveWorkbook.SaveCopyAs(filename); 

}   

在没有线程/任务的情况下,Office 2007 excel - 有时 - 在加载和保存方法时会滞后或比正常速度慢。

这个简单的saveAs()方法有很多参数(搜索它,你也可以在 msdn 和这里看到它)并且它需要在路径上有一些骗局,因为最新的保存路径更改为 C# 使用的保存路径。

我更喜欢这个SaveCopyAs解决方案,因为只有一个参数,而且速度很快。:D

于 2012-08-10T15:17:58.367 回答