1с сохранить таблицу значений в файл excel

Обновлено: 05.07.2024

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

Клиент-Серверный вариант в управляемых формах.

1. Считываем данные из файла в массив из структур и затем этот массив передаем на сервер для дальнейших манипуляций с данными.

2-ой способ - это передать файл Excel на сервер через хранилище данных и далее работать с ним уже на сервере.

Очень часто приходится работать с очень большими файлами Excel, и его обработка путем перебора строк занимает огромное количество времени.

В таких случаех удобно в одно действие загрузить всю таблицу в массив и в потом работать уже непосредственно с массивом.

На выходе получаем двумерный массив, который содержит все данные указанного листа Excel

Полезные функции при работе с Excel:

Устанавливает видимость Excel при работе
Добавление новой книги в файл Excel
Сохранение книги Excel
Добавление нового листа к книге
Переименование листа
Изменение маштаба листа
Изменение ориентации листа
Отступы листа
Обращение к ячейки
чтение/запись
Обращение к области ячеек
Очень часто при чтении или записи значений в Excel ставятся лишние пробелы в числе, например, вместо 1502 он читает как 1 502 и в дальнейшем это значение не приводится к числу. Эту проблему можно решить заменой.
Объединение ячеек
Работа с именованными ячейками в Excel
Удаление ячейки
Удаление области ячеек
Обращение к строке
Изменение ширины колонки
Обращение к колонке
Удаление Строки
Фон ячейки / области / Строки /
Функция переводит цвет из формата RGB в формат Excel
Управление шрифтом в ячейки/строке/области
Р азрешает переносить по словам в ячейке
Управление рамкой ячейки
Устанавливаем формат ячейки
Формула в ячейки
Формула в ячейки
Формула в ячейки
Формула в ячейки
Функция для получения ширины колонки Excel
Спасибо пользователю goodwill
Разрешить перенос слов в ячейке
Спасибо пользователю roofless
Группировки данных на листе
Спасибо пользователю dr-wit, ignor

При работе с Excel мы оперируем столбцами как числом (Например, 1 столбец), а у Excel адресация столбцов производится с помощью символов. И когда нам нужно отредактировать формулу, то нам нужно номер столбца преобразовать в символ. В таких случаях вам пригодится эта функция.

2. Работа с Excel через ТабличныйДокумент 1С

С помощью данного метода можно и загружать из Excel и выгружать в Excel. Но на мой взгляд этот метод идепально подходит когда вам необходимо посто сохранить информацию в Excel без дальнейшей манипуляции.

Итак, приступим: загрузка из Excel:

1. Загружаем файл Excel в табличный документ

2. Производим манипуляции уже с ТабличнымДокументом

Давайте теперь разберем сохранение в Excel с помощью данного метода:

Тут все очень просто сначала мы формируем обычный Табличный документ и затем записываем его в Excel

2. Работа с Excel ADODB

Выражаю особую благодарность коллеги Fragster за хороший комментарий

Данный метод позволяет работать с Excel через ODBC и имеет ряд преимуществ:

  1. Не требует установки самой Excel, необходима лишь установить ODBC. Но как правило он уже установлен. Это особенность позволяет работать на стороне сервера без дополнительных установок Excel.
  2. Позволяет работать с таблицой Excel как с БД и строить к ней запросы на T-SQL. Таким образом мы можем делать отборы еще на этапе чтения данных и другие преимущества что дает Т-SQL. Что на мой взгляд огромный плюс.

Подключение к ADO

Отключение от ADO


Выполнение запроса

Пример запроса:

Запись в Excel тоже производится в виде запроса:

Хочу отметить что наименование полей производится по первой строке в таблице


ADODB предоставляет ряд объектов, с которыми мы работаем

ADODB.Recordset

В файле продемонстрированны оба варианта работы с запросами.

На этом пока все. По возможности буду дополнять статью :)

В архиве находится обработка, которая демонстрирует все описанные и другие возможности при работе с Excel.

title

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

Это может быть удобным для следующих случаев:

  • Для хранения каких-либо настроек у отчётов или обработок;
  • Для тестирования или ведения логов (для временного хранения результата) при выполнении кода или запроса в 1С;
  • Для загрузки/выгрузки данных между информационными базами 1С.

Во многих случаях очень удобно всегда иметь под рукой кнопки «Выгрузить таблицу» и «Загрузить таблицу», чтобы, к примеру, не заполнять вручную табличную часть документов или обработок.

Алгоритм

Порядок программных действий при выгрузке в файл выглядит так:

  1. Подготавливаем таблицу значений (выгружаем из табличной части, выбираем колонки);
  2. Конвертируем таблицу значений в табличный документ;
  3. Сохраняем табличный документ в MXL.

При загрузке таблицы порядок действий такой:

  1. Читаем из файла табличный документ;
  2. Конвертируем табличный документ в таблицу значений;
  3. Используем эту таблицу значений в своих целях (загружаем в табличную часть).

Соответственно файл для хранения данных таблицы имеет расширение *.mxl.

Табличный документ MXL

Функции и процедуры

Основные функции для реализации поставленной задачи следующие:

  • ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.
  • ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.
  • ПрочитатьТЗИзMXL – Читает из файла данные, определяет колонки таблицы и преобразует эти данные в таблицу значений.
  • ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.

Пример реализации

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

Обработка имеет 3 функциональных кнопки:

  • Выгрузить
  • Загрузить
  • Очистить.

Кнопки обработки

Приведём здесь код 1С для всех вышеописанных функций:

// Преобразовать табличный документ в таблицу значений. // // Параметры: // ТабДок - <ТабличныйДокумент> - Исходный табличный документ; // СтруктураКолонок - <Структура>, <ТаблицаЗначений> - Структура колонок; // НачалоСтрока - <Число> - Строка начала области; // НачалоСтолбец - <Число> - Столбец начала области; // КонецСтрока - <Число> - Строка конца области; // КонецСтолбец - <Число> - Столбец конца области. // // Возвращаемое значение: // <ТаблицаЗначений> - Полученная таблица значений. // Функция ПреобразоватьТДвТЗ(ТабДок, СтруктураКолонок, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, Знач КонецСтрока = Неопределено, Знач КонецСтолбец = Неопределено) Экспорт // Определение габаритов таблицы Если НачалоСтрока = Неопределено И НачалоСтолбец = Неопределено Тогда НачалоСтрока = 1; НачалоСтолбец = 1; КонецЕсли; Если НачалоСтрока = Неопределено Тогда НачалоСтрока = 1; Пока НЕ ТабДок.Область(НачалоСтрока, НачалоСтолбец).СодержитЗначение И НачалоСтрока < ТабДок.ВысотаТаблицы Цикл НачалоСтрока = НачалоСтрока + 1; КонецЦикла; ИначеЕсли НачалоСтолбец = Неопределено Тогда НачалоСтолбец = 1; Пока НЕ ТабДок.Область(НачалоСтрока, НачалоСтолбец).СодержитЗначение И НачалоСтолбец < ТабДок.ШиринаТаблицы Цикл НачалоСтолбец = НачалоСтолбец + 1; КонецЦикла; КонецЕсли; КонецСтрока = ?(КонецСтрока = Неопределено, ТабДок.ВысотаТаблицы, КонецСтрока); КонецСтолбец = ?(КонецСтолбец = Неопределено, ТабДок.ШиринаТаблицы, КонецСтолбец); // Преобразование ЭтоТаблица = (ТипЗнч(СтруктураКолонок) = Тип("ТаблицаЗначений")); ТабЗначений = ПолучитьТаблицуВывода(СтруктураКолонок); Для ИндексСтроки = НачалоСтрока По КонецСтрока Цикл СтрокаТЗ = ТабЗначений.Добавить(); ИндексКолонки = НачалоСтолбец; Для Каждого Колонка Из СтруктураКолонок Цикл НаименованиеКолонки = ?(ЭтоТаблица, Колонка.Наименование, Колонка.Ключ); пИндексКолонки = ?(ЭтоТаблица, Колонка.СтолбецОтчёт, ИндексКолонки); Если ТабДок.Область(ИндексСтроки, пИндексКолонки).СодержитЗначение Тогда СтрокаТЗ[НаименованиеКолонки] = ТабДок.Область(ИндексСтроки, пИндексКолонки).Значение; Иначе СтрокаТЗ[НаименованиеКолонки] = ТабДок.Область(ИндексСтроки, пИндексКолонки).Текст; КонецЕсли; ИндексКолонки = ИндексКолонки + 1; КонецЦикла; КонецЦикла; Возврат ТабЗначений; КонецФункции;

// Преобразовать таблицу значений в табличный документ. // // Параметры: // ТабЗначений - <ТаблицаЗначений> - Исходная таблица значений; // ТабДок - <ТабличныйДокумент> - Полученный табличный документ. Если параметр не задан, // то документ создаётся заново и возвращается функцией; // НачалоСтрока - <Число> - Строка начала области; // НачалоСтолбец - <Число> - Столбец начала области; // ВыводитьЗаголовки - <Булево> - Определяет выводить ли имена колонок или нет. // // Возвращаемое значение: // <ТабличныйДокумент> - Полученный табличный документ (возвращает параметр "ТабДок"). // Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Ложь) Экспорт Если ТабДок = Неопределено Тогда ТабДок = Новый ТабличныйДокумент; КонецЕсли; // Определение габаритов таблицы НачалоСтрока = ?(НачалоСтрока = Неопределено, 1, НачалоСтрока); НачалоСтолбец = ?(НачалоСтолбец = Неопределено, 1, НачалоСтолбец); // Преобразование ИндексСтроки = НачалоСтрока; Если ВыводитьЗаголовки Тогда ИндексКолонки = НачалоСтолбец; Для Каждого Колонка Из ТабЗначений.Колонки Цикл ТабДок.Область(ИндексСтроки, ИндексКолонки).Текст = ?(ПустаяСтрока(Колонка.Заголовок), Колонка.Имя, Колонка.Заголовок); ИндексКолонки = ИндексКолонки + 1; КонецЦикла; ИндексСтроки = ИндексСтроки + 1; КонецЕсли; Для Каждого Элемент Из ТабЗначений Цикл ИндексКолонки = НачалоСтолбец; Для Каждого Колонка Из ТабЗначений.Колонки Цикл ТабДок.Область(ИндексСтроки, ИндексКолонки).СодержитЗначение = Истина; ТабДок.Область(ИндексСтроки, ИндексКолонки).ТипЗначения = Новый ОписаниеТипов(Колонка.ТипЗначения); ТабДок.Область(ИндексСтроки, ИндексКолонки).Значение = Элемент[Колонка.Имя]; ИндексКолонки = ИндексКолонки + 1; КонецЦикла; ИндексСтроки = ИндексСтроки + 1; КонецЦикла; Возврат ТабДок; КонецФункции;

// Читает табличный документ из файла MXL и преобразует его в таблицу значений. // // Параметры: // ИмяФайла - <Строка> - Путь к файлу MXL; // СтруктураКолонок - <Структура>, <ТаблицаЗначений> - Структура колонок. Если этот параметр // не задан, то структура колонок формируется из самого табличного документа; // ЕстьЗаголовок - <Булево> - Есть ли первая строка с заголовками или нет. // // Возвращаемое значение: // <ТаблицаЗначений> - Полученная таблица значений. // Функция ПрочитатьТЗИзMXL(ИмяФайла, СтруктураКолонок = Неопределено, ЕстьЗаголовок = Истина) Экспорт ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ИмяФайла); Если СтруктураКолонок = Неопределено И ЕстьЗаголовок Тогда СтруктураКолонок = Новый Структура; Для ИндексКолонки = 1 По ТабДок.ШиринаТаблицы Цикл Обл1 = ТабДок.Область(1, ИндексКолонки); Обл2 = ТабДок.Область(2, ИндексКолонки); ИмяКолонки = СокрЛП(Обл1.Текст); ИмяКолонки = ?(Найти(ИмяКолонки, " ") > 0, СтрЗаменить(ТРег(ИмяКолонки), " ", ""), ИмяКолонки); СтруктураКолонок.Вставить(ИмяКолонки, ?(Обл2.СодержитЗначение, Обл2.ТипЗначения, Новый ОписаниеТипов)); КонецЦикла; ИначеЕсли СтруктураКолонок = Неопределено И НЕ ЕстьЗаголовок Тогда СтруктураКолонок = Новый Структура; Для ИндексКолонки = 1 По ТабДок.ШиринаТаблицы Цикл Обл2 = ТабДок.Область(1, ИндексКолонки); ИмяКолонки = "К" + Формат(ИндексКолонки, "ЧДЦ=0; ЧН=0; ЧГ=0"); СтруктураКолонок.Вставить(ИмяКолонки, ?(Обл2.СодержитЗначение, Обл2.ТипЗначения, Новый ОписаниеТипов)); КонецЦикла; КонецЕсли; Таблица = ПреобразоватьТДвТЗ(ТабДок, СтруктураКолонок, ?(ЕстьЗаголовок, 2, 1), 1); Возврат Таблица; КонецФункции;

// Сохраняет таблицу значений в файле в виде табличного документа. // // Параметры: // ИмяФайла - <Строка> - Путь к файлу MXL; // ТабЗначений - <ТаблицаЗначений> - Сохраняемая таблица значений; // ЕстьЗаголовок - <Булево> - Есть ли первая строка с заголовками или нет. // Процедура ЗаписатьТЗВMXL(ИмяФайла, ТабЗначений, ЕстьЗаголовок = Истина) Экспорт ТабДок = ПреобразоватьТЗвТД(ТабЗначений, Неопределено, 1, 1, ЕстьЗаголовок); ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL); КонецПроцедуры;

Целиком скачайте обработку по ссылке ниже.

Смело используйте этот код 1С для реализации своих проектов! Если в коде имеются баги (ошибки), просьба сообщить об этом, написав в комментариях ниже.

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

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

Выгрузка данных из отчетов 1С в Excel

Для начала откроем отчет. Любой. В нашем примере мы рассмотрим два отчета: один из УНФ, другой из УТ.

✅ Способ №1 (Подходит для всех конфигураций)

Нажмите на клавиатуре Ctrl+S. Самый универсальный способ.

✅ Способ №2 (Конфигурации на управляемых формах)

Нажать на иконку с дискетой в правом верхнем углу

✅ Способ №3 (Конфигурации на обычных формах)

Нажать файл, затем "сохранить" или "сохранить как". Или нажать на на иконку с дискетой.

✅ Способ №4 (Сохранение данных по нажатию кнопки из формы отчета)

Во многих типовых конфигурациях на форму отчета выведены кнопки, при нажатии на которые, можно сохранить данные.

Вне зависимости от способа, которым вы воспользуетесь, откроется окно сохранения файла.

В этом окне нужно указать адрес папки, в которую вы хотите сохранить файл:

Затем необходимо указать имя файла:

Обязательно указываем тип файла (выбираем старый или новый формат Excel).

Кстати, не обязательно выбирать именно Excel, если вам нужно сохранить данные в Word или PDF - просто выберите интересующий вас формат в списке.

После этого нажимаем на кнопку "Сохранить":

Файл с данными из отчета в формате Excel появится в указанной вами папке :)

Сохранение данных из списков и табличных частей в Excel

Еще одна полезная фишка, о которой стоит рассказать.

А вы знали, что практически любой список или табличную часть документа из 1С можно запросто сохранить в Excel? Теперь знаете.

Управляемые формы

Для примера откроем список заказов клиентов в УНФ:

Перед тем, как вывести его на печать, возможно? вы захотите установить период, а также нужные вам отборы.

Выгрузка данных из 1С в Microsoft Excel

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

Выгрузка информации из 1C в Excel

Если загрузка данных из Excel в 1С – это довольно сложная процедура, автоматизировать которую можно только с помощью сторонних решений, то обратный процесс, а именно выгрузка из 1С в Эксель – это сравнительно простой набор действий. Его можно легко выполнить с помощью встроенных инструментов вышеуказанных программ, причем сделать это можно несколькими способами, в зависимости от того, что именно пользователю нужно перенести. Рассмотрим, как это выполнить на конкретных примерах в 1С версии 8.3.

Способ 1: копирование содержимого ячейки

Одна единица данных содержится в ячейке 1С. Её можно перенести в Эксель обычным методом копирования.

  1. Выделяем ячейку в 1С, содержимое которой нужно скопировать. Кликаем по ней правой кнопкой мыши. В контекстном меню выбираем пункт «Копировать». Можно воспользоваться также универсальным способом, который действует в большинстве программ, работающих на ОС Windows: просто выделяем содержимое ячейки и набираем комбинацию клавиш на клавиатуре Ctrl+C.

Копирование в 1С

Вставка через контекстное меню в Microsoft Excel

Вместо этого действия можно после выделения ячейки, находясь во вкладке «Главная», щелкнуть по значку «Вставить», который расположен на ленте в блоке «Буфер обмена».

Вставка через кнопку на ленте в Microsoft Excel

Содержимое ячейки 1С будет вставлено в Excel.

Данные в ячейку вставлены в Microsoft Excel

Способ 2: вставка списка в существующую книгу Excel

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

  1. Открываем любой список, журнал или справочник в 1С. Кликаем на кнопку «Все действия», которая должна располагаться вверху от обрабатываемого массива данных. Запускается меню. Выбираем в нем пункт «Вывести список».

Переход к выводу списка в Microsoft Excel

Поле «Выводить в» имеет два значения:

По умолчанию установлен первый вариант. Для переноса данных в Эксель он как раз и подходит, так что тут мы ничего не меняем.

В блоке «Выводить колонки» можно указать, какие колонки из списка вы хотите перевести в Excel. Если вы собираетесь производить перенос всех данных, то эту настройку тоже не трогаем. Если же вы хотите произвести конвертацию без какого-то столбца или нескольких столбцов, то снимаем галочку с соответствующих элементов.

Окно вывода списка в Microsoft Excel

Копирование списка в 1С

Вставка списка в Microsoft Excel

Список вставлен в документ.

Список вставлен в документ в Microsoft Excel

Способ 3: создание новой книги Excel со списком

Также список из программы 1С можно сразу вывести в новый файл Эксель.

    Выполняем все те шаги, которые были указаны в предыдущем способе до формирования списка в 1С в табличном варианте включительно. После этого жмем на кнопку вызова меню, которая расположена в верхней части окна в виде треугольника, вписанного в оранжевый круг. В запустившемся меню последовательно переходим по пунктам «Файл» и «Сохранить как…».

Сохранение списка в 1С

Ещё проще сделать переход, нажав на кнопку «Сохранить», которая имеет вид дискеты и расположена в блоке инструментов 1С в самом верху окна. Но такая возможность доступна только пользователям, которые применяют программу версии 8.3. В ранних версиях можно использовать только предыдущий вариант.

Переход к сохранению списка в 1С

Сохранение таблицы из 1С в Microsoft Excel

Весь список будет сохранен отдельной книгой.

Способ 4: копирование диапазона из списка 1С в Excel

Бывают случаи, когда нужно перенести не весь список, а только отдельные строки или диапазон данных. Этот вариант тоже вполне воплотим с помощью встроенных инструментов.

    Выделяем строки или диапазон данных в списке. Для этого зажимаем кнопку Shift и кликаем левой кнопкой мыши по тем строкам, которые нужно перенести. Жмем на кнопку «Все действия». В появившемся меню выбираем пункт «Вывести список…».

Переход к выводу диапазона данных в 1С

Окно вывода списка выделенных строк в Microsoft Excel

Список выведен в 1С

Способ 5: Сохранение документов в формате Excel

В Excel иногда нужно сохранять не только списки, но и созданные в 1С документы (счета, накладные платежные поручения и т.д.). Это связано с тем, что для многих пользователей редактировать документ проще в Экселе. К тому же в Excel можно удалить заполненные данные и, распечатав документ, использовать его при необходимости как бланк для ручного заполнения.

    В 1С в форме создания любого документа имеется кнопка печати. На ней расположена пиктограмма в виде изображения принтера. После того, как в документ введены необходимые данные и он сохранен, жмем на этот значок.

Вывод на печать документа в 1С

Переход к сохранению документа в Microsoft Excel

Переход к сохранению документа в программе 1С

Сохранение документа в формате Microsoft Excel

Документ будет сохранен в формате Эксель. Этот файл теперь можно открывать в данной программе, и проводить дальнейшую его обработку уже в ней.

Как видим, выгрузка информации из 1С в формат Excel не составляет никаких сложностей. Нужно знать только алгоритм действий, так как, к сожалению, не для всех пользователей он интуитивно понятен. С помощью встроенных инструментов 1С и Эксель можно копировать содержимое ячеек, списков и диапазонов из первого приложения во второе, а также сохранять списки и документы в отдельные книги. Вариантов сохранения достаточно много и для того, чтобы пользователь мог найти подходящий именно для его ситуации, совсем не нужно прибегать к использованию стороннего программного обеспечения или применять сложные комбинации действий.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: