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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

Добрый день! Вопрос.

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

С уважением, Игорь.
Некоммерческое общение в форуме
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

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

Сообщение 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;
Освободить вариантный массив.
Жду выхода Вселенная 2.12!
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

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

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

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

С уважением, Игорь
Некоммерческое общение в форуме
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение Serges »

Пробую матричные функции.
Компилятор ругается на xlWriteToMatrix - кричит, нет такой функции, поля или метода...

На остальные вышеописанные функции не жалуется, все нормально компилит. Версия 7.11, потеряли функцию? ???
Галактика 8.10, Oracle 10g / 10.2.0.4
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

Да вроде все работает. НАверное не подцеплен ресурс. Вообще, чтобы проверить есть ли такая функция в версии или нет и в каком ресурсе можно в EXE каталоге искать по контексту (идентификатор функции). Если найдет - значит есть и укажет какой ресурс должен быть подцеплен. Если нет - значит нет такой.
Некоммерческое общение в форуме
mik
Новичок
Сообщения: 25
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение mik »

попробуй
Function XLSTWRITETOMATRIX(longint, longint, string) : boolean;
Function XLDOWRITETOMATRIX(longint, longint, double) : boolean;
для строковых и чисел с плавоющей точкой соотв-но.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение Serges »

//попробуй
//Function XLSTWRITETOMATRIX(longint, longint, string) : boolean;
//Function XLDOWRITETOMATRIX(longint, longint, double) : boolean;

Да, уже нашел, эти работают. Видимо, дока устарела.
Галактика 8.10, Oracle 10g / 10.2.0.4
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

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

У меня около 50000 записей. Эксперементальным путем выяснил, что затыкается на 32767 строке.
Пока не разобрался - то ли xlCreateMatrix не может создать такой массив, то ли xlWriteMatrixToExcel не может их в Excel запихать...
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Deinis »

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

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

Сообщение levtov »

32767 это ограничение типа Integer опиши как LongInt
переменные - аргументы в xlCreateMatrix
Лучше перебдеть, чем недобдеть!
Alexx
Постоянный обитатель
Сообщения: 168
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Alexx »

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

Например, какой процедурой или функцией можно запустить VB-процедуру из экселя?
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Жду выхода Вселенная 2.12!
Ksenia
Посетитель
Сообщения: 39
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Киев
Контактная информация:

Сообщение Ksenia »

Народ! А можно создавать несколько массивов одновременно? Если, например, необходимо сначало вывести данные по одному фильтру, а после - по другому, а фильтрация проводится в одном цикле??
Учиться, учиться и еще раз учиться
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Нельзя! Различаются только массивы импорта и экспорта.
Жду выхода Вселенная 2.12!
Ksenia
Посетитель
Сообщения: 39
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Украина, Киев
Контактная информация:

Сообщение Ksenia »

:-? А это как? Не могли бы Вы подробнее объяснить?
Учиться, учиться и еще раз учиться
Ответить