ПредишенСледващото

За осемнадесет месеца ми предложиха няколко варианта за това как да се ускори четене на данни от работен лист на Excel - използването на MSXML библиотеки и други готови за себе си процедури и функции. Е, всеки проблем може да бъде решен по няколко начина. С няколко опции и да определи кой вариант би бил най-бързият. Е, какво опция би било по-удобно - това е всеки решава за себе си.

Четене на данни от Excel

Първо, помислете за възможността за четене на данни, използващи този грях онези, които са само началото им познаване на Excel в Делфи - четене на данни от всяка клетка поотделно. Процедура на изпитване с опцията за четене може да изглежда така:

Броячът в крайна сметка ще съдържа времето за четене и StringGrid изходните данни. Това би било възможно да се направи тезгяха само за четене на данни от листа, но реших да не се претовари изходните повтарящите се променливи. Ако има желание - може да бъде пренаписана малко изходния код и да получите "чисто" време за четене.

Excel лист се генерира за изпитването на това изпълнение с 143 реда и 142 колони с данни, т.е. 20306 клетки с данни. Фигурата по-долу показва брояч стойност при четене на данни:

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

Ако се вгледате внимателно в процедурата, представена по-горе, можем да видим, че всеки път, когато цикъл в началото на всяка итерация стигнем диапазона заета от данните, а след това този диапазон получава определена клетка и след това се отчита стойността в клетката. В действителност, толкова много ненужни операции за четене на данни от не се изисква листа. Особено, когато данните са разположени непрекъснато масив. По-изгодно в този случай един ще се чете да чете данни директно от целия обхват на масива.

В действителност, което прави този вид работа, би било още по-лесно, отколкото представени по-горе. Вижте сами. Тук е опция за четене на данни от редица:

Очакваме по време на операцията:

Както можете да видите, скоростта на растеж е огромен, дори и като се има предвид факта, че на уреда има актуализация време StringGrid'a.

Тук би било подходящо да се покаже обратния начин на работа с Excel, т.е. запис на данни върху лист Excel с помощта на вариант масив.

Писане на данни към Excel

Ако ние трябва да се напише голямо количество данни в лист Excel, ние трябва да се извърши обратната операция, т.е. първо да създадете вариант масив, след това да напишете данните в масива и след това да напишете целия масив в една операция в Excel. Например, аз написах една рутинна, която гласи голямо количество данни от StringGrid и изпраща данни на втория лист на Excel отворена книга:

Ето, ние първо да създадете двумерен вариант масив, използвайки метод VarArrayCreate, а след това попълнете масива от данни и да премине на масива за Excel. Имайте предвид, че не използва никакви линии в Excel, когато записвате - запис се извършва в 2 лесни стъпки:

  • изберете периода, като се използва набор от границите първата и последната клетка
  • задаване диапазон от стойности от масив.

За пълнота, на следващата фигура показва стойността на брояча, който се изчислява от момента на създаването на масива да Excel, за да активирате приложението включва:

Естествено, ръстът на данни ще продължи да расте и да извършва операцията. Например, лист, съдържащ 1000 реда и 256 колони напълнени с данни за 7 секунди. Ако имате такъв момент, е неприемливо, а след това по-горе процедура може да бъде леко се ускори с помощта на чифт VarArrayLock () и VarArrayUnlock (), но трябва да се има предвид, че FData матрица ще бъде транспонирана.

Какво друго е необходимо да се каже за данните за четене / запис в Excel? Вероятно, че методите, предложени по-горе дела, без да успеят да изискват Excel, инсталирана на компютъра, на който стартирате програмата. Във връзка с това, може да се наложи по-гъвкав начин на работа с Excel. Тук отново може да има няколко версии на работата, но аз ще се появи, а по-скоро посоча само един от тях - с XLSReadWrite библиотека.

Един опростен пример за Delphi 7

Пълен пример на библиотеката:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!