7

我正在开发一个 vb.net 控制台应用程序,它一个一个地打开许多电子表格,读取几个单元格并关闭文件。

一些电子表格具有 Excel 会在我打开文件时重新计算的公式,并且我收到一个对话框,询问我是否要在关闭电子表格时保存对电子表格的更改。

消息:“您想保存对 myfile.xls 的更改吗?Microsoft Office Excel 在打开由早期版本的 Excel 上次保存的文件时会重新计算公式”

如何自动拒绝该对话框?

            Dim newCBD As New CBD
            Dim xlApp As Excel.Application
            Dim xlWorkBook As Excel.Workbook
            Dim xlWorkSheet As Excel.Worksheet

            xlApp = New Excel.ApplicationClass
            xlWorkBook = xlApp.Workbooks.Open(myFile)
            xlWorkSheet = xlWorkBook.Worksheets(1)

            ...do a bunch of junk here

            xlWorkBook.Close()
            xlApp.Quit()

谢谢!

4

3 回答 3

14

您需要在 Close 方法上提供 False 参数

xlWorkBook.Close(False)

从 Excel VBA 帮助:

应用于 Workbook 对象的 Close 方法。

关闭对象。

expression.Close(SaveChanges,文件名,RouteWorkbook)

表达式 必需。返回上述对象之一的表达式。

SaveChanges 可选变体。如果工作簿没有更改,则忽略此参数。如果工作簿发生更改并且工作簿出现在其他打开的窗口中,则忽略此参数。如果工作簿有更改,但工作簿未出现在任何其他打开的窗口中,则此参数指定是否应保存更改,如下表所示。

值 操作 True 保存对工作簿的更改。如果还没有与工作簿关联的文件名,则使用 FileName。如果省略 FileName,则要求用户提供文件名。False 不保存对此文件的更改。省略 显示一个对话框,询问用户是否保存更改。

文件名 可选变体。以该文件名保存更改。

RouteWorkbook 可选变体。如果工作簿不需要路由到下一个收件人(如果它没有路由单或已经路由),则忽略此参数。否则,Microsoft Excel 会如下表所示路由工作簿。

值 含义 True 将工作簿发送给下一个收件人。False 不发送工作簿。省略 显示一个对话框,询问用户是否应该发送工作簿。

于 2009-04-15T20:58:22.687 回答
3

根据此文档:http: //msdn.microsoft.com/en-us/library/bb223560.aspx

如果将工作簿的 Saved 属性设置为 True 而不将工作簿保存到磁盘,Microsoft Excel 将退出而不要求您保存工作簿。

于 2009-04-15T20:59:33.680 回答
1

最好使用Close()来避免此错误消息,但如果您使用的是 v11.0 之类的版本,它的close()不带参数,所以问题仍然无法解决这种情况。要处理这个问题,您可以使用 Marshal.RealeaseCOMObject但请记住有一些问题

为了回应您的“如何说不”,您可以使用:

xlApp.DisplayAlerts= false;  // use just above the Close() method calls
xlApp.Workbooks.Close(); // here no arguments can be used.

希望能帮助到你!

于 2012-08-02T12:05:17.403 回答