Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл.
Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

Для дальнейшей работы с данными, полученными в табличном документе из системы 1С любой версии, их можно сохранить в формате xls(x).

Все бы хорошо, но при открытии в Excel-e пользователь сразу понимает, что с таблицей что-то не то, ну да, нет ярлыков листов книги. %)

Так было и в 7-й версии 1С и перекочевало в 8-ю, да, есть прогресс, в 8-ке можно сохранить в формате xlsx, родном формате последних версий Excel-я.

Для решения задачи есть несколько несложных манипуляций, первое, что приходит на ум любому пользователю, так это пересохранить таблицу в другой формат, но и тут нет нужного результата, потом начинаем делать копи-паст в новую книгу Excel. 
Есть еще вариант, как бы для продвинутых пользователей, — это зайти в настройки Excel-я и в разделе Дополнительно поставить галочку «Показывать ярлыки листов». Он является правильным, но тоже является рутинным, в свете частой обработки данных полученных из 1С в виде плоских таблиц и дальнейшего анализа данных в виде сводных таблиц и иных способов представления данных в Excel-е.

Сам точно так же замаялся бегать по галочкам и решил задачку, порывшись в просторах интернетов, например, тут и поглядев некоторые другие разработки, получилось реализовать несложный (для кого-то это баян, кому-то костыль, впрочем, о вкусах не спорят) механизм автоматизации решения проблемы с отображением ярлыков листов.

Все, что нужно, так это использовать два свойства окна Excel:

DisplayWorkbookTabs // признак отображения закладок листов книги
TabRatio  // соотношение ширины области закладок рабочей книги к ширине горизонтальной полосы прокрутки окна (как число между 0 (ноль) и 1, значение по умолчанию 0.6) 

Код:

Для v8:

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

Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;         
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1;       // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим 

Для v7:

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

Excel = СоздатьОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0; 
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1;       // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим

34 Comments

  1. kenza

    Спасибо! Сохранение файла без листов это меньшая часть проблем. Больше всего проблем доставляет, то что данные сохраняются в общем формате и работать с ними дальше невозможно. Нельзя поставить фильтры, группировки и прочее, даже вручную изменить тип данных не всегда удается. Решал проблему вандальным методом — сохраняем файл из 1С сразу же в HTML и далее открываем дальше его с помощью Ексель и с этого момента все данные имеют тот тип, который нужен. Далее можем сохранить файл уже в нормальный формат, ну или дальше с ним так и работать.

    Reply
  2. jobkostya1c8

    Для описание свойств екселя плюс. Хотя бы показали что эти два свойства, касающиеся закладок могут быть полезны.

    Reply
  3. AnryMc

    Можно ещё так: Надстройка Excel у для «исправления» выгруженной из 1С «Карточки счета» http://infostart.ru/public/85416/

    Преимущество: Использование выгрудкееыз из 1С «стандартными» методами…

    А для «непродвинутого пользователя» можно в Экселе вывести кнопку…

    Reply
  4. kiruha

    Да, это меньшая часть проблем.

    У нас, например, искажаются/пропадают цвета фона ячеек при сохранении/копировании в xls/xlsx

    Нормального решения не нашел (Не нормальное — увеличить градиент цвета вручную)

    Reply
  5. Dragonim

    Я не знаю как вы добились результата на картинке, но вот мой результат сохранения в формате xlsx, открытый в Excel 2013, Бухгалтерия предприятия 3.0 (3.0.36.19), платформа 8.3.5.1231, оборотно-сальдовая ведомость по счёту На рисунке в левом нижнем углу отчётливо видно вертикальное троеточие, если за него потянуть вправо, то откроются страницы из которых состоит данная Excel книга.

    Исходя из выше написанного считаю статью лишней, а проблему надуманной. При сохранении из 1С в Excel имеется столько проблем, что можно составить отдельную статью только из их перечисления, но даже в той статье вряд ли стоит уделять место и время данной проблеме.

    Ну и конечно же стандартный коммент о том что решение проблемы через внешний объект это плохая практика.

    Reply
  6. shmellevich

    (5) Dragonim, свойство TabRatio в диапазоне от 0 до 1, значение чем ближе к 1, тем три точки ближе к правому краю экрана, и это работает в строгой последовательности DisplayWorkbookTabs = 1, а потом TabRatio = 0.6 — это 60% слева. 1 — три точки будут в правом углу экрана. Работает на 7.7.027 и на 8.2.19.106

    Ответ на стандартный коммент — когда приходится сохранять книгу Excel с несколькими листами из 1С, пример титулка — общие итоги, а последующие разные расшифровки, то без внешнего объекта как бы никак.

    Reply
  7. shmellevich

    (7) Dragonim, Мне тоже везло с отчетами, до текущей работы ))

    Reply
  8. sky.xn

    (4) kiruha, это ошибка платформы, в новом тестовом релизе уже исправлена, подробнее смотри на сайте users.v8.1c.ru

    Reply
  9. zatoichi

    немного помогло. Спасибо!

    Reply
  10. vslimv

    Еще бы делать это без Excel, на сервере, но это уже мечты) Спасибо.

    Reply
  11. xor4eg

    Ещё забабахайте статью, как сделать, чтоб 1С при сохранении в excel прекратила объединять сотни ячеек в одну.

    Reply
  12. GSoft
    Reply
  13. shmellevich

    Это все хорошо вы описали, но суть статьи подсказать, как решить одну из многих проблем связки 1С + Excel,

    а не куда его лучше положить, чтобы было лучше брать 😉

    А править код это уже удел каждого разработчика на свое усмотрение.

    Но все же спасибо за предложение.

    Reply
  14. svetanik

    Спасибо, что провели такую работу и не полнились выложить это общественности. Мне таки эта инфа очень к стати пришлась. Особенное спасибо за приведение кода для разных платформ. Можно использовать как справочник.

    Reply
  15. trdm

    Неплохо, вставлю ка я это в штатную конвертацию.

    Reply
  16. EugenLiquor

    Cпасибо за подробный гайд! Примерно так и делал, но вы это четко описали и сформулировали, многим людям эта статья поможет!

    Reply
  17. shmellevich

    (17) Спасибо модератору, который меня заставил дополнить, а то было как-то сухо ))

    Я разозлился и вот результат ))

    Reply
  18. Lady-mo

    Спасибо за статью.

    На самом деле пользователям важны ярлычки листов, и часто за этим обращаются, простое и удобное решение, очень помогло.

    Кстати, а может вы действительно знаете, почему в сохраненном файле не работают фильтры и как с этим бороться?

    Reply
  19. lolik123

    Спасибо автору

    Reply
  20. fixin

    Спасибо за подсказку с ярлыками.

    А кроме ActiveWindow никак Window получить нельзя, например из текущего листа или книги?

    Что касается пользователей, то можно просто понянуть полоску листов, она слева внизу, не надо никакие галочки выводить.

    Reply
  21. cwant

    Спасибо. Полезно

    Reply
  22. Alex30

    Автору спасибо, пригодилось

    Reply
  23. OksDallas

    Подскажите, пожалуйста!

    Выгружаю данные в Excel. В ячейке код счета «20.01», определяю формат ячейки как текстовый

    Лист.Cells(НомерСтроки, 1).NumberFormat = «@»;

    А в результате в файле все равно выходит 20,01.

    Что можете предложить, чтобы в файле все-таки получалось 20.01 с точкой, а не с запятой?

    Reply
  24. eshtrey

    (24)что бы эксель сам не менял формат выводите 20.01 (‘ перед значением)

    Reply
  25. GSoft
    Reply
  26. timurboroda

    После копирования таблиц, отчетов, документов их надо вставлять не в икзель а в ворд. Тогда все форматирование сохраняется

    Reply
  27. GSoft

    (27) и как после этого с ними в ворде работать?

    суммировать, вычитать и т.д.?

    копировать потом в xls?)

    Reply
  28. romankoav

    Когда сохранение табличного документа делаешь в формат xslx, то потом 1с падает с ошибкой на строке Excel.WorkBooks.Open(ПолноеИмяФайла);

    Reply
  29. romankoav

    Даже когда выполняешь вот такой простейший код

    ИмяФайла = ПолучитьИмяВременногоФайла(«XLSX»);

    ДокументРезультат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);

    ЗапуститьПриложение(ИмяФайла);

    Иксель выдает ошибки, что обнаружено содержимое которое не удалось прочитать. После согласия восстановить содержимое выдает текст:

    Удаленные записи: Свойства листа из части /xl/worksheets/sheet1.xml

    Вывод: пока с XLSX программно работать не получается.

    Reply
  30. shmellevich

    (30) это скорее всего связано с самой платформой. 8.3.9.1850 все нормально отрабатывает.

    Reply
  31. romankoav

    у меня 8.3.10.2561

    Reply
  32. KAV2

    (5) Со страницами есть другая проблема, описана здесь: https://social.technet.microsoft.com/Forums/office/ru-RU/087cd445-4a09-43be-9b46-1e0a22330f90/excel-1?forum=Office2016ITProRU

    Файлы выгруженные из 1С, в некоторых случаях долго открываются в Excel 2016, и как решение — включить видимость страниц.

    К сожалению, такие «битые» файлы с которыми проблема в Excel 2016 не получается исправить описанным в статье образом — процесс EXCEL.EXE виснет.

    Reply
  33. user954019

    Только что сама искала как вытащить ярлыки в xls. выгруженной из 1С. В Excel старых версий, где нет дополнительных параметров, представьте себе, в Сервис-Параметры-закладка «Переход»

    Проставьте «птичку» Клавиши перемещения, использовавшиеся в Lotus 1-2-3. Вероятно, когда-то 1с-овцы его использовали.

    И чудесным образом ярлычки появляются

    Reply
  34. marku

    Спасибо, оч. пригодилось!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *