Alltn_44
Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору edison2010 Этот код писал не я. Автора не помню. Нашел где-то в интернете. Спасибо автору! В начало модуля формы: Перем _маска, _сч, _сч1, _шаг; Перем й, к; В начало модуля формы: Процедура ВывестиСекциюТаб(_ИмяСекц) Если _ВЕксель = 1 Тогда Если _ИмяСекц="" Тогда _сч=_сч+1;_сч1=0; состояние("Сохраняется временный файл № "+_сч); Таб.Записать(_Маска+_сч+".xls",1); возврат; Иначе Если _сч1>_шаг Тогда _сч=_сч+1;_сч1=0; состояние("Сохраняется временный файл № "+_сч); Таб.Записать(_Маска+_сч+".xls",1); Таб.Очистить(); Иначе _сч1=_сч1+1; КонецЕсли; КонецЕсли; КонецЕсли; Таб.ВывестиСекцию(_ИмяСекц); КонецПроцедуры В начало процедуры Сформировать: Процедура Сформировать() Если _ВЕксель=1 тогда // <- начало внедрения _ВыбФ="";_ВыбКат=""; _Зн=ФС.ВыбратьФайл(1,_ВыбФ,_ВыбКат,"Сохранить файл как...","Файлы Excel|*.xls","xls",10); Если _ВыбФ="" Тогда СтатусВозврата(0); Возврат; КонецЕсли; _Ч=0;_м=0;_с=0;_сч1=0; ТекущееВремя(_ч,_м,_с); _маскаФайл="~"+ДатаГод(ТекущаяДата())+ДатаМесяц(ТекущаяДата())+ДатаЧисло(ТекущаяДата())+_ч+_м+_с; _маска=КаталогВременныхФайлов()+_маскафайл; _сч=0; _шаг=3000; // этот параметр влияет на размер кусков, на которые будет резаться отчет при выгрузке КонецЕсли; // <- конец внедрения В конец процедуры Сформировать: // Вывод заполненной формы на экран либо в файл Эксель, в зависимости от значения флажка _ВЕксель Если _ВЕксель=1 Тогда // <- начало внедрения ВывестиСекциюТаб(""); _ОкноЕхс=СоздатьОбъект("Excel.Application"); _ИмяФФ =_ВыбКат+_ВыбФ; _ОкноЕхс.Visible=0; _ОкноЕхс.DisplayAlerts=0; Попытка // если уже открыт файл с таким именем, то просто неназойливо сохраним его и закроем _ОкноЕхс.Windows(_ВыбФ).Close(1); // или Close(-1) - тогда просто молча закроем, не сохраняя Исключение КонецПопытки; _ОкноЕхс.DisplayAlerts=1; // Попытка _ОкноЕхс.Workbooks.Open(_маска+"1.xls"); _ОкноЕхс.DisplayAlerts=0; _ОкноЕхс.ActiveWorkbook.SaveAs(_ИмяФФ,-4143); //без лишних вопросов сохраним в нормальном формате Excel _ОкноЕхс.DisplayAlerts=1; _ОкноЕхс.Windows(_ВыбФ).Visible=0; //спрячем окошко от потусторонних вмешательств _ОкноЕхс.Windows(_ВыбФ).DisplayWorkbookTabs = 1; //режим "показывать ярлычки листов" _ОкноЕхс.Windows(_ВыбФ).TabRatio = 0.2; //подвинем линеечку с ярлычками, дабы пользователи не пужались! Если _сч>1 Тогда для й=2 по _сч Цикл состояние("Приклеиваю временный файл № "+й); _ОкноЕхс.Workbooks.Open(_маска+й+".xls"); _ОкноЕхс.Windows(_маскаФайл+й+".xls").ActiveSheet.Range("A1","IV"+_ОкноЕхс.Windows(_маскаФайл+й+".xls").ActiveSheet.UsedRange.Rows.count).Copy(_ОкноЕхс.Windows(_ВыбФ).ActiveSheet.Range("A"+сокрлп(_ОкноЕхс.Windows(_ВыбФ).ActiveSheet.UsedRange.Rows.Count+1))); _ОкноЕхс.Windows(_маскаФайл+й+".xls").close(-1); КонецЦикла; КонецЕсли; Состояние("Запись файла ...."); _ОкноЕхс.Workbooks(_ВыбФ).Save(); _ОкноЕхс.ReferenceStyle=1; _ОкноЕхс.Visible=1; _ОкноЕхс.Windows(_ВыбФ).Visible=1; // Исключение Предупреждение("Ошибка при работе с временными файлами!"); Возврат; КонецПопытки; для й=1 по _сч Цикл Попытка ФС.УдалитьФайл(_Маска+й+".xls"); исключение конецпопытки; КонецЦикла; _ОкноЕхс=0; Иначе // <- конец внедрения Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецЕсли; // <- внедряется колво=65000; //можно поставить побольше, но помните ограничения Экселя: 256 столбцов на 65536 строк !!! В форму добавляешь флажок: Идентификатор _ВЕксель и Поле ввода Идентификатор Колво В поле ввода пишется количество строк. Пробуй. Думаю, что все получится. | Всего записей: 250 | Зарегистр. 07-01-2008 | Отправлено: 19:09 30-01-2010 | Исправлено: Alltn_44, 19:11 30-01-2010 |
|