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

Содержание

  1. Как сохранить ТаблицуЗначений в файл Excel?
  2. Вывод таблицы значений в Excel
  3. Функции сохранения таблицы значений в файл и чтения из файла
  4. Работа с файлами Excel
  5. Обмен через табличный документ
  6. Обмен через OLE
  7. Использование COMSafeArray
  8. Обмен через ADO
  9. Выгрузка без программирования

Как сохранить ТаблицуЗначений в файл Excel?

Копируете данные из таблицы значений в табличный документ, потом сохраняете.

ТабличныйДокумент (SpreadsheetDocument)
Свойства:
АвтоМасштаб (FitToPage)
ВерхнийКолонтитул (Header)
ВстроенныеТаблицы (EmbeddedTables)
Вывод (Output)
ВыделенныеОбласти (SelectedAreas)
ВысотаТаблицы (TableHeight)
Защита (Protection)
ИмяПараметровПечати (PrintParametersName)
ИмяПринтера (PrinterName)
ИмяСохраненияПоложенияОкна (WindowOptionsName)
ИспользуемоеИмяФайла (UsedFileName)
ИтогиСнизу (TotalsBelow)
ИтогиСправа (TotalsRight)
КодЯзыкаМакета (TemplateLanguageCode)
КоличествоЭкземпляров (Copies)
МасштабПечати (PrintScale)
НаправлениеПерехода (StepDirection)
НижнийКолонтитул (Footer)
Области (Areas)
ОбластьПечати (PrintArea)
ОриентацияСтраницы (PageOrientation)
ОтображатьГруппировки (ShowGroups)
ОтображатьЗаголовки (ShowHeaders)
ОтображатьСетку (ShowGrid)
Параметры (Parameters)
ПовторятьПриПечатиКолонки (RepeatOnColumnPrint)
ПовторятьПриПечатиСтроки (RepeatOnRowPrint)
ПолеСверху (TopMargin)
ПолеСлева (LeftMargin)
ПолеСнизу (BottomMargin)
ПолеСправа (RightMargin)
РазборПоКопиям (Collate)
РазмерКолонтитулаСверху (HeaderSize)
РазмерКолонтитулаСнизу (FooterSize)
Рисунки (Drawings)
СохранятьСвойстваОтображения (SaveViewProperties)
ТекущаяОбласть (CurrentArea)
ТолькоПросмотр (ReadOnly)
ФиксацияСверху (FixedTop)
ФиксацияСлева (FixedLeft)
ФиксированныйФон (FixedBackground)
ФоноваяКартинка (BackgroundPicture)
ЦветТекстаГруппировки (GroupTextColor)
ЦветТекстаЗаголовков (HeaderTextColor)
ЦветФонаГруппировки (GroupBackColor)
ЦветФонаЗаголовков (HeaderBackColor)
ЧерноБелаяПечать (BlackAndWhite)
ЧерноБелыйПросмотр (BlackAndWhiteView)
ШиринаТаблицы (TableWidth)
ЭкземпляровНаСтранице (PerPage)

Методы:
ВставитьОбласть (InsertArea)
Вывести (Put)
ВывестиВертикальныйРазделительСтраниц (PutVerticalPageBreak)
ВывестиГоризонтальныйРазделительСтраниц (PutHorizontalPageBreak)
ЗакончитьАвтогруппировкуКолонок (EndColumnAutoGrouping)
ЗакончитьАвтогруппировкуСтрок (EndRowAutoGrouping)
ЗакончитьГруппуКолонок (EndColumnGroup)
ЗакончитьГруппуСтрок (EndRowGroup)
Записать (Write)
КоличествоСтраниц (PageCount)
КоличествоУровнейГруппировокКолонок (ColumnGroupLevelCount)
КоличествоУровнейГруппировокСтрок (RowGroupsLevelCount)
НайтиЗначение (FindValue)
НайтиТекст (FindText)
Напечатать (Print)
НачатьАвтогруппировкуКолонок (StartColumnAutoGrouping)
НачатьАвтогруппировкуСтрок (StartRowAutoGrouping)
НачатьГруппуКолонок (StartColumnGroup)
НачатьГруппуСтрок (StartRowGroup)
Область (Area)
Очистить (Clear)
Показать (Show)
ПоказатьУровеньГруппировокКолонок (ShowColumnGroupLevel)
ПоказатьУровеньГруппировокСтрок (ShowRowGroupsLevel)
ПолучитьОбласть (GetArea)
Присоединить (Join)
ПроверитьВывод (CheckPut)
ПроверитьПрисоединение (CheckAttachment)
Прочитать (Read)
Скрыть (Hide)
УдалитьОбласть (DeleteArea)

Конструкторы:
По умолчанию

Описание:
Используется для доступа к свойствам и методам табличного документа в целом. При помощи этого объекта возможно управление общими характеристиками табличного документа, получение его областей, а также присоединение к табличному документу других табличных документов, группировка строк и колонок табличного документа.
Для табличного документа системой устанавливается язык по умолчанию.
Сериализуется.

Источник

Вывод таблицы значений в Excel

Творчество — вот залог долгой и счастливой жизни. Радость познания и открытий, решение задач и головоломок делают наш земной путь увлекательным и полезным. Подобно герою Владимира Гиляровского любой программист в 1С может привести немало примеров нечаянной радости, которую дарит ему его профессия. В моем случае дело было так.

Однажды мне понадобилось вывести в Excel небольшую таблицу. Задача была выполнена и программа пылилась на полке до следующего случая. В начале года этот случай настал, но обнаружилась неприятная вещь. Для больших объемов данных реализованный метод вывода оказался крайне неэффективны, поэтому пришлось заняться оптимизацией. И вот что получилось.

Основная идея состояла в обращении к именованным ячейкам. Причем именованные ячейки использовались для табличной, многострочной части отчета. В 1С это реализовано просто. В шаблоне отчета размещается область с именованными ячейками, затем при выводе данных идет заполнение параметров области и сформированная строка добавляется в табличный документ. Что-то подобное сделаем и в Excel. На первом шаге подготовим шаблон, который мы планируем использовать для вывода.

На рисунке показан список именованных ячеек. Все они находятся в области СтрокаДанных, которая размещена под заголовком таблицы, и образует пустую строку. В этой области в колонке Страна мы предусмотрели вывод значения по умолчанию «РФ». Следующий шаг — создать на основании данного шаблона таблицу Excel и прочитать все имена, которые мы присвоили ячейкам. Фрагмент кода приведен ниже.

Предполагается, что имена ячеек на листе совпадают с именами колонок таблицы значений (мТЗ), которую мы подготовим для формирования отчета. В общем случае, разумеется, не все именованные ячейки могут дублироваться в структуре таблицы. Теперь заполним структуру данных типа Соответствие (Map в английской записи), при этом ключ — это имя ячейки, а значение — номер колонки, в которой ячейка располагается. Код приводим ниже.

В данном фрагменте, мы не только заполняем соответствие с именем мИмяДанных, но и готовим информацию со значениями по умолчанию (соответствие DefaultValue). Кроме этого, предусмотрим возможность выводить числа и даты в нужном формате. С этой целью сформируем два массива с именами колонок, которые надо форматировать при выводе (мЧислоФормат и мДатаФормат).

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

Источник

Функции сохранения таблицы значений в файл и чтения из файла

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

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

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

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

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

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

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

ПреобразоватьТДвТЗ – Функция преобразования табличного документа в таблицу значений.

ПреобразоватьТЗвТД – Функция обратного преобразования таблицы значений в табличный документ.

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

ЗаписатьТЗВMXL – Преобразует таблицу значений в табличный документ и записывает его в файл.

Еще небольшой набор функций для вывода таблицы значений в табличный документ. После формирования табличного документа, — сохраняем его в файл mxl.

Табличный документ можно сохранить a файлы следующих типов:

  • ANSITXT — Текстовый документ
  • DOCX — документ MS Word
  • HTML
  • HTML3
  • HTML4
  • HTML5
  • MXL
  • MXL7
  • ODS — Файл Open Office
  • PDF — файл Acrobat Readr
  • TXT — Текстовый документ
  • XLS — файл Excel
  • XLS95 — файл Excel95
  • XLS97 — файл Excel97
  • XLSX — файл Excel2010

Пример выгруженной таблицы значений в файл:

Источник

Работа с файлами Excel

MS Excel давно стал стандартом для работы с электронными таблицами. В статье рассматриваются способы программной выгрузки и загрузки из 1С в файлы Excel.

Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.

Обмен через табличный документ

Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:

  • Записать ( ИмяФайла >, ТипФайлаТаблицы >) для выгрузки данных в файл;
  • Прочитать ( ИмяФайла >, СпособЧтенияЗначений >) для загрузки данных из файла.

Внимание!

Метод Записать () доступен как на клиенте, так и на сервере. Метод Прочитать () доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.

Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:

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

Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:

  • XLS95 — формат Excel 95;
  • XLS97 — формат Excel 97;
  • XLSX — формат Excel 2007.

Загрузка из файла осуществляется также достаточно просто:

ТабДок = Новый ТабличныйДокумент ;
ТабДок . Прочитать ( ПутьКФайлу , СпособЧтенияЗначенийТабличногоДокумента.Значение );

Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:

Обмен через OLE

Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.

Пример выгрузки:

// Создание COM-объекта
Эксель = Новый COMОбъект ( «Excel.Application» );
// Отключение вывода предупреждений и вопросов
Эксель . DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель . WorkBooks . Add ();
// Позиционирование на первом листе
Лист = Книга . Worksheets ( 1 );

// Запись значения в ячейку
Лист . Cells ( НомерСтроки , НомерКолонки ). Value = ЗначениеЯчейки ;

// Сохранение файла
Книга . SaveAs ( ИмяФайла );

// Закрытие Эксель и освобождение памяти
Эксель . Quit ();
Эксель = 0 ;

Примеры чтения:

// Создание COM-объекта
Эксель = Новый COMОбъект ( «Excel.Application» );
// Открытие книги
Книга = Эксель . Workbooks . Open ( ПутьКФайлу );
// Позиционирование на нужном листе
Лист = Книга . Worksheets ( 1 );

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;

// Закрытие книги
Книга . Close ( 0 );

// Закрытие Эксель и освобождение памяти
Эксель . Quit ();
Эксель = 0 ;

// Открытие книги
Книга = ПолучитьCOMОбъект ( ПутьКФайлу );
// Позиционирование на нужном листе
Лист = Книга . Worksheets ( 1 );

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;

// Закрытие книги
Книга . Application . Qui t ();

Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:

// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
КонецЦикла;

// —— ВАРИАНТ 2 ——
НомерСтроки = 0 ;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1 ;
ЗначениеЯчейки = Лист . Cells ( НомерСтроки , НомерКолонки ). Value ;
Если НЕ ЗначениеЗаполнено ( ЗначениеЯчейки ) Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:

ВсегоКолонок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Column ;
ВсегоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;

Область = Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок ));
Данные = Область . Value . Выгрузить ();

В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:

Действие Код Комментарий
Работа с приложением
Установка видимости окна приложения Эксель . Visible = Ложь;
Установка режима вывода предупреждений (выводить/не выводить) Эксель . DisplayAlerts = Ложь;
Закрытие приложения Эксель . Quit ();
Работа с книгой
Создание новой книги Книга = Эксель . WorkBooks . Add ();
Открытие существующей книги Книга = Эксель . WorkBooks . Open ( ИмяФайла );
Сохранение книги Книга . SaveAs ( ИмяФайла );
Закрытие книги Книга . Close ( 0 );
Работа с листом
Установка текущего листа Лист = Книга . WorkSheets ( НомерЛиста );
Установка имени Лист . Name = Имя ;
Установка защиты Лист . Protect ();
Снятие защиты Лист . UnProtect ();
Установка ориентации страницы Лист . PageSetup . Orientation = 2 ; 1 — книжная, 2 — альбомная
Установка левой границы Лист . PageSetup . LeftMargin = Эксель . CentimetersToPoints ( Сантиметры );
Установка верхней границы Лист . PageSetup . TopMargin = Эксель . CentimetersToPoints ( Сантиметры );
Установка правой границы Лист . PageSetup . RightMargin = Эксель . CentimetersToPoints ( Сантиметры );
Установка нижней границы Лист . PageSetup . BottomMargin = Эксель . CentimetersToPoints ( Сантиметры );
Работа со строками, колонками, ячейками
Установка ширины колонки Лист . Columns ( НомерКолонки ). ColumnWidth = Ширина ;
Удаление строки Лист . Rows ( НомерСтроки ). Delete ();
Удаление колонки Лист . Columns ( НомерКолонки ). Delete ();
Удаление ячейки Лист . Cells ( НомерСтроки , НомерКолонки ). Delete ();
Установка значения Лист . Cells ( НомерСтроки , НомерКолонки ). Value = Значение ;
Объединение ячеек Лист . Range ( Лист . Cells ( НомерСтроки , НомерКолонки ), Лист . Cells ( НомерСтроки1 , НомерКолонки1 )). Merge ();
Установка шрифта Лист . Cells ( НомерСтроки , НомерКолонки ). Font . Name = ИмяШрифта ;
Установка размера шрифта Лист . Cells ( НомерСтроки , НомерКолонки ). Font . Size = РазмерШрифта ;
Установка жирного шрифта Лист . Cells ( НомерСтроки , НомерКолонки ). Font . Bold = 1 ; 1 — жирный шрифт, 0 — нормальный
Установка курсива Лист . Cells ( НомерСтроки , НомерКолонки ). Font . Italic = 1 ; 1 — курсив, 0 — нормальный
Установка подчеркнутого шрифта Лист . Cells ( НомерСтроки , НомерКолонки ). Font . Underline = 2 ; 2 — подчеркнутый, 1 — нет

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

Использование COMSafeArray

При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray. Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.

// Создание COMSafeArray
МассивКом = Новый COMSafeArray ( «VT_Variant» , ВсегоКолонок , ВсегоСтрок );
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок — 1 Цикл
Для Кол = 0 По ВсегоКолонок — 1 Цикл
МассивКом . SetValue ( Кол , Стр , Значение );
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок )). Value = МассивКом ;

Обмен через ADO

Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.

Пример выгрузки:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект ( «ADODB.Connection» );

// Установка строки соединения
Соединение . ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=» + ИмяФайла + «;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;» ;
Соединение . Open (); // Открытие соединения

// Создание COM-объекта для команды
Команда = Новый COMОбъект ( «ADODB.Command» );
Команда . ActiveConnection = Соединение ;

// Присвоение текста команды для создания таблицы
Команда . CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)» ;
Команда . Execute (); // Выполнение команды

// Присвоение текста команды для добавления строки таблицы
Команда . CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)» ;
Команда.Execute(); // Выполнение команды

// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение . Close ();
Соединение = Неопределено ;

Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:

// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект ( «ADOX.Catalog» );
Книга . ActiveConnection = Соединение ;

// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект ( «ADOX.Table» );
Таблица . Name = «Лист1» ;
Таблица . Columns . Append ( «Колонка1» , 202 );
Таблица . Columns . Append ( «Колонка2» , 7 );
Таблица . Columns . Append ( «Колонка3» , 5 );
Таблица . Columns . Append ( «Колонка4» , 5 );

// Создание в книге листа с описанной структурой
Книга . Tables . Append ( Таблица );
Таблица = Неопределено;
Книга = Неопределено;

В приведенном примере в методе

Таблица . Columns . Append ( «Колонка1» , 202 );

во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:

  • 5 — adDouble;
  • 6 — adCurrency;
  • 7 — adDate;
  • 11 — adBoolean;
  • 202 — adVarWChar;
  • 203 — adLongVarWChar.

Пример чтения:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект ( «ADODB.Connection» );

// Установка строки соединения
Соединение . ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=» + ИмяФайла + «;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;» ;
Соединение . Open (); // Открытие соединения

// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект ( «ADODB.Recordset» );
ТекстЗапроса = «SELECT * FROM [Лист1$]» ;

// Выполнение запроса
Выборка . Open ( ТекстЗапроса , Соединение );

// Обход результата выборки
Пока НЕ Выборка . EOF () Цикл
ЗначениеКолонки1 = Выборка . Fields . Item ( «Колонка1» ). Value ; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка . Fields . Item ( 0 ). Value ; // Обращение по индексу колонки
Выборка . MoveNext ();
КонецЦикла;

Выборка . Close ();
Выборка = Неопределено;
Соединение . Close ();
Соединение = Неопределено;

В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:

  • YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
  • NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.

В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:

Выгрузка без программирования

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

Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.

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

Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:

  1. Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список…;
  2. Сохранить табличный документ в требуемый формат.

Источник

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

Функция ЧтениеТаблицы(ТабЗнач)
 
    Перем Excel;
 
    Excel = СоздатьОбъект("Excel.Application"); //Создаем объект Excel
 
    Excel.Visible = 1; //Определяем видимость документа 1-видимы; 0-Невидимый
 
 
    WB = Excel.Workbooks.Add(); //Добавляем книгу
 
    Sh = WB.ActiveSheet(); //Определяем активный лист
 
    Sh.Visible = 1; //Видимость листа 1-видимы; 0-Невидимый
 
 
    //Создаем на листе Excel колонки начиная с первой колонки i=1
 
    Для i=1 По ТабЗнач.КоличествоКолонок() Цикл
        Sh.Cells(1, i).Value = ТабЗнач.ПолучитьПараметрыКолонки(i);
    КонецЦикла;
 
    Row = 2; //Номер строки на листе Excel
 
    ТабЗнач.ВыбратьСтроки();
    Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
 
        //Выводим строку состояния для строк кратных 10
 
        Если (ТабЗнач.НомерСтроки%10)=0 Тогда
            Состояние("Обработано "+ТабЗнач.НомерСтроки+"/"+ТабЗнач.КоличествоСтрок());
        КонецЕсли;
 
        //Заполняем столбцы на листе Excel для строки номер Row
 
        Для i=1 По ТабЗнач.КоличествоКолонок() Цикл
 
            Значение = ТабЗнач.ПолучитьЗначение(Row-1, i);
 
            //Переводим значение, не являющееся Числом,Строкой, Датой и Неопределенным, в тип Строка
 
            Если ТипЗначения(Значение)>3 Тогда
                Значение = Строка(Значение);
            КонецЕсли;
 
            //Установка формата данных ячейки на листе Excel
 
            Если ТипЗначения(Значение)=2 Тогда
                Sh.Cells(Row, i).NumberFormat = "@";
            КонецЕсли;
 
            //Устанавливаем текущее Значение в в ячейку листа Excel
 
            Sh.Cells(Row, i).Value = Значение;
 
        КонецЦикла;
 
        Row = Row + 1;
 
    КонецЦикла;
 
    Sh.Cells(1,1).AutoFilter(); //Устанавливаем фильтр
 
    Sh.Cells(2,1).Select(); //Выбор области для закрепления
 
    Excel.ActiveWindow.FreezePanes = 1; //Закрепляем область
 
 
    Sh = ""; //Обнуляем лист
 
    Excel = ""; //Обнуляем объект Excel
 
 
    Возврат WB; //Возвращаем книгу Excel
 
 
КонецФункции

 +2 

   

Распечатать

1С 8.x : Как выгрузить Таблицу значение в файл Excel?

Код 1C v 8.х

 Процедура СохранитьТаблицуВФайлExcel(Таблица, ПолноеИмяФайла="", ОткрыватьДиалогВыбораФайла=Истина, ВыгружаемыеКолонки="") Экспорт 

Если ПустаяСтрока(ПолноеИмяФайла) ИЛИ ОткрыватьДиалогВыбораФайла Тогда
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Сохранение документа Excel";
Диалог.Фильтр = "Документ Excel (*.xls)|*.xls";
Диалог.Расширение = "xls";
Диалог.ПолноеИмяФайла = ПолноеИмяФайла;
Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойКаталогФайлов");
Если (Диалог.Выбрать()) И (НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла)) Тогда
ПолноеИмяФайла = Диалог.ПолноеИмяФайла;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;

ФайлНаДиске = Новый Файл(ПолноеИмяФайла);

Попытка
// Загрузка Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.WorkBooks.Add();
Лист = Книга.WorkSheets(1);
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;

Если ПустаяСтрока(ВыгружаемыеКолонки) Тогда
ТаблицаВыгрузки = Таблица.Скопировать();
Иначе
ТаблицаВыгрузки = Таблица.Скопировать(, ВыгружаемыеКолонки);
КонецЕсли;

Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл
Лист.Cells(1, Кол + 1).Value = ТаблицаВыгрузки.Колонки[Кол].Заголовок;
КонецЦикла;

Попытка

Для Стр = 0 По ТаблицаВыгрузки.Количество()-1 Цикл

Для Кол = 0 По ТаблицаВыгрузки.Колонки.Количество()-1 Цикл

Если ТипЗнч(ТаблицаВыгрузки[Стр][Кол]) = Тип("Число") Тогда
// Установним формат для типа Число
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "0,00";
Лист.Cells(Стр + 2, Кол + 1).Value = ТаблицаВыгрузки[Стр][Кол];
Иначе
// Для всех других типов установим формат "Текстовый"
//Лист.Cells(Стр + 2, Кол + 1).NumberFormat = "@";
Лист.Cells(Стр + 2, Кол + 1).Value = Строка(ТаблицаВыгрузки[Стр][Кол]);
КонецЕсли;

КонецЦикла;

КонецЦикла;

ExcelПриложение.DisplayAlerts = False;
Книга.SaveAs(ПолноеИмяФайла);
ExcelПриложение.ActiveWorkbook.Close();
ExcelПриложение.Quit();

Сообщить("Файл выгружен успешно: " + ПолноеИмяФайла);

Исключение

Сообщить("Ошибка записи данных файла :" + ПолноеИмяФайла);
Сообщить(ОписаниеОшибки());
Попытка
ExcelПриложение.Quit();
Исключение
КонецПопытки;

КонецПопытки;

КонецПроцедуры

Автор cobra77777, 23 июн 2014, 19:27

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте!

Как выгрузить таблицу значений в excel ?



самое простое создайте табличный документ, туда выведите свою таблицу значений, и этот табличный документ сохраните как файл Ексель.

если помогло нажмите: Спасибо!


Вывести таблицу значений в excel можно через преобразование ее к табличному документу. Сделать это быстро можно через построитель отчета. Примерно так:


    ТабДок = Новый ТабличныйДокумент;

        Построитель = Новый ПостроительОтчета();

    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТестоваяТаблица);
    Построитель.ВыводитьЗаголовокОтчета = Ложь;
    Построитель.Вывести(ТабДок );

    ИмяФайла = "C:UsersAbisSoftDesktoptest.xls";

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

Недостаток в том, что работает только в толстом клиенте.


Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


сделал через таблицу значений (ТЗ) выгрузку в excel, но выгружается только ОТЧЕСТВО (Результат.xls и КОД прикреплён). Где подправить?


i = 1;

Для Каждого Стр из ТЗ Цикл

Лист.Cells (i,1).Value = Стр.СтраховойНомер;
Лист.Cells (i,2).Value = Стр.Фамилия;
Лист.Cells (i,3).Value = Стр.Имя;
Лист.Cells (i,4).Value = Стр.Отчество;

КонецЦикла;


Для размышления тебе…

i = 1;

Для Каждого Стр из ТЗ Цикл
i = i + 1;
Лист.Cells (i,1).Value = Стр.СтраховойНомер;
Лист.Cells (i,2).Value = Стр.Фамилия;
Лист.Cells (i,3).Value = Стр.Имя;
Лист.Cells (i,4).Value = Стр.Отчество;

КонецЦикла;

Добавлено: 29 июн 2014, 03:39


(Только не спрашивай почему вывод у тебя получается лесенкой = )) )

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Да спасибо. Всё выгрузилось только в ШАХМАТНОМ ПОРЯДКЕ (см.Результат.xls), а как сделать в нормальном варианте (см.внизу) ?

Страховой номер  Фамилия   Иия    Отчество
111-222-333 44   Иванов    Иван   Иванович

и т.д.

Добавлено: 30 июн 2014, 09:03


Куда копать может кто подскажет ?


Нет, не спросил, почему лесенкой… спросил, почему в ШАХМАТНОМ ПОРЯДКЕ :ooifh::D :D

Народная мудрость: Программу встречают по интерфейсу


Тема уже совсем не актуальна.


На чтение 9 мин Просмотров 26.4к. Опубликовано 09.11.2017

MS Excel давно стал стандартом для работы с электронными таблицами. В статье рассматриваются способы программной выгрузки и загрузки из 1С в файлы Excel.

Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.

Содержание

  1. Обмен через табличный документ
  2. Обмен через OLE
  3. Использование COMSafeArray
  4. Обмен через ADO
  5. Выгрузка без программирования

Обмен через табличный документ

Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:

  • Записать(<ИмяФайла>, <ТипФайлаТаблицы>) для выгрузки данных в файл;
  • Прочитать(<ИмяФайла>, <СпособЧтенияЗначений>) для загрузки данных из файла.

Внимание!

Метод Записать() доступен как на клиенте, так и на сервере. Метод Прочитать() доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.


Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:

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

Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:

  • XLS95 — формат Excel 95;
  • XLS97 — формат Excel 97;
  • XLSX — формат Excel 2007.

Загрузка из файла осуществляется также достаточно просто:

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);

Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:

  • Значение;
  • Текст.

Обмен через OLE

Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.

Пример выгрузки:

// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Отключение вывода предупреждений и вопросов
Эксель.DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель.WorkBooks.Add();
// Позиционирование на первом листе
Лист = Книга.Worksheets(1);

// Запись значения в ячейку
Лист.Cells(НомерСтроки, НомерКолонки).Value = ЗначениеЯчейки;

// Сохранение файла
Книга.SaveAs(ИмяФайла);

// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;

Примеры чтения:

// —— ВАРИАНТ 1 ——

// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Открытие книги
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;

// Закрытие книги
Книга.Close(0);

// Закрытие Эксель и освобождение памяти
Эксель.Quit();
Эксель = 0;

// —— ВАРИАНТ 2 ——

// Открытие книги
Книга = ПолучитьCOMОбъект(ПутьКФайлу);
// Позиционирование на нужном листе
Лист = Книга.Worksheets(1);

// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;

// Закрытие книги
Книга.Application.Quit();

Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:

// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
КонецЦикла;

// —— ВАРИАНТ 2 ——
НомерСтроки = 0;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1;
ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value;
Если НЕ ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
Прервать;
КонецЕсли;
КонецЦикла;

Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:

ВсегоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;

Область = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок));
Данные = Область.Value.Выгрузить();

В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:

Действие Код Комментарий
Работа с приложением
Установка видимости окна приложения Эксель.Visible = Ложь;
Установка режима вывода предупреждений (выводить/не выводить) Эксель.DisplayAlerts = Ложь;
Закрытие приложения Эксель.Quit();
Работа с книгой
Создание новой книги Книга = Эксель.WorkBooks.Add();
Открытие существующей книги Книга = Эксель.WorkBooks.Open(ИмяФайла);
Сохранение книги Книга.SaveAs(ИмяФайла);
Закрытие книги Книга.Close(0);
Работа с листом
Установка текущего листа Лист = Книга.WorkSheets(НомерЛиста);
Установка имени Лист.Name = Имя;
Установка защиты Лист.Protect();
Снятие защиты Лист.UnProtect();
Установка ориентации страницы Лист.PageSetup.Orientation = 2; 1 — книжная, 2 — альбомная
Установка левой границы Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка верхней границы Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка правой границы Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры);
Установка нижней границы Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры);
Работа со строками, колонками, ячейками
Установка ширины колонки Лист.Columns(НомерКолонки).ColumnWidth = Ширина;
Удаление строки Лист.Rows(НомерСтроки).Delete();
Удаление колонки Лист.Columns(НомерКолонки).Delete();
Удаление ячейки Лист.Cells(НомерСтроки, НомерКолонки).Delete();
Установка значения Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Объединение ячеек Лист.Range(Лист.Cells(НомерСтроки, НомерКолонки), Лист.Cells(НомерСтроки1, НомерКолонки1)).Merge();
Установка шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Name = ИмяШрифта;
Установка размера шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Size = РазмерШрифта;
Установка жирного шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Bold = 1; 1 — жирный шрифт, 0 — нормальный
Установка курсива Лист.Cells(НомерСтроки, НомерКолонки).Font.Italic = 1; 1 — курсив, 0 — нормальный
Установка подчеркнутого шрифта Лист.Cells(НомерСтроки, НомерКолонки).Font.Underline = 2; 2 — подчеркнутый, 1 — нет

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

Использование COMSafeArray

При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray. Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.

// Создание COMSafeArray
МассивКом = Новый COMSafeArray(«VT_Variant», ВсегоКолонок, ВсегоСтрок);
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок1 Цикл
Для Кол = 0 По ВсегоКолонок1 Цикл
МассивКом.SetValue(Кол, Стр, Значение);
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).Value = МассивКом;

Обмен через ADO

Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.

Пример выгрузки:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);

// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения

// Создание COM-объекта для команды
Команда = Новый COMОбъект(«ADODB.Command»);
Команда.ActiveConnection = Соединение;

// Присвоение текста команды для создания таблицы
Команда.CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)»;
Команда.Execute(); // Выполнение команды

// Присвоение текста команды для добавления строки таблицы
Команда.CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)»;
Команда.Execute(); // Выполнение команды

// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение.Close();
Соединение = Неопределено;

Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:

// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект(«ADOX.Catalog»);
Книга.ActiveConnection = Соединение;

// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект(«ADOX.Table»);
Таблица.Name = «Лист1»;
Таблица.Columns.Append(«Колонка1», 202);
Таблица.Columns.Append(«Колонка2», 7);
Таблица.Columns.Append(«Колонка3», 5);
Таблица.Columns.Append(«Колонка4», 5);

// Создание в книге листа с описанной структурой
Книга.Tables.Append(Таблица);
Таблица = Неопределено;
Книга = Неопределено;

В приведенном примере в методе

Таблица.Columns.Append(«Колонка1», 202);

во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:

  • 5 — adDouble;
  • 6 — adCurrency;
  • 7 — adDate;
  • 11 — adBoolean;
  • 202 — adVarWChar;
  • 203 — adLongVarWChar.

Пример чтения:

// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection»);

// Установка строки соединения
Соединение.ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ИмяФайла+«;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;»;
Соединение.Open(); // Открытие соединения

// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект(«ADODB.Recordset»);
ТекстЗапроса = «SELECT * FROM [Лист1$]»;

// Выполнение запроса
Выборка.Open(ТекстЗапроса, Соединение);

// Обход результата выборки
Пока НЕ Выборка.EOF() Цикл
ЗначениеКолонки1 = Выборка.Fields.Item(«Колонка1»).Value; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка.Fields.Item(0).Value; // Обращение по индексу колонки
Выборка.MoveNext();
КонецЦикла;

Выборка.Close();
Выборка = Неопределено;
Соединение.Close();
Соединение = Неопределено;

В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:

  • YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
  • NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.

В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:

  • Connection;
  • Command;
  • Recordset;
  • Record;
  • Fields;
  • Stream;
  • Errors;
  • Parameters;
  • Properties.

Выгрузка без программирования

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

Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.

Сохранение табличного документа 1С

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

Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:

  1. Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список…;
  2. Сохранить табличный документ в требуемый формат.

Сохранение динамического списка

Понравилась статья? Поделить с друзьями:
  • 1с способы чтения excel
  • 1с сохранить табличный документ в excel программно на сервере
  • 1с сохранить табличный документ в excel программно на разные листы
  • 1с сохранить табличные документы в разные листы excel
  • 1с сохранить таблицу значений в файл excel программно