Самое часто произносимое в мире имя:
- Билл Гейтс!?
- Нет, его матушка!
В Delphi 5, для обмена данными между Вашим приложением и Excel можно использовать компонент TExcelApplication, доступный на Servers Page в Component Palette.
На форме находится TStringGrid, заполненный некоторыми данными и две кнопки, с названиями To Excel и From Excel. Так же на форме находится компонент TExcelApplication со свойством Name, содержащим XLApp и свойством ConnectKind, содержащим ckNewInstance.
Когда нам необходимо работать с Excel, то обычно мы открываем ExcelApplication, затем открываем WorkBook и в конце используем WorkSheet.
Итак, несомненный интерес представляет для нас листы (WorkSheets) в книге (WorkBook). Давайте посмотрим как всё это работает.
Посылка данных в Excel
Это можно сделать с помощью следующей процедуры :
procedure TForm1.BitBtnToExcelOnClick(Sender: TObject);
var
WorkBk: _WorkBook; // определяем WorkBook
WorkSheet: _WorkSheet; // определяем WorkSheet
I, J, K, R, C: Integer;
IIndex: OleVariant;
TabGrid: Variant;
beginif GenericStringGrid.Cells[0,1] <> '' thenbegin
IIndex := 1;
R := GenericStringGrid.RowCount;
C := GenericStringGrid.ColCount;
// Создаём массив-матрицу
TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr);
I := 0;
// Определяем цикл для заполнения массива-матрицыrepeatfor J := 0 to (C - 1) do
TabGrid[I,J] := GenericStringGrid.Cells[J,I];
Inc(I,1);
until
I > (R - 1);
// Соединяемся с сервером TExcelApplication
XLApp.Connect;
// Добавляем WorkBooks в ExcelApplication
XLApp.WorkBooks.Add(xlWBatWorkSheet,0);
// Выбираем первую WorkBook
WorkBk := XLApp.WorkBooks.Item[IIndex];
// Определяем первый WorkSheet
WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
// Сопоставляем Delphi массив-матрицу с матрицей в WorkSheet
Worksheet.Range['A1',Worksheet.Cells.Item[R,C]].Value := TabGrid;
// Заполняем свойства WorkSheet
WorkSheet.name := 'Customers';
Worksheet.Columns.Font.Bold := True;
Worksheet.Columns.HorizontalAlignment := xlRight;
WorkSheet.Columns.ColumnWidth := 14;
// Заполняем всю первую колонку
WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].Font.Color := clBlue;
WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].HorizontalAlignment := xlHAlignLeft;
WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].ColumnWidth := 31;
// Показываем Excel
XLApp.Visible[0] := True;
// Разрываем связь с сервером
XLApp.Disconnect;
// Unassign the Delphi Variant Matrix
TabGrid := Unassigned;
end;
end;
Получение данных из Excel
Это можно сделать с помощью следующей процедуры
procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject);
var
WorkBk: _WorkBook;
WorkSheet: _WorkSheet;
K, R, X, Y: Integer;
IIndex: OleVariant;
RangeMatrix: Variant;
NomFich: WideString;
begin
NomFich := 'C:\MyDirectory\NameOfFile.xls';
IIndex := 1;
XLApp.Connect;
// Открываем файл Excel
XLApp.WorkBooks.Open(NomFich, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam,0);
WorkBk := XLApp.WorkBooks.Item[IIndex];
WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
// Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество// столбцов, мы активируем его последнюю непустую ячейку
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
// Получаем значение последней строки
X := XLApp.ActiveCell.Row;
// Получаем значение последней колонки
Y := XLApp.ActiveCell.Column;
// Определяем количество колонок в TStringGrid
GenericStringGrid.ColCount := Y;
// Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
// Выходим из Excel и отсоединяемся от сервера
XLApp.Quit;
XLApp.Disconnect;
// Определяем цикл для заполнения TStringGrid
K := 1;
repeatfor R := 1 to Y do
GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
Inc(K,1);
GenericStringGrid.RowCount := K + 1;
until
K > X;
// Unassign the Delphi Variant Matrix
RangeMatrix := Unassigned;
end;
Вот перевод описания кода и его функциональности на русский язык:
Данный код написан на Delphi и используется для обмена данными между программой и Microsoft Excel. Код использует компонент TExcelApplication, доступный на странице "Серверы" в Палетке компонентов.
В коде есть два основные процедуры: BitBtnToExcelOnClick и BitBtnFromExcelOnClick. Эти процедуры обрабатывают события клика двух кнопок, помеченных как "В Excel" и "Из Excel", соответственно.
Процедура BitBtnToExcelOnClick
Эта процедура используется для отправки данных из компонента TStringGrid (именованного GenericStringGrid) в таблицу Excel. Procedure выполняет следующие шаги:
Проверяет, содержит ли первый ячейка TStringGrid какие-либо данные.
Создает матрицу варианта (TabGrid) и заполняет ее данными из TStringGrid с помощью двух вложенных циклов.
Подключается к компоненту TExcelApplication, добавляет новый файл Excel, выбирает первую таблицу и устанавливает имя "Customers".
Устанавливает различные свойства таблицы, такие как цвет шрифта, горизонтальное выравнивание и ширина столбца.
Вставляет матрицу варианта (TabGrid) в таблицу с помощью свойства Range.
Показывает приложение Excel и отключается от него.
Процедура BitBtnFromExcelOnClick
Эта процедура используется для извлечения данных из таблицы Excel и помещения их в компонент TStringGrid (именованный GenericStringGrid). Procedure выполняет следующие шаги:
Подключается к компоненту TExcelApplication.
Открывает существующий файл Excel (NomFich) с помощью метода WorkBooks.Open.
Активизирует последнюю ячейку таблицы, чтобы определить ее размер (число строк и столбцов).
Извлекает значения из таблицы в матрицу варианта (RangeMatrix) с помощью свойства Cells.Item.
Отключается от Excel, закрывает приложение и отключается снова.
Заполняет TStringGrid данными из матрицы варианта с помощью двух вложенных циклов.
В целом, этот код демонстрирует, как обмениваться данными между программой Delphi и Microsoft Excel с помощью компонента TExcelApplication. Он предоставляет пример отправки данных из TStringGrid в таблицу Excel и извлечения данных из таблицы Excel в TStringGrid.
Обмен данными с Excel: при помощи компонента TExcelApplication в Delphi 5 можно обмениваться данными между приложением и Microsoft Excel, создавая и заполняя таблицы в книге WorkBook.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.