2009-04-15 48 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. 

希望它能幫助!