Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обмен данными с Excel

Delphi , Технологии , OLE Automation MSOffice

Обмен данными с Excel


Самое часто произносимое в мире имя:
- Билл Гейтс!?
- Нет, его матушка!

В 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;
begin
  if GenericStringGrid.Cells[0,1] <> '' then
  begin
    IIndex := 1;
    R := GenericStringGrid.RowCount;
    C := GenericStringGrid.ColCount;
    // Создаём массив-матрицу
    TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr);
    I := 0;
    //  Определяем цикл для заполнения массива-матрицы
    repeat
    for 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;
  repeat
    for 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 выполняет следующие шаги:

  1. Проверяет, содержит ли первый ячейка TStringGrid какие-либо данные.
  2. Создает матрицу варианта (TabGrid) и заполняет ее данными из TStringGrid с помощью двух вложенных циклов.
  3. Подключается к компоненту TExcelApplication, добавляет новый файл Excel, выбирает первую таблицу и устанавливает имя "Customers".
  4. Устанавливает различные свойства таблицы, такие как цвет шрифта, горизонтальное выравнивание и ширина столбца.
  5. Вставляет матрицу варианта (TabGrid) в таблицу с помощью свойства Range.
  6. Показывает приложение Excel и отключается от него.

Процедура BitBtnFromExcelOnClick

Эта процедура используется для извлечения данных из таблицы Excel и помещения их в компонент TStringGrid (именованный GenericStringGrid). Procedure выполняет следующие шаги:

  1. Подключается к компоненту TExcelApplication.
  2. Открывает существующий файл Excel (NomFich) с помощью метода WorkBooks.Open.
  3. Активизирует последнюю ячейку таблицы, чтобы определить ее размер (число строк и столбцов).
  4. Извлекает значения из таблицы в матрицу варианта (RangeMatrix) с помощью свойства Cells.Item.
  5. Отключается от Excel, закрывает приложение и отключается снова.
  6. Заполняет 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE Automation MSOffice ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 21:00:29/0.0040078163146973/0