() уберите выравнивание по правому краю, иначе excel будет такую ячейку воспринимать как число
//_____________________________________________________________________________
//Функция открывает таблицу в MS Excel
//Таблица - печатная форма 1С
//ИмяЛиста - имя, которое будет присвоено листу книги MS Excel (если не задано, то остается "Sheet1")
//ОтображатьЯрлычки - показывать/скрыть ярлычки листов в MS Excel
//ОтображатьСетку - показывать/скрыть линии сетки в MS Excel
//УдалитьСтроки - позволяет удалить указанное количество верхних строк таблицы
//УдалитьСтроки - позволяет удалить указанное количество левых столбцов таблицы
Функция глОткрытьТаблицуВExcel(Таблица, ИмяЛиста = "", ОтображатьЯрлычки = 1, ОтображатьСетку = 1, УдалитьСтроки = 0, УдалитьСтолбцы = 0, пИмяФайла="", пКаталог = "", ОткрытьФайл = 1, ВыровнятьЧисла = 0) Экспорт
Перем Excel, ExcelWB, ExcelSh, ExcelPS, ИмяФайла, Рез, Зн, Зн1;
Если ТипЗначенияСтр(Таблица) <> "Таблица" Тогда
Возврат 0;
КонецЕсли;
// Пробежимся по всем ячейкам и поменяем положение по горизонтали для чисел на выравнивание по правому краю
Для Выс = 1 По Таблица.ВысотаТаблицы() Цикл
Для Шир = 1 По Таблица.ШиринаТаблицы() Цикл
Обл = Таблица.Область(Выс,Шир,Выс,Шир);
Если глПроверкаНаличияТолькоЦифр(Обл.Текст) = 1 Тогда
// цифры только
Если Обл.ГоризонтальноеПоложение() <> 2 Тогда
Обл.ГоризонтальноеПоложение(2);
КонецЕсли;
ИначеЕсли ВыровнятьЧисла = 1 Тогда
//программно указываем что надо выравнивать числа с запятой и знаками после запятой
Если глПроверкаНаличияБукв(Обл.Текст) = 1 Тогда
//есть буква кириллицы или латиницы
Продолжить;
ИначеЕсли СтрЧислоВхождений(Обл.Текст, ".") > 1 Тогда
//дата - так как имеется более одной "."
Продолжить;
КонецЕсли;
Если (СокрЛП(Обл.Текст) = "0") или (Число(Обл.Текст) > 0) или (Число(Обл.Текст) < 0) Тогда
//число
Если Обл.ГоризонтальноеПоложение() <> 2 Тогда
Обл.ГоризонтальноеПоложение(2);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//// Чтобы параметры печати не путались с другими - даем им имя
//Таблица.Опции(,,,,"Excel",,,);
Попытка
Excel = СоздатьОбъект("Excel.Application")
Исключение
Сообщить("Не удалось открыть MS Excel","!");
Возврат 0;
КонецПопытки;
Пока 1=1 Цикл
//Подберем уникальное имя для временного файла
Если ПустоеЗначение(пКаталог) = 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
КонецПопытки;
Если ОткрытьФайл = 1 Тогда
Попытка
Excel.Visible = 1;
Исключение
КонецПопытки;
Иначе
Excel.Visible = 0;
ФС.УдалитьФайл(ИмяФайла + ".xls");
ExcelWB.SaveAs(ИмяФайла+".xls", -4143); //Сохраним, чтобы обновить формат файла до текущего (xlNormal = -4143)
ExcelWB.Close(0); //Закроем книгу ...
КонецЕсли;
//описание метода сохранить
//Sub SaveAs([Filename], [FileFormat], [Password], [WriteResPassword], [ReadOnlyRecommended], [CreateBackup], [AccessMode As XlSaveAsAccessMode = xlNoChange], [ConflictResolution], [AddToMru], [TextCodepage], [TextVisualLayout], [Local])
//Member of Excel.Workbook
ExcelWB = ""; ExcelSh = ""; ExcelPS = ""; Excel = "";
ФС.УдалитьФайл(ИмяФайла + ".tmp");
Если ОткрытьФайл = 1 Тогда
ФС.УдалитьФайл(ИмяФайла + ".xls");
ИначеЕсли ОткрытьФайл = 2 Тогда
//не надо открывать каталог
Сообщить("Файл сохранен по адресу: " + СокрЛП(ИмяФайла) + ".xls");
Иначе
Сообщить("Файл сохранен по адресу: " + СокрЛП(ИмяФайла) + ".xls");
ЗапуститьПриложение(пКаталог);
КонецЕсли;
Возврат Рез
КонецФункции //глОткрытьТаблицуВExcel
Показать