|
Excel сохранение нескольких страниц | ☑ | ||
---|---|---|---|---|
0
Шахтер_с
11.08.15
✎
14:02
|
Стоит задача вывести многостраничный отчет в excel.
Сохраняю все страницы отчета в отдельные файлы. Потом выполняю код ниже. Перебираю все файлы по маске. Сливаю их в один файл и при попытке ОбщаяКнига.SaveAs(КаталогСохранения+"\corp.xlsx"); Выдает ошибку. Естественно зависший процес в диспетчере. При открытии любого файла excel разворачивается мой , который не удалось сохранить со всеми страницами, такой как надо. Ошибка:Метод SaveAs из класса Workbook завершен неверно Что я не так делаю? Попытка ДокЭксель = Новый COMОбъект("Excel.Application"); ДокЭксель.DisplayAlerts=Ложь; ОбщаяКнига= ДокЭксель.WorkBooks.Add(); Состояние("Обработка файла Microsoft Excel..."); Исключение Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel."); Возврат ; КонецПопытки; Первый = истина; ПрошлыйЛист = Неопределено; МассивПутейФайловXLS = НайтиФайлы(КаталогСохранения,"*.xlsx",Ложь); Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл Книга = ДокЭксель.WorkBooks.Open(ПутьКФайлуXLS.ПолноеИмя); Книга.Worksheets(1).Cells.Select(); ДокЭксель.Selection.Copy(); Если Первый Тогда НовыйЛист = ОбщаяКнига.Worksheets(1); Первый = Ложь; Иначе НовыйЛист = ОбщаяКнига.Worksheets.Add(,ПрошлыйЛист); КонецЕсли; НовыйЛист.Paste(); НовыйЛист.Activate(); ДокЭксель.Range("A1").Select(); ПрошлыйЛист = НовыйЛист; КонецЦикла; ОбщаяКнига.Worksheets(1).Activate(); Попытка ОбщаяКнига.SaveAs(КаталогСохранения+"\corp.xlsx"); Исключение Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); КонецПопытки; ОбщаяКнига.close(); ДокЭксель.Quit(); ДокЭксель = Неопределено; |
|||
1
alexei366
11.08.15
✎
14:25
|
У меня так работает, правда без цикла, там потомучто надо было коечо ещё делать, "все имена и фамилии измененны"))) :
Режим = РежимДиалогаВыбораФайла.Сохранение; Диалог = Новый ДиалогВыбораФайла(Режим); Диалог.Заголовок = "Сохранить Файл"; Диалог.Фильтр = "Файл excel (*.xls)|*.xls"; ДатаОтчетаСтр = Формат(КонецМ,"ДФ=yyyy_MM"); Диалог.ПолноеИмяФайла = "Рез-тат фин. деят-ти " + ДатаОтчетаСтр +?(КоличествоМесяцев > 1," - "+Формат(КоличествоМесяцев,"ЧГ="),"") + ".xls"; Если Не Диалог.Выбрать() Тогда Возврат; Иначе ИмяФайла = Диалог.ПолноеИмяФайла; КонецЕсли; ИмяФайла1 = ПолучитьИмяВременногоФайла("xls"); ИмяФайла2 = ПолучитьИмяВременногоФайла("xls"); ИмяФайла3 = ПолучитьИмяВременногоФайла("xls"); ИмяФайла4 = ПолучитьИмяВременногоФайла("xls"); ЭлементыФормы.ТабДок1.Записать(ИмяФайла1, ТипФайлаТабличногоДокумента.XLS); ЭлементыФормы.ТабДок2.Записать(ИмяФайла2, ТипФайлаТабличногоДокумента.XLS); ЭлементыФормы.ТабДок3.Записать(ИмяФайла3, ТипФайлаТабличногоДокумента.XLS); ЭлементыФормы.ТабДок4.Записать(ИмяФайла4, ТипФайлаТабличногоДокумента.XLS); ОбъектЭксель = Новый COMОбъект("Excel.Application"); Попытка //ОбъектЭксель.DisplayAlerts = 0; //ОбъектЭксель.Visible = Ложь; ОбщаяКнига = ОбъектЭксель.WorkBooks.Open(ИмяФайла1); ОбщаяКнига.Sheets(1).Name = "Лист 1"; ТекКнига = ОбъектЭксель.WorkBooks.Open(ИмяФайла2); Лист = ТекКнига.Sheets(1); Лист.Select(); Лист.Copy(,ОбщаяКнига.Sheets(1)); ТекКнига.Close(); ОбщаяКнига.Sheets(2).Name = "Лист 2"; ТекКнига = ОбъектЭксель.WorkBooks.Open(ИмяФайла3); Лист = ТекКнига.Sheets(1); Лист.Select(); Лист.Copy(,ОбщаяКнига.Sheets(2)); ТекКнига.Close(); ОбщаяКнига.Sheets(3).Name = "Лист 3"; ТекКнига = ОбъектЭксель.WorkBooks.Open(ИмяФайла4); Лист = ТекКнига.Sheets(1); Лист.Select(); Лист.Copy(,ОбщаяКнига.Sheets(3)); ТекКнига.Close(); ОбщаяКнига.Sheets(4).Name = "Лист 4"; ОбщаяКнига.SaveAs(ИмяФайла); ОбщаяКнига.Close(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ОбъектЭксель.Quit(); ОбъектЭксель = Неопределено; УдалитьФайлы(ИмяФайла1); УдалитьФайлы(ИмяФайла2); УдалитьФайлы(ИмяФайла3); УдалитьФайлы(ИмяФайла4); |
|||
2
Tatitutu
11.08.15
✎
14:38
|
(0) КаталогСохранения - чему у тебя равен ? Пробелы , спецсимволы ?
я делал намного проще. ...... ТабДок.Записать(ИмяОсновногоФайла,ТипФайлаТабличногоДокумента.XLSX); и потом уже в него добавля все что нужно Процедура ЕКСЕЛЬКНИГА () ДокЭксель = Новый COMОбъект("Excel.Application"); ДокЭксель.DisplayAlerts=0; ОбщаяКнига = ДокЭксель.WorkBooks.Open(ИмяОсновногоФайла); ЛистСДанными = ОбщаяКнига.Sheets(1); ЛистСДанными.Select(); ЛистСДанными.Name ="MAGAZKA"; Сч=1; Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл Книга = ДокЭксель.WorkBooks.Open(ПутьКФайлуXLS.Значение); ЛистСДанными = Книга.Sheets(1); ЛистСДанными.Select(); ИмяЛиста=СтрЗаменить(Книга.Name,СокрЛП(ПутьДляСохранения),""); ИмяЛиста=СтрЗаменить(ИмяЛиста,".xls",""); ЛистСДанными.Name =ИмяЛиста; ЛистСДанными.Copy(ОбщаяКнига.Sheets(Сч)); Сч=Сч+1; Книга.close(); КонецЦикла; ДокЭксель.ActiveWindow.TabRatio = 0.5; ЛистСДанными = ОбщаяКнига.Sheets(1); ЛистСДанными.Select(); ОбщаяКнига.Save(); ОбщаяКнига.close(); ДокЭксель.Quit(); ДокЭксель = Неопределено; Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл УдалитьФайлы(СокрЛП(ПутьКФайлуXLS.Значение)); КонецЦикла; КонецПроцедуры |
|||
3
Шахтер_с
11.08.15
✎
15:48
|
В общем заработало так. Сначала сохраняю файл пустышку, потом его открываю и записываю.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |