Сохранить табличный документ по умолчанию в Excel
Очень часто клиенты просили меня сделать им так, чтобы по нажатию элемента меню «Сохранить как» открывался диалог сохранения файла, в котором уже был бы выбран тип файла «ТаблицаExcel (*.xls)».
Посидел, подумал и решил немножко по-другому сделать.
Функция глСохранитьФайлExcel () Экспорт
Перем ТекКонтекст ;
Перем ИмяФайла ;
Перем ИмяКаталога ;
ЗагрузитьВнешнююКомпоненту( «FormEx.dll» ) ;
глСервис = СоздатьОбъект( «Сервис» );
//получаем контекст активной формы
Если глСервис . АктивныйКонтекст ( ТекКонтекст ) = 1 Тогда
//проверяем является ли форма таблицой
Если ТипЗначенияСтр( ТекКонтекст ) = «Таблица» Тогда
//активная таблица будет всегда первой в списке таблиц
глСервис . СписокТаблиц (). ПолучитьЗначение ( 1 , ИмяФайла );
Если ФС. ВыбратьФайл ( 1 , ИмяФайла , ИмяКаталога , «Сохранить как» , «Таблицы Excel (*.xls)|*.xls» ) = 1 Тогда
ТекКонтекст . Записать ( ИмяКаталога + ИмяФайла, 1 );
КонецЕсли;
КонецЕсли;
КонецЕсли;
Добавил в меню «Файл» элемент «Сохранить в Excel»(Объект — Задача, Команда — Задача.Выполнить, Формула — глСохранитьФайлExcel()) — и все, клиент доволен.
Для работы необходим formex.dll (можно взять по адресу dorex.ru)
Специальные предложения
Есть штатный метод таблиц Записать(,). Возможно есть причины, по которым в данном конкретном случае штатный метод хуже (или вообще не работает), а FormEx соответственно лучше. Но тогда хотелось бы увидеть пояснения на этот счет в описании.
Задачи оптимизировать сохранение не было. Просто пользователю хотелось меньше нажимать кнопки мыши.
(1)Я не знаю как можно обратиться к уже открытой таблице штатными методами, поэтому использовал FormEx.
(2)А Йоксель я гляну.
(11) Интересно
Только вот Пока 1=1 Цикл не нужно.
Все равно ведь при совпадении имени файла существующие удаляются.
(14) я нет, а вот автор не знаю))) в свое время нашел данный код на просторах инета)))
добавьте с комментарием что автор неизвестен, и что готовы при условии того что он найдется изменить авторство
(4) не обязательно, код раскрывающий сущность в необходимом объеме — приведен.
(3) без формекса — только переделкой конфигурации и то без гарантий.
(0) Что-то у меня не получается.
Эта строка просто прелетает как фанерка
Если ФС.ВыбратьФайл(1, ИмяФайла, ИмяКаталога, «Сохранить как», «Таблицы Excel (*.xls)|*.xls») = 1 Тогда
Из отладчика:
ИмяФайла = «ПЕЧАТЬ: Расходная накладная *»
ИмяКаталога =
Автор, перед строкой из (6) добавьте на всякий случай:
Если Прав(ИмяФайла,2)=» *» Тогда
ИмяФайла=Лев(ИмяФайла,СтрДлина(ИмяФайла)-2);
КонецЕсли;
ИмяФайла=СтрЗаменить(ИмяФайла,»:»,»-«);
(7)(8) Изначально у меня было
ИмяФайла = СокрЛП(СтрЗаменить(ИмяФайла, «*», «»));
Но я решил не навязывать свое мнение другим, а без этого кода я просто не проверял и не думал, что вылезут ошибки.
мне в 11 что нравится — то что перенос идет в цветовой гамме 1С а не экселя, а они как известно не совпадают
кстати, насчет имен файлов не пробовал — формирую со штатно-крякозябровыми
Добавил в меню «Файл» элемент «Сохранить в Excel»(Объект — Задача, Команда — Задача.Выполнить, Формула — глСохранитьФайлExcel()) — и все, клиент доволен.
У меня работает успешно при использовании RWidjets вот такой код:
Процедура ПриПолученииКоманды(пКоманда, пЗаблокироватьКоманду) Экспорт
Сервис = СоздатьОбъект(«Сервис»);
Если (пКоманда = 57604) ИЛИ (пКоманда = 57603) Тогда
Конт = «»;
Если Сервис.АктивныйКонтекст(Конт) = 0 Тогда
Возврат;
КонецЕсли;
Если ПустоеЗначение(Конт) = 1 Тогда
Возврат;
КонецЕсли;
Попытка
Если ТипЗначенияСтр(Конт) = «ГрупповойКонтекст» Тогда
Если ТипЗначенияСтр(Конт.Таблица) = «Таблица» Тогда
Конт = Конт.Таблица;
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
Если ТипЗначенияСтр(Конт) = «Таблица» Тогда
ИмяФайла=»»;
Попытка
Сервис.СписокТаблиц().ПолучитьЗначение(1,ИмяФайла);
Исключение
КонецПопытки;
пЗаблокироватьКоманду = 1;
//Формируем списки доступных форматов сохранения
сзСтандартнойОбработки = СоздатьОбъект(«СписокЗначений»);
сзСтандартнойОбработки.ДобавитьЗначение(«MXL»,»Файл 1С»);
сзСтандартнойОбработки.ДобавитьЗначение(«HTML»,»Файл HTML»);
сзСтандартнойОбработки.ДобавитьЗначение(«TXT»,»Текст»);
сзСохраненияЙоксель = СоздатьОбъект(«СписокЗначений»);
сзСохраненияЙоксель.ДобавитьЗначение(«XLS»,»Файл Excel»);
Таб = Конт;
ИмяФайла = ?(ПустоеЗначение(ИмяФайла) = 1,»Таблица1″,ИмяФайла);
стрНедопустимыхСимволов = «/\*:»»,.~’%&»;
Позиция = СтрДлина(ИмяФайла);
Для НомерСимвола = 1 по СтрДлина(стрНедопустимыхСимволов) Цикл
ИмяФайла = СтрЗаменить(ИмяФайла,Сред(стрНедопустимыхСимволов,НомерСимвола,1),» «);
КонецЦикла;
Пока СтрЧислоВхождений(ИмяФайла,» «) 0 цикл
ИмяФайла = СтрЗаменить(ИмяФайла,» «,» «);
КонецЦикла;
//Формируем строку выбора формата файла.
строкаВыбораФормата=»»;
Для НомерВарианта = 1 по 2 Цикл
Если НомерВарианта = 1 тогда //Перебор списков вариантов сохранения
ТекущийВариант = сзСохраненияЙоксель;
Иначе
ТекущийВариант = сзСтандартнойОбработки;
КонецЕсли;
//Определяем расширение файла
КоличествоТочекВИмени = СтрЧислоВхождений(ИмяФайла,».»);
Расширение = ИмяФайла;
Для НомерТочки = 1 по КоличествоТочекВИмени Цикл
Расширение = Прав(Расширение,СтрДлина(Расширение)-Найти(Расширение,».»))
КонецЦикла;
//Формат файла — это его раширение
ИмяФайла = Лев(ИмяФайла, СтрДлина(ИмяФайла) — СтрДлина(Расширение) — 1);
ФорматСохранения = Врег(Расширение);
//Формируем путь сохранения
ПутьСохранения = Каталог + ИмяФайла+».»+Расширение;
Если ФС.СуществуетФайл(ПутьСохранения) = 0 Тогда
ИмяФайлаОК = 1;
Иначе
Если Вопрос(«»+ПутьСохранения+» уже существует.
|Заменить?»,»Да+Нет») = «Да» Тогда
УдалятьСуществующий = 1;
ИмяФайлаОК = 1;
Иначе
ИмяФайлаОК = 0;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для номерПопытки = 1 по 3 Цикл
Если УдалятьСуществующий = 1 Тогда
ФС.УдалитьФайл(ПутьСохранения);
УдалятьСуществующий = 0;
КонецЕсли;
Если ФС.СуществуетФайл(ПутьСохранения) = 0 Тогда
Док.Записать(ПутьСохранения,1);
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Если ФС.СуществуетФайл(ПутьСохранения) = 0 Тогда
Сообщить(«Ошибка: не удалось сохранить файл. Обратитесь к разработчику.»,»!»);
КонецЕсли;
Иначе
Сообщить(«Ошибка: Формат сохранения не идентифицирован.»,»!»);
Сообщить(«Ошибка: не удалось сохранить файл. Обратитесь к разработчику.»,»!»);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Сколько листов можно сделать в Excel? Ваша онлайн-энциклопедия
- Одну и ту же часть документа редактируют несколько пользователей. К примеру, вбивают разные данные в одну ячейку. Возникает блокировка.
- Во время пользования совместным файлом ведется журнал изменений (кто входил, когда, что делал). Книга увеличивается. Начинает «глючить».
- Удалили кого-то из пользователей, но пока ему не сказали об этом. Тогда блокировка может появиться только на его компьютере.
- Большая нагрузка на сетевой ресурс.
Приступаем к созданию процедуры CreatePivotTable, которая формирует сводную таблицу на основе исходной таблицы компонентов. Как мы сейчас убедимся, программный код этой процедуры довольно небольшой, но писать его вручную — дело довольно утомительное. Поэтому лучше воспользоваться мастером Pivot Table Wizard, а затем модифицировать созданный при этом код в более универсальный вид.