Запрос к 1с из excel

Обновлено: 05.07.2024

Как осуществить чтение/запись данных из/в Excel на языке 1с (используя COM-объект)

Основные методы, принципы и хитрости, используемые при работе с EXCEL через COM-объект

Чтение данных из Excel

Доступ из 1С к Excel производится посредством OLE. Создание COM-объекта:

Теперь используя переменную Эксель можно управлять приложением Excel.

  • Внимание! Microsoft Excel должен быть установлен на компьютере!

Следующая команда откроет книгу:

Перед тем, как начать считывание данных, укажем лист книги, с которого будем считывать данные:

Нумерация листов книги начинается с 1. Общее количество листов можно получить, используя следующую команду:

Лист можно выбрать по имени листа в книге:

Имя листа в книге можно получить по номеру:

Точно так же можно задать имя листа:

Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:

Получим значения ячейки листа в строке НомерСтроки и в колонке НомерКолонки:

Ниже приведен отрывок кода, запустив который мы прочитаем все данные с первой страницы:

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

Выгрузка данных в Excel

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

При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:

Или добавить в книгу новый лист:

Добавим в ячейку на листе значение:

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

Как программно сохранить файл Excel в формате 2003 года

Часто используемые методы Excel

Хитрости Excel

Как выборочно разрешить / запретить редактирование ячеек листа

Как запретить появление на экране всяких вопросов от Excel

Excel, чтоб вопрос не задавал:

Как добавить лист Excel в конец списка листов книги или после конкретного листа (а не в начало книги)

Метод работает для платформ 1С v8.

Как программно скрыть колонку файла Excel

Как программно назначить ячейке файла Excel перенос по словам

Как обработать файл xls, если Excel не установлен на компьютере

Для этого можно использовать метод

Код для 7.7, решающий такую задачу, будет выглядеть примерно так:

Как указать цвет шрифта в ячейке, цвет рамки, цвет фона

Организация автоматической обработки файлов xls из выбранной папки

Создание кнопки в Excel в 7.7

текст макроса пишется в переменную st

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

Описание команды ПолучитьCOMОбъект

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

Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было.
Пример:

Используя Excel можно получать из 1С различные отчеты.

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

О доступе в 1С через Excel администраторам и опытным пользователям

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

Доступ к данным локальной и сетевой версии 1С (DBF-версия)

на ANSI. Затем в файле 1CV7.DD смотрят описание таблиц с данным 1С. В конце составляют запрос для получения нужной информации из 1С через ODBC-драйвер FoxPro. Например, для получения информации о приходных накладных нужен примерно такой запрос:

SELECT dh434.IDDOC, dh434.SP440, dh434.SP910, dh434.SP441, dh434.SP453, sc46.DESCR, sc33.DESCR, dt434.SP449, dt434.SP451, dt434.SP453 FROM dh434.dbf dh434, dt434.dbf dt434, sc33.dbf sc33, sc46.dbf sc46 WHERE sc46.ID = dh434.SP437 AND dh434.IDDOC = dt434.IDDOC AND dt434.SP448 = sc33.ID

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

Замечания по безопасности.

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

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

- Используйте средства Windows Trusted Security, для изоляции разных баз друг от друга.

- Не устанавливайте Microsoft Query и ODBC-драйверы для DBF-файлов обычным операторам БД.

Доступ к данным версии 1С для SQL

SELECT dh434.IDDOC, dh434.SP440, dh434.SP910, dh434.SP441, dh434.SP453, sc46.DESCR, sc33.DESCR, dt434.SP449, dt434.SP451, dt434.SP453

FROM dh434, dt434, sc33, sc46 WHERE sc46.ID = dh434.SP437 AND dh434.IDDOC = dt434.IDDOC AND dt434.SP448 = sc33.ID

По сравнению с анализом DBF-базы запрос имеет несущественные отличия в разделе FROM и для составления запроса следует пользоваться описанием базы в разделе 1CV7.DDS.

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

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

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

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

Внимание!

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

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

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

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

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

Обмен через OLE

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

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

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

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

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

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

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

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

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

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

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

Обмен через ADO

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Остались вопросы?
Спросите в комментариях к статье.

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

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

1. загрузка с помощью свойства Cells;

2. загрузка с помощью метода Range и последующим обращением к данным через метод GetValue();

3. загрузка с помощью метода Range и последующим обращением к данным через свойство Value;

4. загрузка с помощью технологии ADO [2] и использованием компоненты GameWithFire [3].

Рассмотрим вышеперечисленные методы подробнее.

1. Загрузка данных с помощью свойства Cells

Этот метод используется в обработке «ЗагрузкаДанныхИзТабличногоДокумента.epf», которая присутствует на диске ИТС, и основан он на обращении к объекту Excel.Application через технологию COM с последующим последовательным чтением данных в ячейках обращением к свойству Cells.

Значение = ExcelЛист.Cells(Row,Column).Text;

Собственно, здесь все достаточно просто:

а) подключаемся к Excel

б) получаем диапазон данных на листе:

в) последовательно считываем данные из файла:

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

2. Загрузка данных с помощью метода Range и последующим обращением к данным через метод GetValue()

Этот метод так же основан на возможностях объекта Excel.Application, но, в отличие от загрузки с использованием свойства Cells, позволяет получить сразу все значения в виде двумерного массива. Работает следующим образом:

а) подключаемся к Excel (аналогично методу 1);

б) определяем диапазон используемых ячеек (аналогично методу 1)

в) считываем данные с помощью метода Range(начальнаяЯчейка, конечнаяЯчейка). Здесь начальная и конечная ячейки – это элементы свойства Cells, о котором шла речь выше.

В результате, в переменной Диапазон мы получим значение типа COMSafeArray, который представляет собой объектную оболочку над многомерным массивом SAFEARRAY. Иначе говоря, мы получаем массив, который, как известно, является областью памяти. А с областью в оперативной памяти работа всегда быстрее.

При этом надо учитывать, что массив этот многомерный. Для нашего случая это будет двумерный массив.

г) последовательно получаем значения из массива с помощью метода GetValue(столбец, строка)

Данный метод работает значительно быстрее, чем чтение с помощью свойства Cells.

3. Загрузка данных с помощью метода Range и последующим обращением к данным через свойство Value

Этот метод отличается от предыдущего только тем, что вместо работы с объектом типа COMSafeArray мы сразу получаем набор значений в виде стандартного массива 1С (тип Массив).

Также, в приведенном листинге вместо метода Range используется свойство UsedRange, которое, по сути, идентично значению, возвращаемому методом Range для всей используемой области листа (это свойство не годится, если нужно прочитать только какую-то часть ячеек, в отличие от метода Range).

а) подключаемся к Excel (как и в предыдущих случаях)

б) считываем данные используя свойство UsedRange и метод Выгрузить()

В результате, получаем двумерный массив типа Массив

в) последовательно получаем значения из массива

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

4. Загрузка данных с помощью технологии ADO и использованием компоненты GameWithFire

Данный способ использует технологию ADO [2], которая реализуется с помощью библиотеки ADOdb [4] и позволяет получать доступ к любым СУБД, реализующим технологию ODBC. Собственно, Excel попадает в данный список и, следовательно, мы можем получить данные, используя указанную технологию.

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

Ниже приведен листинг части кода, который демонстрирует данную возможность. Пример во многом использует материал, описанный в источнике [1].

В результате, получаем таблицу значений ТЗ, которую можем обойти любым известным образом.

Заключение

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

Замеры производились на файле Excel с числом строк 16 000 и числом колонок 20. Таким образом, общее число ячеек в области составило 320 000. Значения в таблице говорят сами за себя.

Таблица 1. Время загрузки данных из Excel в 1С при использовании различных методов

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