Конференция "Начинающим" » Нехватка памяти при импорте таблицы [D7, XP]
 
  • Степаныч (05.10.17 13:14) [0]
    Привет народ! Кто знает че за нафиг?
    Кидаю данные с таблицы Экселича в прогу таким макаром:

    procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject);
    var
    WorkBk : _WorkBook;
    WorkSheet : _WorkSheet;
    K, R, X, Y : Integer;
    IIndex : OleVariant;
    RangeMatrix : Variant;
    NomFich : WideString;
    begin
    NomFich := 'C:\MyDirectory\NameOfFile.xls';
    IIndex := 1;
    XLApp.Connect;
    // Открываем файл Excel
    XLApp.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,0);
    WorkBk := XLApp.WorkBooks.Item[IIndex];
    WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
    // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
    // столбцов, мы активируем его последнюю непустую ячейку
    WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
    // Получаем значение последней строки
    X := XLApp.ActiveCell.Row;
    // Получаем значение последней колонки
    Y := XLApp.ActiveCell.Column;
    // Определяем количество колонок в TStringGrid
    GenericStringGrid.ColCount := Y;
    // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
    RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
    // Выходим из Excel и отсоединяемся от сервера
    XLApp.Quit;
    XLApp.Disconnect;
    // Определяем цикл для заполнения TStringGrid
    K := 1;
    repeat
    for R := 1 to Y do
    GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
    Inc(K,1);
    GenericStringGrid.RowCount := K + 1;
    until
    K > X;
    // Unassign the Delphi Variant Matrix
    RangeMatrix := Unassigned;
    end;

    На строке RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
    импорт обрывается с мессагой нехватки памяти блин.. ((
    в таблице всего 10000 строк
    Как разрулить?
  • Степаныч (05.10.17 13:46) [1]
    После того как поменял Y := XLApp.ActiveCell.Column;
    на Y := 4; //кол.колонок моей таблицы
    импорт пошел, ошибка не появилась до его завершения.
    Кто знает как работает эта команда: XLApp.ActiveCell.Column ?
    Если определяет кол.активных столбцов с данными то я не
    уверен что она это правильно делает.. ))
  • rrrrrrr © (05.10.17 14:56) [2]
    все что выше удалить.

    открыть книгу через адо и сделать select * from [лист1]
  • Степаныч (05.10.17 15:30) [3]
    >rrrrrrr  юзаю огнептиц и IBQuery ))
  • rrrrrrr © (05.10.17 15:34) [4]
    открыть книгу через адо и сделать select * from [лист1]
 
Конференция "Начинающим" » Нехватка памяти при импорте таблицы [D7, XP]
Есть новые Нет новых   [118242   +29][b:0][p:0]