Автоматизация Excel - как просто сказать нет - PullRequest
7 голосов
/ 16 апреля 2009

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

Спасибо!

Ответы [ 3 ]

14 голосов
/ 16 апреля 2009

Необходимо указать параметр False для метода Close

xlWorkBook.Close(False)

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

Закрыть метод, как он применяется к Объект книги.

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

expression.Close (SaveChanges, Имя файла, RouteWorkbook)

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

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

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

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

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

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

3 голосов
/ 16 апреля 2009

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

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

1 голос
/ 02 августа 2012

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

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

...