Вывод из VarArray в Excel

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вывод из VarArray в Excel

Сообщение tgrisha » 19.11.2022 23:48:50

Создаю массив с помощью VarArrayCreate и вывожу его в Excel. Столкнулся с такой проблемой, в версиях Lazarus до 2.0.12 включительно это работает, а в более новых выдает ошибку EOleSysError: Член группы не найден. С чем это может быть связано?

Код: Выделить всё
    uses ..., ComObj, Variants;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    var
      XL, XLb, XLs, XLa: Variant;
      i: integer;
    begin
      XL:=CreateOleObject('Excel.Application');
      XLb:=XL.Workbooks.Open(widestring(UTF8ToAnsi('D:\test.xlsx')));
      XLs:=XLb.Worksheets[1];
      XLa:=VarArrayCreate([1,3,1,3],varVariant);
      for i:=1 to 3 do begin
        XLa[i, 1] := '111';
        XLa[i, 2] := '222';
        XLa[i, 3] := '333';
      end;
      XLs.Range['A1:C3'].Value := XLa;  // в этом месте ошибка
    end;
tgrisha
незнакомец
 
Сообщения: 1
Зарегистрирован: 19.11.2022 23:29:36

Re: Вывод из VarArray в Excel

Сообщение Sharfik » 21.11.2022 02:13:25

Типы данных для нормальной работы OleVariant, WideString. Попробуй, может оживет.

Нужно конкретно такой способ вывода? Это просто не очень надежный вариант и совсем не перспективный.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 763
Зарегистрирован: 20.07.2013 01:04:30

Re: Вывод из VarArray в Excel

Сообщение sts » 21.11.2022 14:27:06

я точно знаю что надо цикл обернуть в
Код: Выделить всё
VarArrayLock(XLa);
try
      for i:=1 to 3 do begin
        XLa[i, 1] := '111';
        XLa[i, 2] := '222';
        XLa[i, 3] := '333';
      end;
finally
  VarArrayUnLock(XLa);
end;

XLs.Range['A1:C3'].Value := XLa;


Добавлено спустя 3 минуты 5 секунд:
типа там асинхронно работает создание массива

Добавлено спустя 21 секунду:
в смысле заполнение
sts
постоялец
 
Сообщения: 411
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot] и гости: 39

Рейтинг@Mail.ru