helpf.pro
Регистрация
 +11 
Распечатать

Экспорт и Импорт данных 1С - Microsoft Excel

Экспорт
Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка;
Код 1C v 8.х
 Процедура ОсновныеДействияФормыЭкспорт(Кнопка)
  Попытка
    Попытка

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

    // Создадим книгу, по умолчанию в ней уже есть листы
    Книга = ExcelПриложение.WorkBooks.Add();

    // Используем первый лист книги Excel
    Лист = Книга.WorkSheets(1);

    // Сформировать шапку документа в первой строке листа
    Колонка = 1;
    Для каждого стр из ТП цикл
      Если стр.Выгружать Тогда
        Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
        Колонка = Колонка + 1;
      КонецЕсли;
    КонецЦикла;

    // Выгрузить данные справочника
    выборка = Справочники[ИмяСправочника].Выбрать();
    СтрокаЛиста = 2;
    Пока выборка.Следующий() Цикл
      Колонка = 1;
      Для каждого стр из ТП цикл

      Если стр.Выгружать Тогда
      Попытка
        // Установить значение в строке и колонке
        Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
        // Установить формат для типа Число
        Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
        Лист.Cells(СтрокаЛиста, Колонка).Value =
          Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
        иначе
          // Для всех других типов установим формат "Текстовый"
          Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
          Лист.Cells(СтрокаЛиста, Колонка).Value =
            Строка(выборка[стр.НазваниеРеквизита]);
        КонецЕсли;
      исключение
        // в случае ошибки вывести номер строки и колонки
        Сообщить("Ошибка установки значения для: " +
          выборка[стр.НазваниеРеквизита]);
        Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
          Колонка+ " Рек: " + стр.НазваниеРеквизита);
      КонецПопытки;
      Колонка = Колонка + 1;
      КонецЕсли;

    КонецЦикла;
    СтрокаЛиста = СтрокаЛиста + 1;
    Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
    КонецЦикла;

    // Сохраним созданную книгу в файл xls
    Книга.SaveAs(имяФайла);

    // Обязательно закроем соединение с COM объектом для освобождения памяти
    ExcelПриложение.Quit();

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

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


Импорт
Исходный код процедуры 1С для загрузки XLS файла:
Код 1C v 8.х
 Процедура ЧтениеXLSФайла(Элемент)

  Если ПустаяСтрока(ИмяФайла) Тогда
    Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
    Возврат;
  КонецЕсли;

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

  Попытка
    // Открытие файла Microsoft Excel
    Состояние("Открытие файла Microsoft Excel...");
    ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
  Исключение
    Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
  КонецПопытки;

  Попытка
    // Обработка файла Microsoft Excel
    Состояние("Обработка файла Microsoft Excel...");
    // Читаем данные первого листа книги
    ExcelЛист = ExcelФайл.Sheets(1);

    // Определить количество строк и колонок выбранного листа книги Excel
    xlCellTypeLastCell = 11;
    ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
    ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
  Исключение
    Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    // Закрыть COM соединение для экономии памяти
    ExcelПриложение.Quit();
  КонецПопытки;

  // Создание описателя типов для таблицы значений
  КЧ = Новый КвалификаторыЧисла(15,2);
  КС = Новый КвалификаторыСтроки(50);
  Массив = Новый Массив;
  Массив.Добавить(Тип("Строка"));
  ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
  Массив.Очистить();
  Массив.Добавить(Тип("Число"));
  ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);

  // Очистить предыдущие значения
  ТаблицаДокумента.Очистить();
  ТаблицаДокумента.Колонки.Очистить();

  // Создать колонки табличного документа
  ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
  ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
  ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
  ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);

  // Последовательное чтение строк с выбранного листа
  Для Строка = 1 По ExcelПоследняяСтрока Цикл

    // Обработка нажатия Ctrl + Break
    ОбработкаПрерыванияПользователя();

    // Добавить данные в табличную часть экранной формы
    Стр=ТаблицаДокумента.Добавить();
    Стр.Номер = Строка;
    Попытка
      Стр.Артикул = ExcelЛист.Cells(Строка, 1).Value;
      Стр.Описание = ExcelЛист.Cells(Строка, 2).Value;
      Стр.Цена = ExcelЛист.Cells(Строка, 3).Value;
    Исключение
      // Не редко происходит ошибка конвертации отдельной ячейки документа
      Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;
    // Отобразить информацию о ходе выполнения обработки
    Состояние("Обработка файла Microsoft Excel : "
      + "строка " + Строка + " из " + ExcelПоследняяСтрока);

  КонецЦикла;

  // Закрыть COM соединение для экономии памяти
  ExcelПриложение.Quit();

  // Отобразить результаты загрузки в форме элемента
  ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
  ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();

КонецПроцедуры // ЧтениеXLSФайла(Элемент)   
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 311554
 +11 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ;
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 2
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
QR код в 1С 21
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог
Автоматическая выгрузка загрузка данных используя регламентное задание 18
Для обмена данными между программами необходимо сделать следующее: 1. При помощи Конвертации Данных создать правила выгрузки данных 2. Нужно чтобы в конфигурации была обработка УниверсальныйОбменДаннымиXML , желательно последней версии! (При помо
Посмотреть все результаты поиска похожих
Комментарии
sergey_fedorov
11.04.2013 16:21Комментарий: 10
sergey_fedorov
как узнать какой уровень группировки в текущей строке?
sergey_fedorov
11.04.2013 15:52Комментарий: 9
sergey_fedorov
вот теперь я разобрался извиняюсь за спам!!!
sergey_fedorov
11.04.2013 15:52Комментарий: 8
sergey_fedorov
sergey_fedorov
11.04.2013 15:51Комментарий: 7
sergey_fedorov
я так и не понял приложиля файл или нет загружаю еще раз...
sergey_fedorov
11.04.2013 15:44Комментарий: 6
sergey_fedorov
День добрый очень полезная статья. А можете подсказать как загрузить группы из этого прайса опираясь на урровень группировки. И в зависимости от того какой уровень у строки сделать родителем верхний уровень у текущей группы в текущей строке.
TVA11
11.04.2013 11:57Комментарий: 5
TVA11
Благодарность, все работает.
Еще бы табличные части добавить ), но и так хорошо.
E_Migachev
07.11.2012 11:29Комментарий: 4
E_Migachev
Asentiy, если ТрудоваяДеятельность - это табличная часть, то указывай просто Для
Код 1C v 8.х
 каждого стр из ТрудоваяДеятельность цикл 
 //...
КонецЦикла;   
Asentiy
07.11.2012 06:19Комментарий: 3
Asentiy
E_Migachev, а как получить само ТП? ТП=Элементы.ТрудоваяДеятельность.ТекущиеДанные; где ТрудоваяДеятельность(табличная часть справочника)
Пробовал таким образом, выводит ошибку "Итератор для значения не определен". Сам начинающий, жду ответа
E_Migachev
07.09.2012 22:58Комментарий: 2
E_Migachev
an2489, какое-то Табличное Поле с данными на форме
an2489
07.09.2012 14:24Комментарий: 1
an2489
Што такое ТП?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!