Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.3.2015
Репутация: нет Всего: нет
|
Цитата(Msl @ 24.3.2006, 07:45) | Обмен данными с Excel.
1. Для затравки и утоления жажды -фрагменты кода с комментариями (Ishodniki.RU)
Автор: {Fernando Silva-mailto:[email protected]}
В Delphi 5, для обмена данными между Вашим приложением и Excel можно использовать компонент TExcelApplication, доступный на Servers Page в Component Palette.
Совместимость: Delphi (5.x или выше)
На форме находится 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;
|
2. есть служба XL Report Support на http://www.delphikingdom.com/
3. VCL - XL Report - {http://www.afalinasoft.com/rus/}
4. Если задача серьезнее и есть желание- используй библиотеки экспорта/импорта:
XLSReadWriteII 2.0 works with Delphi 5,6,7 and C++ Builder 5 and 6. home: http://www.axolot.com/components/xlsrwii20.htm
Удачи! |
Большое спасибо, за данный код, но так как я в программировании новичок, просьба помочь данный код оптимизировать под конкретную задачу. Есть файл Excel с данными, имеется 24 столбца и порядка 10 тысяч строк, в каждой ячейки есть числовое значение. И так же имеются Online значения которые содержаться в другой таблице (принцип размещения значений аналогичный). Необходимо чтобы online таблицу со значениями сравнивали со значениями другой (большой) таблицы и находились схожие строчки по значениям, так как в online-таблице значения постоянно добавляются во время дня, то нужно на перед знать как себя будет вести оборудование в дальнейшем т.е прогнозировать. Так же хотелось что бы в окне отображался график как online-значений так и значений схожих с этими данными чтобы было все наглядно на графики.
Присоединённый файл ( Кол-во скачиваний: 2 )
1.rar 10,76 Kb
|