Довольно распространенная задача в программировании – загрузка данных в проект из внешнего файла. В отличие от загрузки из обычного текстового файла, загрузка из 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-объектами для этого кода нужно добавить библиотеку:
uses
ComObj;
После указанных операций данные введены в массив, из которого их можно перенести в компонент 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];
Функция MoveFile в Delphi, описание и примеры
Создание и работа с текстовыми файлами в Delphi
Выравнивание текста в ячейке Delphi StringGrid
Антон Сенников
- 03 июня 2021, 18:20 ↓В данном примере указано наименование библиотеки и раздела, где она должна быть добавлена. Поэтому другие там не упомянуты.
Влад
- 03 июня 2021, 18:10 ↓ComObj; недостаточно