Имя: Пароль:
1C
 
При сохранении файла Excel сохраняется все, кроме колонтитулов.
0 quazzar
 
16.02.11
09:55
Сохраняю отчет в файл эксель в указанном каталоге. Все данные отчета сохраняются, однако колонтитулы в полученном файле отсутствуют (при открытии в Excel). При отладке вплоть до момента
Книга.Close();
значения всех колонтитулов в Книга.ActiveSheet.PageSetup соответствуют заданным. Excel 2010, 1C 8.2.13


Текст процедуры
   Попытка
       Excel = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить("ОШИБКА! Приложение MS Excel отутствует или недостаточно прав доступа!
       |    - " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
       Возврат;
   КонецПопытки;

   ТабДок.Записать(""+Путь+"" + ИмяФайла+".xls", ТипФайлаТабличногоДокумента.XLS);

   Excel.DisplayAlerts = 0;
   Книга = Excel.Workbooks.Open(""+Путь+"" + ИмяФайла+".xls",,1);
   ExcelЛист = Книга.Worksheets(1);
   ExcelЛист.PageSetup.Orientation = 2;
   ExcelЛист.PageSetup.Zoom = 60;
   Сообщить("Создается документ для "+ИмяФайла+"");
   
   ВсегоКолонок = ExcelЛист.Cells(1,1).SpecialCells(11).Column;
   ВсегоСтрок = ExcelЛист.Cells(1,1).SpecialCells(11).Row;
   
   //заменим строки начинающиеся с "=" формулами
   Для НомерСтроки= 1 по ВсегоСтрок Цикл
       Для НомерКолонки= 1 по ВсегоКолонок Цикл
           Если Excel <> Null Тогда
               Попытка
                   Значение=ExcelЛист.Cells(НомерСтроки,НомерКолонки).Value;
                   Если Лев(Значение,1)="=" Тогда
                       ExcelЛист.Cells(НомерСтроки,НомерКолонки).Formula = СтрЗаменить(Значение,Символ(160),"");
                   КонецЕсли;
               Исключение
               КонецПопытки;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   Книга.ActiveSheet.PageSetup.LeftFooter="Левый нижний колонтитул";
   Книга.ActiveSheet.PageSetup.CenterFooter="Центральный нижний колонтитул";
   Книга.ActiveSheet.PageSetup.RightFooter="Правый нижний колонтитул";
   Книга.ActiveSheet.PageSetup.LeftHeader="Левый верхний колонтитул";
   Книга.ActiveSheet.PageSetup.CenterHeader="Центральный верхний колонтитул";
   Книга.ActiveSheet.PageSetup.RightHeader="Правый верхний колонтитул";
   
   Книга.Save();
   Книга.Close();
     Excel.Quit();
   Excel = 0;
1 Axel2009
 
16.02.11
09:58
(0) а пробовали открыть эксель файл где уже есть эти колонтитулы и посмотреть читаются ли они или нет?
2 dk
 
16.02.11
09:58
версия исходного или конечного файла какая?
excel 95 / 97 / 2007 / 2010?
3 quazzar
 
16.02.11
10:01
(1) открыть в 1С?
(2) Лист Microsoft Excel 97-2003 (.xls). между 97 и 2003 разницы же нет? только 2007-й отличился
4 Axel2009
 
16.02.11
10:02
да.
5 quazzar
 
16.02.11
10:11
(1) Открыл в 1С сохраненный файл, отсутствуют колонтитулы. Сделал так:
1)создал файл, открыл в экселе- колонтитулов нет.
2)создал в экселе колонтитулы, открыл в 1С. в отладчике Книга.ActiveSheet.PageSetup.RightHeader имеет значение "ыфарфоарф"
3) дошел до шага Книга.ActiveSheet.PageSetup.RightHeader="Правый верхний колонтитул"
значение изменилось
4) Открыл эксель. колонтитул "ыфарфоарф".

Т.е. данные из 1С в эксель не попали. Может колонтитулы нужно как то дополнительно сохранять?
6 quazzar
 
16.02.11
10:14
Кто нибудь может протестировать на 2003 и 2010 Экселе? Может быть причина в версии офиса? У меня под рукой только 2010-й.
7 Axel2009
 
16.02.11
10:36
а почему бы вместо Книга.ActiveSheet не использовать ExcelЛист?
8 quazzar
 
16.02.11
10:40
(7) пробовал, то же самое
9 Axel2009
 
16.02.11
10:41
(8) тогда косяк COMОбъект("Excel.Application")..
10 quazzar
 
16.02.11
10:42
ТабДок.ВерхнийКолонтитул.Выводить = Истина;    
   ТабДок.НижнийКолонтитул.Выводить = Истина;    
   ТабДок.ВерхнийКолонтитул.ТекстСправа = "текст";
   ТабДок.НижнийКолонтитул.Выводить = Истина;    
   ТабДок.НижнийКолонтитул.ТекстВЦентре = ИмяФайла;    
   ТабДок.НижнийКолонтитул.ТекстСправа    = "[&Дата] [&Время]";

тоже пробовал, в 1С колонтитулы отображаются, в эксель при сохранении не попадают
11 dk
 
16.02.11
11:08
из 7-ки:

   Страница = Книга.WorkSheets(4);
   Страница.Name = "2(260)";
   Страница.PageSetup.CenterHeader        = Симв(10) + "&10Подотчетные лица";
   Страница.PageSetup.RightHeader        = "&8Расшифровка к балансу 2" + Симв(10) + СокрЛП(Константа.ОсновнаяФирма);
   Страница.PageSetup.RightFooter        = "&8Исполнитель: ________________ " + СокрЛП(Пользователь);
   ПоменятьЗум(Страница.PageSetup);    // Фича Excel'a
   Страница.PageSetup.FitToPagesWide    = 1;
   Страница.PageSetup.FitToPagesTall    = 100;    

12 Axel2009
 
16.02.11
11:09
(11) ПоменятьЗум(Страница.PageSetup);
что это?
13 dk
 
16.02.11
11:10
попробуй вместо Save
SaveAs - т.е. сохрани в новый файл
14 dk
 
16.02.11
11:12
(12) это толи включить, толи выключить автомасштаб

Процедура ПоменятьЗум(Парам)
   
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.Language="javascript";
   Скрипт.AddObject("ПараметрыСтраницы", Парам);
   Скрипт.Eval("ПараметрыСтраницы.Zoom=false");    
   
КонецПроцедуры // ПоменятьЗум()

напрямую это свойство по OLE Excel не меняет
15 quazzar
 
16.02.11
11:27
(13) Спасибо, заработало!