Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Ошибка импорта таблицы Эксель


Михалыч   (15.07.19 18:39

Привет народ! Кто в теме с Экселем? помогите пожалуйста!
Нужно залить большую таблицу, около миллиона строк в БД Firebird 2.5
Пробую импортировать так:
procedure XlsToStringGrid(AGrid: TStringGrid; AXLSFile: string);
const
 xlCellTypeLastCell = $0000000B;
var
 XLApp, Sheet: OLEVariant;
 RangeMatrix: Variant;
 x, y, k, r: Integer;
begin
 XLApp := CreateOleObject('Excel.Application');
 try
   xlapp.Visible := False;
   XLApp.Workbooks.Open(AXLSFile);
   Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
   x := XLApp.ActiveCell.Row;
   y := XLApp.ActiveCell.Column;    AGrid.RowCount := x;
   AGrid.ColCount := y;
   {rcounts:=x;}
   RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
   k := 1;
   repeat
     for r := 1 to y do AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
     Inc(k, 1);
     AGrid.RowCount := k + 1;
   until k > x;
   RangeMatrix := Unassigned;
     finally
   if not VarIsEmpty(XLApp) then
   begin
     xlapp.application.screenupdating:=true;
     xlapp.application.enableevents:=true;
     xlapp.application.interactive:=true;
     xlapp.application.displayalerts:=true;
     XLApp.ActiveWorkBook.Close;
     XLAPP := Unassigned;
     Sheet := Unassigned;
   end;
 end;
end;

На строке RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
вылетает такая ошибка: EOleSysError Недостаточно памяти для завершения операции!
RAM 8 Gb на моем ПК, мониторил память и во время вылета было 4,4 Гб свободно. Как побороть эту проблему?


Михалыч   (15.07.19 20:02[1]

И еще одна ошибка вылетает,тоже наверно из-за нехватки памяти при очистке StringGrid в котором миллион строк.
Код очистки:

var
i:Longint;
begin
for I := 1 to StringGrid1.RowCount - 1 do StringGrid1.Rows[I].Clear;
end;


ухты ©   (16.07.19 14:32[2]

Если задача одноразовая, то зачем делфи? поискать каким образом можно легко импортировать данные
если многоразовая. то проще использовать адо при работе с excel, вот тут что то должно быть https://www.google.com/search?q=delphi+ado+excel


Михалыч   (16.07.19 20:23[3]

Сделал построчно импорт csv файла


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо