Excel自动化 - 如何拒绝

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()

谢谢!


在此添加信息,如果程序版本比文件版本新,Excel将自动重新计算公式。 - pensono
3个回答

14

在Close方法上,您需要提供一个False参数。

xlWorkBook.Close(False)

来自Excel VBA帮助:

Close方法适用于工作簿对象。

关闭该对象。

expression.Close(SaveChanges, Filename, RouteWorkbook)

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

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

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

FileName 可选的变体。使用此文件名保存更改。

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

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


3

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.

希望能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接