2009-04-15 57 views
7

我正在研究一个逐个打开大量电子表格的vb.net控制台应用程序,读入一对单元并关闭文件。Excel自动化 - 如何只是说

某些电子表格有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() 

谢谢!

+0

在此处添加信息时,如果程序版本比文件版本新,Excel将自动重新计算公式。 – pensono 2016-07-19 23:08:14

回答

13

您需要在关闭方法

xlWorkBook.Close(False) 

从Excel的VBA帮助提供一个假参数:

Close方法,因为它适用于 Workbook对象。

关闭对象。

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

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

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

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

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

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

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

1

这是好事,用Close()避免此错误消息,但如果你正在使用的版本V11.0一样具有close()不带任何参数,所以这个问题仍然没有对这种情况下解决一下。要处理这个问题,你可以使用Marshal.RealeaseCOMObject但是请记住有一些issues

在回答你的“如何说不”,你可以使用:

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

希望它能帮助!