Excel自动化 - 如何说不

Ger*_*ton 7 vb.net excel automation interop excel-interop

我正在开发一个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()
Run Code Online (Sandbox Code Playgroud)

谢谢!

DJ.*_*DJ. 14

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

xlWorkBook.Close(False)
Run Code Online (Sandbox Code Playgroud)

从Excel VBA帮助:

应用于Workbook对象的Close方法.

关闭对象.

expression.Close(SaveChanges,Filename,RouteWorkbook)

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

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

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

FileName可选Variant.保存此文件名下的更改.

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

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