Функция СтрокаНаписанаПоРусски(Знач СтрокаПараметр) Экспорт СтрокаПараметр = СокрЛП(СтрокаПараметр); СписокДопустимыхЗначений = Новый СписокЗначений; СписокДопустимыхЗначений.Добавить(184); СписокДопустимыхЗначений.Добавить(168); СписокДопустимыхЗначений.Добавить(45); СписокДопустимыхЗначений.Добавить(46); СписокДопустимыхЗначений.Добавить(32); СписокДопустимыхЗначений.Добавить(48); СписокДопустимыхЗначений.Добавить(49); СписокДопустимыхЗначений.Добавить(50); СписокДопустимыхЗначений.Добавить(51); СписокДопустимыхЗначений.Добавить(52); СписокДопустимыхЗначений.Добавить(53); СписокДопустимыхЗначений.Добавить(54); СписокДопустимыхЗначений.Добавить(55); СписокДопустимыхЗначений.Добавить(56); СписокДопустимыхЗначений.Добавить(57); Для Сч=1 По СтрДлина(СтрокаПараметр) Цикл Код = КодСимвола(СтрокаПараметр,Сч); Если (Код<192) И (СписокДопустимыхЗначений.НайтиПоЗначению(Код) = Неопределено) Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции
Код //Функция открывает таблицу в 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