Автоматизация Excel - как просто сказать нет

Я работаю над консольным приложением 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()

Спасибо!


person Chris Burgess    schedule 15.04.2009    source источник
comment
Добавляя сюда информацию, Excel автоматически пересчитает формулы, если версия программы новее, чем версия файла.   -  person pensono    schedule 20.07.2016


Ответы (3)


Вам необходимо указать параметр False в методе Close

xlWorkBook.Close(False)

Из справки Excel VBA:

Close, поскольку он применяется к объекту Workbook.

Закрывает объект.

выражение.Close (SaveChanges, Имя файла, RouteWorkbook)

выражение Обязательно. Выражение, возвращающее один из вышеуказанных объектов.

SaveChanges Необязательный вариант. Если в книге нет изменений, этот аргумент игнорируется. Если в книгу вносятся изменения и она отображается в других открытых окнах, этот аргумент игнорируется. Если есть изменения в книге, но она не отображается ни в каких других открытых окнах, этот аргумент указывает, следует ли сохранять изменения, как показано в следующей таблице.

Значение Действие Истина Сохраняет изменения в книге. Если с книгой еще не связано имя файла, используется FileName. Если FileName опущено, пользователя просят указать имя файла. False Изменения в этом файле не сохраняются. Пропущено Отображает диалоговое окно, в котором пользователю предлагается сохранить изменения.

FileName Необязательный вариант. Сохраните изменения под этим именем файла.

Необязательный вариант RouteWorkbook. Если книгу не нужно направлять следующему получателю (если у нее нет маршрутной квитанции или она уже была маршрутизирована), этот аргумент игнорируется. В противном случае Microsoft Excel направляет книгу, как показано в следующей таблице.

Значение Значение True Отправляет книгу следующему получателю. Ложь Не отправляет книгу. Пропущено Отображает диалоговое окно с вопросом, нужно ли отправить книгу.

person DJ.    schedule 15.04.2009

Согласно этой документации: http://msdn.microsoft.com/en-us/library/bb223560.aspx

Если вы установите для свойства Сохранено для книги значение Истина, не сохраняя книгу на диск, Microsoft Excel закроется, не запрашивая сохранение книги.

person AndreiM    schedule 15.04.2009

Хорошо использовать 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.

Надеюсь, поможет!

person NeverHopeless    schedule 02.08.2012