helpf.pro
Регистрация
 0 
Распечатать

Функция открывает таблицу в MS Excel

Код 1C v 7.x
 Код
//Функция открывает таблицу в MS Excel
//Таблица         - печатная форма 1С
//ИмяЛиста         - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки   - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку   - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки      - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки      - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0) Экспорт
   Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
   
   Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
      Возврат 0;
   КонецЕсли;    
   
   Попытка
      Excel = СоздатьОбъект("Excel.Application")
   Исключение
      Сообщить("Не удалось открыть MS Excel","!");
      Возврат 0;
   КонецПопытки;
   
   Пока 1=1 Цикл
      //Подберем уникальное имя для временного файла
      ИмяФайла = КаталогВременныхФайлов() + "1c" + СтрЗаменить(ТекущееВремя(), ":", "");
      Если (ФС.СуществуетФайл(ИмяФайла+".tmp") = 1) или (ФС.СуществуетФайл(ИмяФайла+".xls") = 1) Тогда
         ФС.УдалитьФайл(ИмяФайла+".tmp");
         ФС.УдалитьФайл(ИмяФайла+".xls")
      Иначе
         Прервать;
      КонецЕсли
   КонецЦикла;
   
   Таблица.Записать(ИмяФайла+".tmp", "XLS");
   
   Если ФС.СуществуетФайл(ИмяФайла+".tmp") = 0 Тогда
      Сообщить("Ошибка записи файла """ + ИмяФайла + "tmp""","!");
      Excel = "";
      Возврат 0;
   КонецЕсли;    
   
   Рез = 1;
   
   Попытка
      ExcelWB = Excel.Workbooks.Add(ИмяФайла+".tmp");   //Откроем временный файл в Excel в режиме шаблона (чтобы не блокировать файл)
      Попытка                                 //Если на клиентской машине не установлен принтер, обращение к настройкам страницы вызывает ошибку. Поэтому работаем в "Попытка ... КонецПопытки"
         ExcelPS = ExcelWB.Sheets(1).PageSetup;      //Исправим спецсимволы в колонтитулах
         Зн = ExcelPS.LeftHeader;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftHeader   = Зн1 КонецЕсли;
         Зн = ExcelPS.CenterHeader;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterHeader   = Зн1 КонецЕсли;
         Зн = ExcelPS.RightHeader;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightHeader   = Зн1 КонецЕсли;
         Зн = ExcelPS.LeftFooter;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.LeftFooter   = Зн1 КонецЕсли;
         Зн = ExcelPS.CenterFooter;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.CenterFooter   = Зн1 КонецЕсли;
         Зн = ExcelPS.RightFooter;   Зн1 = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Зн, "#P", "&P"), "#Q", "&N"), "#T", "&T"), "#D", "&D"); Если Зн <> Зн1 Тогда ExcelPS.RightFooter   = Зн1 КонецЕсли;
      Исключение
      КонецПопытки;
      
      ExcelWB.SaveAs(ИмяФайла+".xls", -4143);         //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
      ExcelWB.Close(0);                        //Закроем книгу ...
      ExcelWB = Excel.Workbooks.Add(ИмяФайла+".xls");   //... и вновь откроем в режиме шаблона
      
      Попытка
         ExcelSh = ExcelWB.Sheets(1);
         
         Если ПустаяСтрока(ИмяЛиста) = 0 Тогда         //Зададим имя ярлычка
            ExcelSh.Name = ИмяЛиста
         КонецЕсли;
         
         Если ОтображатьЯрлычки = 1 Тогда            //Сделаем видимыми ярлычки листов
             ExcelWB.Windows(1).DisplayWorkbookTabs = 1;
            ExcelWB.Windows(1).TabRatio = 0.6         //... и отодвинем горизонтальную полосу прокрутки от левого края
         КонецЕсли;
         
         Если ОтображатьСетку = 0 Тогда               //Скроем линии сетки
            ExcelWB.Windows(1).DisplayGridlines = 0
         КонецЕсли;
      
         Если УдалитьСтроки > 0 Тогда               //Удалим верхние строки
            ExcelSh.Range(ExcelSh.Rows(1), ExcelSh.Rows(УдалитьСтроки)).Delete()
         КонецЕсли;
         
         Если УдалитьСтолбцы > 0 Тогда               //Удалим левые столбцы
            ExcelSh.Range(ExcelSh.Columns(1), ExcelSh.Columns(УдалитьСтолбцы)).Delete()
         КонецЕсли;
      Исключение
      КонецПопытки;
      
      ExcelWB.Saved = 0;
   Исключение
      Сообщить("Ошибка открытия файла в MS Excel","!"); Рез = 0
   КонецПопытки;
   
   Попытка
      Excel.Visible = 1
   Исключение
   КонецПопытки;  
   
   ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
   ФС.УдалитьФайл(ИмяФайла+".tmp");
   ФС.УдалитьФайл(ИмяФайла+".xls");
   Возврат Рез
КонецФункции //глОткрытьТаблицуВExcel 


Автор неизвестен, если код ваш, напишите в комментариях
Разместил:   Версии: | 7.x |  Дата:   Прочитано: 12072
 0 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
PostgreSQL: установка, настройка, обслуживание 12
PostgreSQL напрямую "из коробки" применяться для использования с 1С Предприятем не может. Необходима именно адаптированная версия от 1С, превращающая PostgreSQL в блокировочник, причем нужно понимать, что блокировки будут накладываться на всю таблиц
rphost занимает память и грузит процессор 23
У многих возникают проблемы с rphost.exe, разного вида: rphost занимает всю память rphost грузит процессор rphost жрет память причем 1С даже на запущена, а в диспетчере следующее: ежеминутно расчет на 2-3 мегабайта. Как быть и что делат
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!