Вы здесь
Экспорт данных в Excel из Delphi

В прошлой статье (Читаем файл Excel (xls) в Delphi) был рассмотрен способ чтения данных из xls файла и его импорт в Delphi. Теперь перейдем к сохранению, т.е. к экспорту данных из Delphi. Экспорт, как и импорт, будет осуществляться через посредника, т.е. Excel. Поэтому для работы приложения потребуется установленная копия MS Excel 2003-2010 (выше не тестировал).
Добавьте на форму кнопку, диалог сохранения, и таблицу StringGrid. Для того чтоб появилась возможность редактирования таблицы StringGrid необходимо в ее свойствах включить опцию goEditing:
Визуальные приготовления для нашего примера готовы. Переходим к написанию кода.
Как и в случае чтения xls нам понадобится библиотека ComObj. Добавьте ее в uses. Ниже приведен листинг процедуры экспорта, добавьте его после ключевого слова implementation.
procedure Xls_Save(XLSFile:string; Grid:TStringGrid); |
Алгоритм работы процедуры:
- Создаем ссылку на объект и записываем ее в переменную ExlApp := CreateOleObject('Excel.Application');
- С помощью ExlApp.Workbooks.Add; создаем пустую книгу в Excel (книга скрыта командой ExlApp.Visible := false;). По умолчанию книга содержит 3 листа. Если в Add добавить параметр 1 (ExlApp.Workbooks.Add(1)), то будет создана книга с одним листом.
- Далее код похож на чтение, только в цикле мы меняем присваемые значения. Теперь копируются значения из таблицы Delphi (StringGrid) в лист Excel.
- Команда ExlApp.DisplayAlerts := False отключает все сообщения Excel. В нашем случае это отключит сообщение («Книга уже существует! Хотите ее перезаписать?») возникающее при перезаписи уже существующего файла. Если этого не сделать, то при ответе «Нет», возникнет ошибка, а так файл будет «молча» перезаписан.
- Далее следует обработка исключения. У меня установлены две версии Excel (2003 и 2010) и был обнаружен такой момент, что значения типа файла, отправляемые команде SaveAs, отличаются в этих версиях, из-за чего возникает ошибка сохранения. В конструкции Try Except описаны варианты сохранения. Если на компьютере пользователя установлена версия Excel 2003, то будет выполнена команда ExlApp.Workbooks[1].saveas(XLSFile, xlExcel9795), где xlExcel9795 – значение типа xls файла 95-2003. Иначе, если возникла ошибка при сохранении в первом случае, то будет выполнена команда ExlApp.Workbooks[1].saveas(XLSFile, xlExcel8). В 2007-2010 значение xlExcel8 соответствует типу «Excel 97-2003 (.xls)». Важный момент: Исключение обрабатывается при запуске EXE проекта, в режиме разработки работа приложения завершится ошибкой.
- Команда ExlApp.Workbooks[1].saveas(XLSFile, ‘Значение типа выходного файла’) выполняет сохранение файла с именем XLSFile и заданным значением типа.
Вот и все. С полным листингом проекта Вы можете ознакомиться, скачав приложенный ниже архив. Так же в архиве содержится список констант типов, позволяющий по желанию расширить список экспортируемых типов доступных Excel.
Прикрепленный файл: Экспорт в Excel на Delphi.zip
- Добавить комментарий
- 71409 просмотров
Комментарии
Спасибо автору за статью!!! Но все-же есть вопрос: как сохранить данные из StrinGrid в уже существующий Excel ??
Пожалуйста!
Все тоже самое только вместо метода добавления книги. Метод Open и в конце вместо метода SaveAs используйте Save. Как открыть существующую книгу Excel описано в статье "Читаем файл Excel (xls) в Delphi". Следующей статьей опишу про редактирование книги и сохранение:)
Но я так и не смог разобраться как же сохронять в уже существующий файл(а не создавать новый). Буду очень благодарен если покажете на примере. Спасибо.
Добрый день, спасибо за статью, очень помогла. Буду очень признателен, если напишите статью про сохранение графика из делфи в екзел(график изображен при помощи TChart). Зарание спасибо.
Прога не працює
Так, а что делать, если у меня в гриде лежат данные на русском языке и при сохранение в экселе становится все плохо с кодировкой?
А что сделать если при сохранении в эксель данных на русском языке кодировке становится плохо?
У меня такой проблемы нет. С русскими символами все в норме.
В какой кодировке у Вас выводятся символы? Или скиньте ссылку на скрин выведенного текста.
при получении значений в делфи например 9.9Е-5 в ексель переносится как 9.9Е+09, хотя все остальные значения без Е переносит без ошибок... как быть в такой ситуации???
при получении значений в делфи например 9.9Е-5 в ексель переносится как 9.9Е+09, хотя все остальные значения без Е переносит без ошибок... как быть в такой ситуации???
Все круто работает. А как сделать чтобы я сам выбрал куда сохранять?
Xls_Save('c:\test.xls', MyTable);
Подставьте вместо 'c:\test.xls' любой полный путь в переменной
У меня на строке
Sheet.name:='Данные_из_Delphi';
выдает ошибку "Неверный тип переменной". Почему может быть?
Какая версия Delphi, Excel?
Добавить комментарий