Имя: Пароль:
1C
1С v8
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
В общем заработало так. Сначала сохраняю файл пустышку, потом его открываю и записываю.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.