Страница 1 из 1

Запись/чтение из вариантного массива (Excel)

Добавлено: 25 июн 2008, 16:17
galover
Записать в вариантный массив значение могу, а как его прочитать?
Я так понимаю, что никак, потому что xlReadMatrixFromExcel и ReadFromMatrix используют свой массив, не связанный с созданным для записи
:(

Добавлено: 25 июн 2008, 16:27
m0p3e
Смотри
CreateMatrixEx(Rows, Cols: Integer): LongInt;
ReadMatrixFromExcelEx(ID, RowU, ColL, RowD, ColR: Integer): boolean;
ReadFromMatrixEx(ID, Row, Col: Integer; var Value: variant): boolean;

Добавлено: 25 июн 2008, 16:49
galover
m0p3e
ууух, здорово, спасибо :cool: , надо будет попробовать. Именно версии с суффиксами Ex нужно использовать, без них не канает??? а писать в матрицу тоже версиями Ex?

Вообще я так понял, что Ex - это для 3-х уровневой конфигурации

Добавлено: 25 июн 2008, 16:54
m0p3e
Нет. Ex это функции работающие с коллекцией матриц. Обчные функции вызывают Ex для текущей матрицы. Трехзвенка тут ни при чем.

Например так выглядит вызов xlReadFromMatrix

Код: Выделить всё

Function tExporter.ReadFromMatrix;
begin
  Result := false;
  try
    Result := ReadFromMatrixEx(MatrixForReadID,Row,Col,Value);
  except
    LogOnExcept('ReadFromMatrix');
    LastError := cgxlErrReadFromMatrix;
  end
end;

Добавлено: 25 июн 2008, 17:08
galover
m0p3e
про 3-х звенку говорю потому что Ex функции в либе ExcelLib3x.dll судя по файлу декларации, что тут скидывали недели 2 назад

Так писать в матрицу как? Ex или обычными версиями

А как узнать ID коллекции для которой вызываем read. Чего-то я про коллекции матриц не догнал до конца (их ввели для того, чтобы писать в одном сеансе в разные рабочие книги? как отличить одну матрицу от другой, ну я про тот самый ID)

Добавлено: 25 июн 2008, 17:47
m0p3e
Трехзвенка ну вообще ни при чем. ExcelLib3X хитрым образом вызывает функции из ExcelLib.

Код: Выделить всё

Begin 
 var MyMatrix1, MyMatrix2
 MyMatrix1 := xlCreateMatrixEx(10,10);
 MyMatrix2 := xlCreateMatrixEx(15;15);
 xlStWriteToMatrixEx(MyMatrix1,1,1,String);
 xlDoWriteToMatrixEx(MyMatrix1,2,1,Value);

 xlReadMatrixFromExcelEx(MyMatrix2,10,10,25,25);
End
Ввели их для работы с несколькими массивами данных одновременно в одном сеансе. Что такое матрица? Обычный паскалевый вариантный массив.
CurMatrix := VarArrayCreate([1, Cols, 1, Rows], varVariant);

Код: Выделить всё

    // методы работы с коллекцией вариантных массивов (позволяет на порядок увеличить скорость обмена данными между приложением и Excel и даёт возможность вывода несколько вариантных массивов)
    Function CreateMatrixEx(Rows, Cols : longint) : LongInt;
    Function FreeMatrixEx(ID : Longint ) : boolean;
    Function ClearMatrixEx(ID : Longint ): boolean;
    Function WriteToMatrixEx(ID, Row, Col : longint; Value : variant) : boolean;
    Function WriteDateToMatrixEx(ID, Row, Col : longint; Year, Month, Day : word) : boolean;
    Function ReadFromMatrixEx(ID, Row, Col : longint; var Value : variant) : boolean;
    Function WriteMatrixToExcelEx(ID : Longint; RowU : longint = 0; ColL : longint = 0) : boolean;
    Function ReadMatrixFromExcelEx(ID : LongInt; RowU : longint = 0; ColL : longint = 0; RowD : longint = 0; ColR : longint = 0) : boolean;

Добавлено: 25 июн 2008, 18:31
galover
m0p3e
спасибо!

про последние приведенные функции не понял -> их определений я не нашел, да и странно - почему xl приставка спереди отстутствует (т.е. чем ReadMatrixFromExcelEx отличается от xlReadMatrixFromExcelEx)???

Добавлено: 25 июн 2008, 18:43
m0p3e
Это экспортируемые функции модуля tExporter которые ExcelLib в свою очередь экспортирует с приставкой xl :)

Код: Выделить всё

library ExcelLib;
---------------------
  CreateMatrixEx name 'XLCREATEMATRIXEX',
  ClearMatrixEx name 'XLCLEARMATRIXEX',
  FreeMatrixEx name 'XLFREEMATRIXEX',
  WriteToMatrixEx name 'XLWRITETOMATRIXEX',
  WriteDateToMatrixEx name 'XLWRITEDATETOMATRIXEX',
  ReadFromMatrixEx name 'XLREADFROMMATRIXEX',
  WriteMatrixToExcelEx name 'XLWRITEMATRIXTOEXCELEX',
  ReadMatrixFromExcelEx name 'XLREADMATRIXFROMEXCELEX',
---------------------

Добавлено: 25 июн 2008, 18:55
galover
но вообще не логично как-то, функции с Ex работают иначе, чем без этого суффикса. Т.е. если xlReadMatrixFromExcelEx считывает данные из заданного массива, то xlReadMatrixFromExcel ничего не считывает из массива по умолчанию

Добавлено: 25 июн 2008, 19:00
galover
ошибка, речь конечно же о xlReadFromMatrix и xlReadFromMatrixEx

xlReadFromMatrix - не читает данные из массива по умолчанию (созданного по CreateMatrix) :(

Добавлено: 25 июн 2008, 19:04
galover
сорри, кажись дошло xlReadFromMatrix читает из массива созданного по xlReadMatrixFromExcel

Добавлено: 25 июн 2008, 19:11
m0p3e
xlReadMatrixFromExcel создает свой массив. Даже в excel.doc написано:
Внимание! Вариантные массивы для экспорта и импорта совершенно различные и никак между собой не связаны. Для импорта никакой инициализации не нужно.

Вообще лучше забыть про функции без Ex. IMHO оставлены они только для совместимости.