Хитрости сохранения табличного документа в 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 не будет опубликован. Обязательные поля помечены *