На работает xlWriteMatrixToExcel

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

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

beatlov
Посетитель
Сообщения: 31
Зарегистрирован: 29 сен 2009, 13:29
Откуда: Ухта

На работает xlWriteMatrixToExcel

Сообщение beatlov »

Добрый день!Для оптимизации работы с выгрузкой в 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;
I just shot John Lennon
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: На работает xlWriteMatrixToExcel

Сообщение Vik »

Вместо xlWriteMatrixToExcel(StrCount, 25); надо xlCreateMatrix(StrCount, 25)
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: На работает xlWriteMatrixToExcel

Сообщение Алексей »

Какое ограничение на кол-во записей в матрицу?
10тыс. записей пишутся красиво, а вот 140тыс. записей... выводится пустой эксель...
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: На работает xlWriteMatrixToExcel

Сообщение RAJAH »

Судя по документации, 65536.

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

// В библиотеке превышение этих констант нигде не проверяется
MaxExcelRow = 65536;
MaxExcelCol = 256;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: На работает xlWriteMatrixToExcel

Сообщение edward_K »

Но вывод возможен в 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.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: На работает xlWriteMatrixToExcel

Сообщение edward_K »

Точно знаю, что в FSS4 при выводе расшифровки проблем нет. Пробовать пока некогда. Проверьте тип переменных, которые используете.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: На работает xlWriteMatrixToExcel

Сообщение Алексей »

участвующих в выводе в эксель переменных типа word найдено не было :) а ФСС4 формируется как, прямой записью в эксель или xlt шаблоны или skl ?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: На работает xlWriteMatrixToExcel

Сообщение edward_K »

Как то так

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

  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 строчек ?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: На работает xlWriteMatrixToExcel

Сообщение edward_K »

не у меня 8) . Но вроде выводит. Может быть шаблон надо также в формате 2007 подсовывать? Хотя вроде в обычный выводят.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: На работает xlWriteMatrixToExcel

Сообщение edward_K »

накидал простенький примерчик
В общем если на вход подсунуть шаблон 2010 , то нормально, а если 2003 то нет.
Есть функция для определении версии установленного офиса, только инициализация Excel все равно нужна - то есть открыли посмотрели, закрыли, открыли нужный шаблон.
- xlCheckExcelInstall():boolean - определение установлен ли Excel на компьютер.
- xlGetVersionExcelInstall(var sVersion : string):boolean. Параметром sVersion
возвращается версия Excel установленная на компьютере.

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

  xlOpenNewExcel(false)
  xlGetVersionExcelInstall(VersionExcel);
  xlKillExcel;
  if double(VersionExcel)>11
LaaLaa

Re: На работает xlWriteMatrixToExcel

Сообщение LaaLaa »

Памятка для администраторов Галактики 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 с поддержкой макросов».

См. также: Пошаговая инструкция по конвертации на примере
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: На работает xlWriteMatrixToExcel

Сообщение Irina_ »

Спасибо, LaaLaa. Полезная информация. Насколько я понимаю, при изменении с патчами стандартного шаблона описанную процедуру конвертации надо будет повторять.
Ответить