Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
29th
Янв
Как добавить таблицу из StringGrid в excel?
Posted by Chas under Delphi
Xardas
Можно сделать несколькими способами. Давайте реализуем один из них (я думаю, что самый простой) — это подправим функцию, добавив в нее еще несколько параметров. Объявление функции будет выглядеть так:
function SaveAsExcelFile(sg1, sg2: TStringGrid; ASheetName, ASheetName1, AFileName: string): Boolean;
То есть добавили второй грид и второе имя листа. Далее подготавливаем данные к обработке. Добавляем к описанию переменных функции еще одну переменную Data1:
........
var
XLApp, Sheet, Data, Data1: OLEVariant;
.........
Далее по аналогии с тем, как создается массив данных из первого грида, составляем второй массив:
Data1 := VarArrayCreate([1, sg2.RowCount, 1, sg2.ColCount], varVariant);
for i := 0 to sg2.ColCount - 1 do
for j := 0 to sg2.RowCount - 1 do
Data1[j + 1, i + 1] := sg2.Cells[i, j];
Далее у нас создается ОЛЕ объект, скрывается эксель, а перед тем как создать новую книгу, мы укажем количество листов таким образом:
XLApp.SheetsInNewWorkbook := 2;
Теперь можно приступать к созданию книги:
XLApp.Workbooks.Add; // здесь лучше не указывать параметр xlWBatWorkSheet
Книгу создали, в ней уже будет 2 листа. Далее заполняем ее. Переменную Sheet будем использовать 2 разы, дабы не создавать еще одну (мы могли бы так же поступить и с переменной Data, если будет желание, то можете самостоятельно реализовать это, экономим килобайты памяти, так сказать )
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := ASheetName;
Sheet.Range[RefToCell(1, 1), RefToCell(sg1.RowCount,
sg1.ColCount)].Value := Data;
Sheet := XLApp.Workbooks[1].WorkSheets[2];
Sheet.Name := ASheetName1;
Sheet.Range[RefToCell(1, 1), RefToCell(sg2.RowCount,
sg2.ColCount)].Value := Data1;
Ну вот, собственно, и занесли данные в два листа. Остальной код оставляем без изменения. Вызов процедуры немного изменится:
if SaveAsExcelFile(sg1, sg2, 'Лист1', 'Лист2', 'Ваш путь') then
ShowMessage('Экспорт в Эксель прошел успешно');
Прошу прощения за возможные опечатки, а вообще — эксперементируйте, ибо можно было реализовать по-другому. Например, вызвать два раза функцию для первого и второго грида, задав немного другие параметры, или, например, вынести процесс формирования данных для записи в эксель в отдельную процедуру… ну, и так далее… Дерзайте! Удачи!
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)