function SaveAsExcelFile(stringGrid: TstringGrid; FileName: string): Boolean;
const
xlWBATWorksheet = -4167;
var
Row, Col: Integer;
GridPrevFile: string;
XLApp, Sheet: OLEVariant;
begin
Result := False;
XLApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := False;
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := 'My Sheet Name';
for col := 0 to stringGrid.ColCount - 1 dofor row := 0 to stringGrid.RowCount - 1 do
Sheet.Cells[row + 1, col + 1] := stringGrid.Cells[col, row];
try
XLApp.Workbooks[1].SaveAs(FileName);
Result := True;
except// Error ? end;
finallyifnot VarIsEmpty(XLApp) thenbegin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
beginif SaveAsExcelFile(stringGrid1, 'c:\MyExcelFile.xls') then
ShowMessage('stringGrid saved!');
end;
{*************************************************}// Reiner Schlay http://www.assu-assist.nl/ function RefToCell(ARow, ACol: Integer): string;
begin
Result := Chr(Ord('A') + ACol - 1) + i2s(ARow);
end;
procedure StringGridToExcel(AGrid: TstringGrid);
var
i, j: Integer;
Excel: Application_;
Book: Workbook;
Sheet: _WorkSheet;
Data: OLEVariant;
begin
Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount],
varVariant);
for i := 0 to AGrid.ColCount - 1 dofor j := 0 to AGrid.RowCount - 1 do
Data[j + 1, i + 1] := AGrid.Cells[i, j];
Excel := CoApplication_.Create;
Book := Excel.WorkBooks.Add(EmptyParam, 0);
Sheet := Excel.Sheets.Add(EmptyParam, EmptyParam, 1,
xlWorksheet, 0) as _WorkSheet;
Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
AGrid.ColCount)].Value := Data;
Excel.Visible[0] := True;
Excel.UserControl := True;
end;
Программный код на языке Delphi для сохранения данных контрола TStringGrid в файле Microsoft Excel с помощью библиотеки COM Excel.
Функция SaveAsExcelFile
Функция принимает два параметра: stringGrid (объект TStringGrid) и FileName (путь и имя файла Excel для сохранения).
Создает экземпляр приложения Excel с помощью CreateOleObject.
Добавляет новый файл workbook и worksheet, устанавливает имя worksheet, а затем проходит по каждому ячейке в grid, записывая данные в соответствующую ячейку в файле Excel.
Если операция сохранения успешна, возвращает True; иначе, возвращает False.
Процедура Button1Click
Вызывает функцию SaveAsExcelFile с конкретным именем файла и отображает сообщение, если операция сохранения была успешной.
Функция RefToCell
Конвертирует индекс строки и столбца в ссылку на ячейку Excel (например, "A1" для первой ячейки в grid).
Процедура StringGridToExcel
Принимает объект TStringGrid в качестве входного параметра и сохраняет его данные в файле Excel.
Использует позднюю связь для создания экземпляра приложения Excel, workbook и worksheet.
Создает массив вариантов для хранения данных grid и затем проходит по каждому ячейке в grid, присваивая данные соответствующей ячейке в файле Excel.
Рекомендации:
Обработка ошибок: Функция SaveAsExcelFile не обрабатывает ошибки должным образом. Вам может потребоваться добавить более robust обработку ошибок для ловли и отображения любых проблем, возникших во время операции сохранения.
Формат файла Excel: Код сохраняет файлы с расширением .xls, которое является старым форматом файла Excel. Рекомендуется использовать более современный формат, например, .xlsx.
Организация кода: Процедура StringGridToExcel имеет некоторые сходства с функцией SaveAsExcelFile. Вам может потребоваться рефакторинг их, чтобы они делили общий код или извлекали отдельную утилитарную функцию для работы с файлами Excel.
В целом, это хороший старт для сохранения данных контрола TStringGrid в файле Microsoft Excel с помощью Delphi и библиотеки COM Excel.
Сохранение данных StringGrid в файле Excel с помощью компонентов VCL и COM-объекта Excel.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.