SaveCopyAs方法不起作用

时间:2012-02-12 07:41:23

标签: c# excel events excel-addins comobject

(我用英语一周,所以首先请原谅我的不好解释: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”方法不起作用。 (没有抛出异常,所有代码都已编译和调试)

1 个答案:

答案 0 :(得分: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()方法有很多参数(searh for it,你在msdn&这里也看到了它)并且它需要在路径上有些傻瓜,因为最新的保存路径更改为使用的C#保存路径。

我更喜欢SaveCopyAs解决方案,因为只有一个参数和快速&狂怒。 :D