Как Узнать Количество Строк в Excel из Delphi • План статьи

Delphi импорт из excel

Довольно распространенная задача в программировании – загрузка данных в проект из внешнего файла. В отличие от загрузки из обычного текстового файла, загрузка из Excel, как и любого другого специального файла или подключение к базе данных, требует отдельного механизма реализации.

В данной статье рассматривается один из наиболее удобных способов работы с подгружаемыми из Excel данными. Значения всех ячеек страницы Excel вносятся в двумерный массив типа Variant. Затем с этим массивом уже можно работать любыми привычными способами.

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

Для использования команд работы с OLE-объектами для этого кода нужно добавить библиотеку:

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

// назначение размера StringGrid по размеру полученного диапазона ячеек
MyStringGr >
MyStringGr >

// заполнение таблицы StringGrid значениями массива
for x := 1 to MyStringGr >do
for y := 1 to MyStringGr >do
MyStringGr >

Существует документ Excel — он может быть разным (может иметь много столбцов, в заголовке может быть шапка, может быть большой диапазон данных). Есть необходимость импорта определенного диапазона данных из Excel в таблицу БД. Вопрос:

  1. Каким образом можно импортировать данные из таблицы Excel в таблицу БД?
  2. Можно ли использовать функции Drag&Drop? Скопировать диапазон в Excel и вставить в таблицу (для отображения данных использую компонент DBGrid)?

План статьи:

Чтение данных из Excel

Вначале рассмотрим вариант чтения данных использованием которого грешат те, кто только начинает свое знакомство с Excel в Delphi — чтение данных из каждой ячейки по отдельности. Тестовая процедура с таким вариантом чтения может выглядеть следующим образом:

Счётчик будет в итоге содержать время чтения и вывода в StringGrid данных. Можно было бы сделать счётчик исключительно на чтение данных с листа, но я решил не перегружать исходник лишними переменными. Если будет желание — можете переписать чуть-чуть исходник и получить «чистое» время чтения.

Для теста этого варианта был создан лист Excel, содержащий 143 строки и 142 столбца с данными, т.е. 20306 ячеек с данными. На рисунке ниже представлено значение счётчика после чтения данных:

Как Узнать Количество Строк в Excel из Delphi • План статьи

12 секунд на чтение…а если будет 1000 строк и 1000 столбцов? Так можно и не дождаться окончания операции.

На деле реализация этого варианты работы окажется даже проще, чем представленного выше. Смотрите сами. Вот вариант чтения данных целым диапазоном:

Здесь мы ввели всего одну переменную FData типа Variant. В эту переменную мы прочитали за 1 операцию весь диапазон, занятый данными. После того как диапазон прочитан FData будет содержать матрицу, каждый элемент которой будет типом данных, определенным в Excel.

Как Узнать Количество Строк в Excel из Delphi • План статьи

Как видите, прирост скорости оказался колоссальным, учитывая даже то, что в счётчик попало время обновления StringGrid’а.

Здесь было бы уместно показать и обратный метод работы с Excel, т.е. запись данных на лист Excel с использованием вариантного массива.

Запись данных в Excel

Здесь мы вначале создаем двумерный вариантный массив, используя метод VarArrayCreate, после чего заполняем массив данным и передаем этот массив в Excel. Обратите внимание, что при записи в Excel не используются никакие циклы — запись происходит в 2 простых действия:

Для полноты картины ниже на рисунке представлено значение счётчика, который отсчитал время от момента создания массива до активации приложения Excel включительно:

Как Узнать Количество Строк в Excel из Delphi • План статьи

Про эту библиотеку мне поведал один из читателей блога в комментарии как раз-таки к посту «»Работа с Excel в Delphi. Основы основ«. Чтобы лишний раз Вас не переправлять на комментарий с примером использования этой библиотеки, я с разрешения GS (ник автора кода) просто опубликую здесь уже готовые примеры использования библиотеки XLSReadWrite:

эксперт
Мнение эксперта
Михаил Соловьев, консультант по вопросам работы с продуктами Microsoft
Если у вас возникнут сложности, я помогу разобраться!
Задать вопрос эксперту
Попробуем реализовать работу метода следующим образом заполним столбец А некоторыми значениями, а затем скопируем его сначала в буфер, а потом в столбец Е. Если же вы хотите что-то уточнить, обращайтесь ко мне!
Во-первых, процедура BufferToClipboard — вещь не стандартная. Она создана как альтернатива методу SetTextBuf класса TClipboard. Наверняка, все знают что в VCL доступна глобальная переменная Clipboard, экземпляр класса TClipboard, инкапсулирующего свойства и методы доступа к этому самому буферу обмена. И, собственно, вызов SetTextBuf позволяет поместить строку в буфер. Но!
Как посчитать количество строк в Excel

Королевство Delphi — Автоматизация приложений MS® Office® для эффективного анализа результатов

  1. Каким образом можно импортировать данные из таблицы Excel в таблицу БД?
  2. Можно ли использовать функции Drag&Drop? Скопировать диапазон в Excel и вставить в таблицу (для отображения данных использую компонент DBGrid)?

2) Перейдите на главную панель и выберите «Стили» далее нажимаем на пиктограмму «Условное форматирование». В условном форматировании выберите «Правила выделения ячеек» и для нашего случая выбираем правило «Большее. »

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector