Excel自动化 – 如何只说不

我正在开发一个vb.net控制台应用程序,它可以逐个打开许多电子表格,读入一对电池并closures文件。

一些电子表格有Excel在我打开文件时重新计算的公式,我收到一个对话框询问我是否想在closures电子表格时保存对该电子表格的更改。

消息:“是否要将更改保存到myfile.xls?当打开由早期版本的Excel最后保存的文件时,Microsoft Office 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() 

谢谢!

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

 xlWorkBook.Close(False) 

从Excel VBA帮助:

适用于Workbook对象的Close方法

closures对象。

closures(SaveChanges,Filename,RouteWorkbook)

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

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

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

FileName可选变体。 在此文件名下保存更改。

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

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

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

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

使用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. 

希望能帮助到你!