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

Матричные функции для работы с Excel из VIPa

Добавлено: 06 сен 2004, 14:26
ecasoft
Добрый день! Вопрос.

С Exсel из Vipa работаем напрямую (запись в ячейки). Но для больших объемов получается очень долго записывать. Как то здесь в форуме мне говорили, что есть более быстрые функции..по-моему матричные. Кто-нибудь может подсказать, где можно почитать о них..или небольшой примерчик, если их немного. Мне просто надо вывалить данные SQL запроса в плоскую таблицу (лист) Excel..все оформления я сделаю Бейсиком потом. Если есть дока, то буду признателен, если кинете на почту. А может просто надо использовать пару функций?

С уважением, Игорь.

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 06 сен 2004, 21:18
Max_Fin
xlCreateMatrix
Function XLCREATEMATRIX(Rows, Cols : longint) : boolean;
Создает вариантный массив размерности [1 : Rows, 1 : Cols].
xlWriteToMatrix
Function xlWriteToMatrix (Row, Col : longint; Value : variant) : boolean;
Записать число в массив
xlClearMatrix
Function xlClearMatrix : boolean;
Очистить существующий массив.
xlWriteMatrixToExcel
Function xlWriteMatrixToExcel (RowU : longint = 0; ColL : longint = 0) : boolean;
Записать массив в книгу Excel с позиции (RowU, ColL)
xlFreeMatrix
Function xlFreeMatrix : boolean;
Освободить вариантный массив.

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 07 сен 2004, 12:54
ecasoft
Большое спасибо! Так посмотрел, вроде больше ничего и не надо..все функции нужные есть.

Если я правильно понял, т.к. ссылки на массив функция xlCreateMatrix (результат я так понял - успешное или не успешное окончание работы функции) не выдают, то в памяти может быть только один массив одновременно. Мы его формируем, переписываем в Excel и далее чистим для новой выгрузки или освобождаем память.

Будем пробывать ускорить :) Спасибо еще раз.

С уважением, Игорь

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 15 мар 2005, 09:37
Serges
Пробую матричные функции.
Компилятор ругается на xlWriteToMatrix - кричит, нет такой функции, поля или метода...

На остальные вышеописанные функции не жалуется, все нормально компилит. Версия 7.11, потеряли функцию? ???

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 15 мар 2005, 10:46
ecasoft
Да вроде все работает. НАверное не подцеплен ресурс. Вообще, чтобы проверить есть ли такая функция в версии или нет и в каком ресурсе можно в EXE каталоге искать по контексту (идентификатор функции). Если найдет - значит есть и укажет какой ресурс должен быть подцеплен. Если нет - значит нет такой.

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 15 мар 2005, 11:35
mik
попробуй
Function XLSTWRITETOMATRIX(longint, longint, string) : boolean;
Function XLDOWRITETOMATRIX(longint, longint, double) : boolean;
для строковых и чисел с плавоющей точкой соотв-но.

Re: Матричные функции для работы с Excel из VIPa

Добавлено: 15 мар 2005, 13:29
Serges
//попробуй
//Function XLSTWRITETOMATRIX(longint, longint, string) : boolean;
//Function XLDOWRITETOMATRIX(longint, longint, double) : boolean;

Да, уже нашел, эти работают. Видимо, дока устарела.

Добавлено: 28 дек 2005, 11:52
Serges
Столкнулся с ограничением функции xlCreateMatrix на количество строк. В доке опять таки про это нет, кто-нибудь может подтвердить и сообщить точное значение потолка?

У меня около 50000 записей. Эксперементальным путем выяснил, что затыкается на 32767 строке.
Пока не разобрался - то ли xlCreateMatrix не может создать такой массив, то ли xlWriteMatrixToExcel не может их в Excel запихать...

Добавлено: 29 дек 2005, 02:03
Deinis
Serges писал(а):Столкнулся с ограничением функции xlCreateMatrix на количество строк. В доке опять таки про это нет, кто-нибудь может подтвердить и сообщить точное значение потолка?

У меня около 50000 записей. Эксперементальным путем выяснил, что затыкается на 32767 строке.
Пока не разобрался - то ли xlCreateMatrix не может создать такой массив, то ли xlWriteMatrixToExcel не может их в Excel запихать...
Тоже сталкивался с тем, что выводится какая-то ерунда, если матрица размером достаточно большая. Экспериментально дошел до того, что 5000 записей выводятся без проблем. Может зависить от конкретной конфигурации компьютера? В общем, переделал отчет - теперь идет создание и вывод не одной матрицы, а нескольких матриц размером не более по-моему 5000 шт. записей. Естессно, матрицы создаются и после вывода убиваются :) Поэтому их и несколько.

Добавлено: 30 дек 2005, 08:48
levtov
32767 это ограничение типа Integer опиши как LongInt
переменные - аргументы в xlCreateMatrix

Добавлено: 17 янв 2006, 09:07
Alexx
Подскажите, а где можно почитать про описание всех функций для работы с Excel'ем из VIP'а?

Например, какой процедурой или функцией можно запустить VB-процедуру из экселя?

Добавлено: 17 янв 2006, 11:18
Max_Fin

Добавлено: 23 янв 2006, 16:57
Ksenia
Народ! А можно создавать несколько массивов одновременно? Если, например, необходимо сначало вывести данные по одному фильтру, а после - по другому, а фильтрация проводится в одном цикле??

Добавлено: 23 янв 2006, 17:50
Max_Fin
Нельзя! Различаются только массивы импорта и экспорта.

Добавлено: 23 янв 2006, 18:01
Ksenia
:-? А это как? Не могли бы Вы подробнее объяснить?