На работает xlWriteMatrixToExcel
Модераторы: m0p3e, edward_K, Модераторы
На работает xlWriteMatrixToExcel
Добрый день!Для оптимизации работы с выгрузкой в Excel решил переделать несколько отчетов на выгрузку с помощью матриц.
Но xlWriteMatrixToExcel не срабатывает. Хотя при трассировании кода - видно, что матрица заполняется корректно, функции по заполнению возвращают true. Сама матрица тоже объявлена корректно.
кусок кода работы с матрицами:
xlCreateExcelWithTemplate(('T:\ШАБЛОНЫ\Галактика\ шаблон.xls '),True);
i_:=1;
j_:=1;
//функция для определения количества записей в view
strcount_:=fGetSum_(strCount);
xlWriteMatrixToExcel(StrCount, 25);
xlClearMatrix;
_loop SMNMTOZAYAVKAREN {
xlDoWriteToMatrix(i_, 1, i_);
xlStWriteToMatrix(i_, 2, xxx.PID);
xlStWriteToMatrix(i_, 3, xxx.name);
xlStWriteToMatrix(i_, 4, yyyy.name);
xlStWriteToMatrix(i_, 5, yyyy.Gost);
........
xlStWriteToMatrix(i_, 23,katpodr.name);
i_:=i_+1;
}
xlWriteMatrixToExcel(4, 1);
xlSaveAsWorkBook(1,GetPathParameter('Files','OutputFilesDirectory',0)+'ОТЧЕТ2.xls');
xlFreeMatrix;
xlKillExcel;
Но xlWriteMatrixToExcel не срабатывает. Хотя при трассировании кода - видно, что матрица заполняется корректно, функции по заполнению возвращают true. Сама матрица тоже объявлена корректно.
кусок кода работы с матрицами:
xlCreateExcelWithTemplate(('T:\ШАБЛОНЫ\Галактика\ шаблон.xls '),True);
i_:=1;
j_:=1;
//функция для определения количества записей в view
strcount_:=fGetSum_(strCount);
xlWriteMatrixToExcel(StrCount, 25);
xlClearMatrix;
_loop SMNMTOZAYAVKAREN {
xlDoWriteToMatrix(i_, 1, i_);
xlStWriteToMatrix(i_, 2, xxx.PID);
xlStWriteToMatrix(i_, 3, xxx.name);
xlStWriteToMatrix(i_, 4, yyyy.name);
xlStWriteToMatrix(i_, 5, yyyy.Gost);
........
xlStWriteToMatrix(i_, 23,katpodr.name);
i_:=i_+1;
}
xlWriteMatrixToExcel(4, 1);
xlSaveAsWorkBook(1,GetPathParameter('Files','OutputFilesDirectory',0)+'ОТЧЕТ2.xls');
xlFreeMatrix;
xlKillExcel;
I just shot John Lennon
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: На работает xlWriteMatrixToExcel
Вместо xlWriteMatrixToExcel(StrCount, 25); надо xlCreateMatrix(StrCount, 25)
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: На работает xlWriteMatrixToExcel
Какое ограничение на кол-во записей в матрицу?
10тыс. записей пишутся красиво, а вот 140тыс. записей... выводится пустой эксель...
10тыс. записей пишутся красиво, а вот 140тыс. записей... выводится пустой эксель...
Re: На работает xlWriteMatrixToExcel
Судя по документации, 65536.
Код: Выделить всё
// В библиотеке превышение этих констант нигде не проверяется
MaxExcelRow = 65536;
MaxExcelCol = 256;
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: На работает xlWriteMatrixToExcel
Но вывод возможен в 2007 офисе и выше. Вообще разработчик выводит блоками , обычно строк по 100. Ну и следите за счетчиками - они должны быть longint
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: На работает xlWriteMatrixToExcel
я подозревал... печально как раз ушёл из старых экселей где дробил по листам чтобы выгружать данные в один лист и попадаюсь на ограниченном размере матрицы... ну буду резать тысяч по 10тыс. спсб.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: На работает xlWriteMatrixToExcel
что то не получилось... записалось ровно 60 тыс. записей, а следующая часть - пусто... т.е. она как то проанализировала что матрицу 10'000 х 50 если писать с позиции 60'001 х 1 она не входит типа в 65'565 ?
осталось slk попробовать?
проверил, xlWriteMatrixToExcel выдаёт false если конечная строчка превышает 65565.
осталось slk попробовать?
проверил, xlWriteMatrixToExcel выдаёт false если конечная строчка превышает 65565.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: На работает xlWriteMatrixToExcel
Точно знаю, что в FSS4 при выводе расшифровки проблем нет. Пробовать пока некогда. Проверьте тип переменных, которые используете.
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: На работает xlWriteMatrixToExcel
участвующих в выводе в эксель переменных типа word найдено не было а ФСС4 формируется как, прямой записью в эксель или xlt шаблоны или skl ?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: На работает xlWriteMatrixToExcel
Как то так
Код: Выделить всё
xlCreateMatrix(100, 20);
var LastRecord:longint;
LastRecord:= 2;
if SetSheet('Расшифровка')
{
SetVisualHeader(''#13'Перенос информации в Excel: Расшифровка');
var nmbRow : longint;
var jk,ik:longint;
nmbRow := 2;
ik := 2;
jk := 1;
_loop RasshifrSum
{
if (jk = 100)
{
xlWriteMatrixToExcel((ik - 99), 1);
jk := 1;
xlClearMatrix;
}
xlStWriteToMatrix(jk, 1,GetStrTabn(RasshifrSum.Tabn,RasshifrSum.StrTabn)); //Табельный номер
xlStWriteToMatrix(jk, 2,RasshifrSum.FIO); //ФИО
xlStWriteToMatrix(jk, 3,RasshifrSum.PodrName); //Подразделение
xlStWriteToMatrix(jk, 4,string(RasshifrSum.nmbTable)); //Номер таблицы
xlStWriteToMatrix(jk, 5,RasshifrSum.nameField); //Название поля
xlStWriteToMatrix(jk, 6,string(RasshifrSum.MonthV)); //Месяц в котором
xlStWriteToMatrix(jk, 7,string(RasshifrSum.YearV)); //Год в котором
xlStWriteToMatrix(jk, 8,string(RasshifrSum.MonthZ)); //Месяц за который
xlStWriteToMatrix(jk, 9,string(RasshifrSum.YearZ)); //Год за который
xlStWriteToMatrix(jk,10,string(RasshifrSum.FromBegYear)); //признак итоговой записи (с начала года)
xlStWriteToMatrix(jk,11,string(RasshifrSum.VidOpl)); //Вид оплаты
xlDoWriteToMatrix(jk,12,RasshifrSum.Summa); //Сумма
LastRecord:= (ik + 1) - jk;
inc(nmbRow);
inc(ik);
inc(jk);
}
}
xlWriteMatrixToExcel(LastRecord, 1);
xlClearMatrix;
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: На работает xlWriteMatrixToExcel
ну я как то так же и писал, только блоками по 10 тыс. записей.
т.е. при такой схеме у вас получается вывести больше 65565 строчек ?
т.е. при такой схеме у вас получается вывести больше 65565 строчек ?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: На работает xlWriteMatrixToExcel
не у меня . Но вроде выводит. Может быть шаблон надо также в формате 2007 подсовывать? Хотя вроде в обычный выводят.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: На работает xlWriteMatrixToExcel
накидал простенький примерчик
В общем если на вход подсунуть шаблон 2010 , то нормально, а если 2003 то нет.
Есть функция для определении версии установленного офиса, только инициализация Excel все равно нужна - то есть открыли посмотрели, закрыли, открыли нужный шаблон.
- xlCheckExcelInstall():boolean - определение установлен ли Excel на компьютер.
- xlGetVersionExcelInstall(var sVersion : string):boolean. Параметром sVersion
возвращается версия Excel установленная на компьютере.
В общем если на вход подсунуть шаблон 2010 , то нормально, а если 2003 то нет.
Есть функция для определении версии установленного офиса, только инициализация Excel все равно нужна - то есть открыли посмотрели, закрыли, открыли нужный шаблон.
- xlCheckExcelInstall():boolean - определение установлен ли Excel на компьютер.
- xlGetVersionExcelInstall(var sVersion : string):boolean. Параметром sVersion
возвращается версия Excel установленная на компьютере.
Код: Выделить всё
xlOpenNewExcel(false)
xlGetVersionExcelInstall(VersionExcel);
xlKillExcel;
if double(VersionExcel)>11
Re: На работает xlWriteMatrixToExcel
Памятка для администраторов Галактики 8.1
«Формирование отчетов Excel размером более 65536 строк»
Суть проблемы. Формат файлов XLS строй версии Microsoft Excel 97-2003 не поддерживает листы размером более чем 65536 строк. Данное ограничение было снято в более поздних версиях Microsoft Excel 2007-2010. Соответственно, изменился формат файлов XLSX.
Более подробно см статьи на тему «Технические характеристики и ограничения Microsoft Excel»
- Применимо к Excel 2003 http://office.microsoft.com/ru-ru/excel ... 99291.aspx
- Применимо к Excel 2007 http://office.microsoft.com/ru-ru/excel ... 73849.aspx
- Применимо к Excel 2010 http://office.microsoft.com/ru-ru/excel ... 42495.aspx
В Галактике 8.1 часть отчетов реализована с примирением шаблонов и макросов Excel.
В дистрибутиве Галактики шаблоны поставляются старом формате XLT «Шаблон Excel 97-2003» т.к. множество пользователей все еще используют старые версии офиса. Соответственно при формировании отчетов большого объема пользователь будет получать ошибку, даже если на его рабочем месте установлена новая версия Excel 2010. Происходит это, потому что сам формат файла не поддерживает большое количество строк.
Чтобы решить проблему шаблон отчета требуется конвертировать в новый формат XLTM «Шаблон Excel с поддержкой макросов».
См. также: Пошаговая инструкция по конвертации на примере
-
- Местный житель
- Сообщения: 554
- Зарегистрирован: 17 июл 2012, 11:56
- Откуда: Республика Беларусь, г.Могилев
Re: На работает xlWriteMatrixToExcel
Спасибо, LaaLaa. Полезная информация. Насколько я понимаю, при изменении с патчами стандартного шаблона описанную процедуру конвертации надо будет повторять.