|
Сохранение таблицы в Эксель. Вылет с Недостаточно памяти | ☑ | ||
---|---|---|---|---|
0
Пол Ньюман
28.10.13
✎
15:14
|
Отчет в 300 000 строк необходимо сохранить в файл Эксель.
Стандартное сохранение вылетает с "Недостаточно памяти". Каковы обходные пути программного сохранения? Пытался выгрузить первую сотню тысяч строк в файл, остальные дописывать через ОЛЕДБ, но там тоже постоянно ошибки, то формат файла не соотвествует ожидаемому и лечится почему-то открытием файла в Экселе, то при исполнении Insert пишет "Не удается дополнить именованный диапазон", а что это такое и как с этим бороться, так и не смог понять. Может есть у кого успешный опыт программного сохранения подобных файлов с сохранением форматирования? Заранее благодарен. |
|||
1
H A D G E H O G s
28.10.13
✎
15:16
|
Отчет - тупо на пустом месте, или есть макет оформления, сделанный hand made?
|
|||
2
Пол Ньюман
28.10.13
✎
15:17
|
(1) СКД без расшифровки
|
|||
3
Пол Ньюман
28.10.13
✎
15:17
|
28 колонок и 320 000 строк
|
|||
4
H A D G E H O G s
28.10.13
✎
15:21
|
Отправь его на сервер и там сохраняй.
|
|||
5
Пол Ньюман
28.10.13
✎
16:31
|
Есть ещё вариант с сохранением в txt И открытием в Эксель через Excel Application OpenText, но там требует параметр
Array(Array(1, 1), Array(2, 1)) как его передать через 1С не понимаю, код М = Новый Массив(2); М1 = Новый Массив(2); М1[0] = 1; М1[1] = 1; М2 = Новый Массив(2); М2[0] = 2; М2[1] = 1; М[0] = М1; М[1] = М2; xlApp.Workbooks.OpenText(Путь, 65001 , 1, 1, 1, Ложь, Истина, Ложь, Ложь, Ложь, Ложь, М, Истина); Не работает |
|||
6
Пол Ньюман
28.10.13
✎
16:59
|
Сорри, этот параметр опциональный, нормально отрабатывает без него. Теряется лишь форматирование, но для моего конкретного случая это не сильно большая проблема. Могу установить через тот же Excel.Application. В итоге код следующий
ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДиалогОткрытия.Заголовок = "Выберите папку сохранения"; Если НЕ ДиалогОткрытия.Выбрать() Тогда Возврат; КонецЕсли; Каталог = ДиалогОткрытия.Каталог; Путь = Каталог + "\Врем.txt"; ТаблицаОтчета = ЭлементыФормы.ТаблицаРезультата; ТаблицаОтчета.Записать(Путь, ТипФайлаТабличногоДокумента.TXT); xlApp = Новый COMОбъект("Excel.Application"); xlApp.Visible = Ложь; xlApp.DisplayAlrts = Ложь; xlApp.Workbooks.OpenText(Путь, 65001, 1, 1, 1, Ложь, Истина, Ложь, Ложь, Ложь, Ложь); xlWorkBook = xlApp.ActiveWorkBook; xlWorkbook.SaveAs(Каталог + "\Отчет.xlsx"); xlWorkbook.Close(); xlApp.Quit(); |
|||
7
Пол Ньюман
28.10.13
✎
17:03
|
xlApp.DisplayAlErts = Ложь;
|
|||
8
Пол Ньюман
28.10.13
✎
17:06
|
(4) Работает, но кабздец как долго
|
|||
9
H A D G E H O G s
28.10.13
✎
17:21
|
(8) Что медленно то?
|
|||
10
H A D G E H O G s
28.10.13
✎
17:22
|
(8) Херачь его во временное хранилище, не передавай как параметр функции, и не упаковывая в Двоичные Данные. Только через Временное. Будет шустро.
dimoff, ты меня пугаешь. |
|||
11
Холодильник
28.10.13
✎
17:26
|
кто такой dimoff?
|
|||
12
Пол Ньюман
28.10.13
✎
17:29
|
(10) В 8 имеется виду Сохранить копию на сервер, а не на локальный диск, сохранялось полчаса, не вылетело и то слава нуралиевым.
А твое "Херачь его во временное хранилище, не передавай как параметр функции, и не упаковывая в Двоичные Данные" для меня то же самое что задорновское "положь колдобину со стороны загогулины", не знаю таких слов, если охоты повыпендриваться - готов признать что ты крут ваще, если где-то в тайниках души есть желание помочь - выражайся пожалуйста понятней, желательно примерами кода. |
|||
13
H A D G E H O G s
28.10.13
✎
17:51
|
dimoff, ты меня пугаешь.
Для УФ это так: &НаСервереБезКонтекста Функция Сохранить(АдресХранилища,ПутьКФайлу) Если НЕ ЗначениеЗаполнено(АдресХранилища) ИЛИ ТипЗнч(АдресХранилища)<>Тип("Строка") Тогда Возврат Ложь; КонецЕсли; Если Не ЭтоАдресВременногоХранилища(АдресХранилища) Тогда Возврат Ложь; КонецЕсли; Попытка ТабличныйДокумент=ПолучитьИзВременногоХранилища(АдресХранилища); Исключение Возврат Ложь; КонецПопытки; Если ТипЗнч(ТабличныйДокумент)<>Тип("ТабличныйДокумент") Тогда Возврат Ложь; КонецЕсли; УдалитьИзВременногоХранилища(АдресХранилища); ТабличныйДокумент.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLS); КонецФункции &НаКлиенте Процедура СохранитьНаСервере(Команда) АдресХранилища=ПоместитьВоВременноеХранилище(ЭтаФорма.Результат,ЭтаФорма.УникальныйИдентификатор); ПутьКФайлу="C:\out.xls"; Сохранить(АдресХранилища,ПутьКФайлу); КонецПроцедуры |
|||
14
H A D G E H O G s
28.10.13
✎
17:51
|
Для обычной формы прикрути ОМ на сервере.
|
|||
15
Пол Ньюман
28.10.13
✎
18:43
|
(13) "dimoff, ты меня пугаешь. "
Я 2 года к 1С не прикасался, я не в курсе ваших новоявленных блатных жаргонов |
|||
16
ilkoder
28.10.13
✎
19:29
|
сохрани в формате csv или html - и импортируй в екселе
|
|||
17
Адимр
28.10.13
✎
19:30
|
(0) Если форматирование не важно, тогда программно обходи таблицу и формируй csv файл. Excel должен нормально открыть такой файл с разделителями.
|
|||
18
Пол Ньюман
29.10.13
✎
16:01
|
(16)(17) Он и txt открывает в xls, но при открытии выдает диалоговое окно как что преобразовывать, хочется этого по возможности избежать, ну или просто ради общего развития решить задачку без пользовательских дополнительных действий.
В (6) описал как программно создать файл txt и через Excel.Application сохранить в xlsx, Но увы он строку "13.1" считает за дату, а передать параметры чтобы нужная колонка читалась как текст, мне не удалось. |
|||
19
Пол Ньюман
30.10.13
✎
12:19
|
(16) С Html отлично получилось! Спасибо, идеальный вариант.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |