Вывод больших таблиц в EXCEL используя Yoksel

1. kotov 209 26.11.08 17:55 Сейчас в теме
Всем Здравствуйте!

Помогите с проблемой:
Не могу корректно сделать сохранение в эксель на нескольких листах.

гТаблица.Записать (ИмяВременногоФайла);
Документ = СоздатьОбъект ("ТабличныйДокумент");
Документ.Открыть (ИмяВременногоФайла);
КоличествоСтрок=Документ.ВысотаТаблицы();
НачСтрока=1;
КонСтрока=65536;
Если КонСтрока>КоличествоСтрок Тогда
КонСтрока=КоличествоСтрок;
КонецЕсли;
Конвертер = СоздатьОбъект ("КонвертерExcel");
Книга = Конвертер.Создать();
Книга.Листы.Очистить();
Для НомерЛиста=1 По Окр(КоличествоСтрок/КонСтрока+1,0,0) Цикл
ИмяЛиста="Лист "+СокрЛП(Строка(НомерЛиста));
Документ.УдалитьСтрок(КонСтрока+1,КоличествоСтрок-КонСтрока);
Книга.Листы.Добавить (ИмяЛиста,Документ);
Книга.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
Если КонСтрока<КоличествоСтрок Тогда
Документ.Очистить();
Документ.Открыть(ИмяВременногоФайла);
Документ.УдалитьСтроки(1,КонСтрока);
КонецЕсли;
КонецЦикла;
Книга.Записать (ВыбИмяФайла);
И в итоге,если строк в отчете больше 65536, то получаю на каждом листе одно и тоже.Как выйти из этой ситуации?? Спасибо
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ёпрст 1065 26.11.08 18:04 Сейчас в теме
Ё... дык токма офис 2007 работает с большим количеством строк однако.
3. kotov 209 26.11.08 20:20 Сейчас в теме
2007 - это хорошо
Но хотелось бы узнать все-таки ответ на свой вопрос.. как сделать правильно!
4. Ёпрст 1065 27.11.08 09:18 Сейчас в теме
"Йоксель сохраняет файлы в формате Microsoft Excel 97 и выше (BIFF8). При этом он работает на несколько порядков быстрее штатного конвертера Excel. Например, отчет «Анализ продаж», содержащий 180 тыс. строк сохраняется за 6 секунд (естественно, в файле сохраняется только 65536 строк)."
©http://yoksel.net.ru/Zapis%27FajjlovExcel
5. Ёпрст 1065 27.11.08 09:19 Сейчас в теме
выход один: режьте на куски....
6. kotov 209 27.11.08 09:59 Сейчас в теме
ТАк пытаюсь резать,но ничего не получается.. на листах одно и тоже..

немного подправил свой текст

НомерЛиста=1;
//Для НомерЛиста=1 По Окр(КоличествоСтрок/КонСтрока+1,0,0) Цикл
//ИмяЛиста="Лист "+СокрЛП(Строка(НомерЛиста));
Документ.УдалитьСтрок(КонСтрока+1,КоличествоСтрок-КонСтрока);
Книга.Листы.Добавить ("Лист 1",Документ);
Книга.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
Если КонСтрока<КоличествоСтрок Тогда
//Документ.Очистить();
Документ2.Открыть(ИмяВременногоФайла);
Документ2.УдалитьСтроки(1,КонСтрока);
Книга.Листы.Добавить("Лист 2",Документ2);
КонецЕсли;
//КонецЦикла;
Книга.Записать (ВыбИмяФайла);

Получается отлично, но только для двух листов, точнее для 65536*2 строк
Ошибка была в том что обращался к одному и тому же документу.. А запись документа происходит в момент записи книги..
А вот как сделать в цикле создание документа каждый раз нового незнаю....
7. Ёпрст 1065 28.11.08 09:50 Сейчас в теме
Задайте этот вопрос автору компоненты.
8. Ужас бухгалтера 221 03.12.08 06:51 Сейчас в теме
Ну что же ты. Полшага осталось до решения проблемы и не дожал :) Вот, выложил подправленный вариант mxl2xls с возможностью разбивки на несколько листов: http://yoksel.net.ru/GotovyeReshenija/1S/MXL2XLS

Мне, правда, не слишком нравится идея разбивать таким образом (при помощи кучи промежуточных загрузок и метода "УдалитьСтроки"). Вот и скорость не слишком высокая получилась: 180 тыс. строк сохраняется на 3 листа аж за 32 с. Должно быть, думаю, раза в 2-3 быстрее.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот