Завантаження даних з excel в delphi stringgrid або масив

Досить поширена завдання в програмуванні - завантаження даних в проект із зовнішнього файлу. На відміну від завантаження зі звичайного текстового файлу. завантаження з Excel, як і будь-якого іншого спеціального файлу або підключення до бази даних. вимагає окремого механізму реалізації.

У даній статті розглядається один з найбільш зручних способів роботи з модулями з Excel даними. Значення всіх осередків сторінки Excel вносяться в двовимірний масив типу Variant. Потім з цим масивом вже можна працювати будь-якими звичними способами.

У загальному вигляді все зводиться до підключення програми до файлу Excel, отримання необхідного діапазону комірок і присвоєння вашому масиву значення заданого діапазону комірок.

const
xlCellTypeLastCell = $ 0000000B;
var
ExcelApp, ExcelSheet: OLEVariant;
MyMass: Variant;
x, y: Integer;
begin
// створення OLE-об'єкта Excel
ExcelApp: = CreateOleObject ( 'Excel.Application');

// відкриття книги Excel
ExcelApp.Workbooks.Open ( 'C: \ my_excel.xls');

// відкриття листа книги
ExcelSheet: = ExcelApp.Workbooks [1] .WorkSheets [1];

// виділення останньої задіяної осередки на аркуші
ExcelSheet.Cells.SpecialCells (xlCellTypeLastCell) .Activate;

// отримання значень розміру обраного діапазону
x: = ExcelApp.ActiveCell.Row;
y: = ExcelApp.ActiveCell.Column;

// привласнення масиву діапазону комірок на аркуші
MyMass: = ExcelApp.Range [ 'A1', ExcelApp.Cells.Item [X, Y]]. Value;

// закриття книги і очищення змінних
ExcelApp.Quit;
ExcelApp: = Unassigned;
ExcelSheet: = Unassigned;
end;

* Метод SpecialCells використовується для виділення певних осередків на підставі оцінки їх вмісту або інших характеристик. Застосоване тут значення параметра-константи xlCellTypeLastCell вказує методу виділити останню клітинку використовуваного діапазону, тобто саму нижню праву комірку в діапазоні, де введено хоч якесь значення. Це дозволяє копіювати не всі осередки листа, а лише діапазон, що містить будь-які дані.

Для використання команд роботи з OLE-об'єктами для цього коду потрібно додати бібліотеку:

Після зазначених операцій дані введені в масив, з якого їх можна перенести в компонент StringGrid або використовувати їх на свій розсуд. Варто зауважити, що в отриманому в такий спосіб масиві дані індекси розташовуються в наступному порядку: [номер рядка, номер стовпця]. Це видно з такого прикладу виведення даних масиву в компонент StringGrid.

// призначення розміру StringGrid за розміром отриманого діапазону комірок
MyStringGrid.RowCount: = x;
MyStringGrid.ColCount: = y;

// заповнення таблиці StringGrid значеннями масиву
for x: = 1 to MyStringGrid.ColCount do
for y: = 1 to MyStringGrid.RowCount do
MyStringGrid.Cells [x-1, y-1]: = MyMass [y, x];

Ще матеріали з цього розділу