8.х Табличный документ и Excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mialord, 8 авг 2010.

  1. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    На данный момент просторы интернета завалены ответами на вопрос как сохранить табличный документ в файл XLS. У меня же задача противоположная, имеются документы excel которые являются шаблоном для рассылки электронных писем по отчетам. Вопрос в том как создать табличный документ на основании файла excel. А самое интересное в том что платформа это делает когда создаём в режиме конфигурирования новый макет и указываем Active document. Желающие и знающие, приглашаю на дискуссию. :unsure:
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Такая штука реализованна в 1С Косоилдации, там есть обработка, которая на основе Экселевских документов создает точно такие же Табличные в 1С
  3. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Если не сложно не могли бы Вы показать пример, скопировать текст обработки. Буду признателен за любую информацию, очень интерисуюсь.
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    К сожалению нет достпа к консолидации сейчас т.к во франче уже давно не работаю
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Писал подобное. Если интересует - стукните в личку. Выложу для 7.7 думаю не так много притеся переделать. Главное - СУТЬ
  6. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Выкладываю результат своих поисков.
    Можно импортировать и в табличный документ, однако со свойствами криво выходит, стили и т.д.
    На данном этапе я делаю публикацию файла excel и потом это всё мероприятие аккуратно загружается в письмо. Оставил разные варианты в одной функции.
    1. Получение ТЗ с данными документа.
    2. Запись данных в новый табличный документ (закомментировано).
    3. Создание файла публикации и получение шаблона письма.
    Код:
    Функция ПрочитатьЛистExcel(Файл, ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
    
    // Критим объект Excel
    Если ЛистЭксель = Неопределено Тогда
    ЛистЭксель = Новый COMОбъект("Excel.Application");
    ЛистЭксель.Displayalerts = 0;
    ЛистЭксель.Workbooks.Open(Файл);
    КонецЕсли;
    
    // Пишем файл в массив для извлечения параметров
    // параметры обхода
    Если ВсегоСтрок = 0 Тогда
    ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    КонецЕсли;
    Если ВсегоКолонок = 0 Тогда
    ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
    КонецЕсли;
    
    // запись в таблицу значений
    Если ТЗ = Неопределено Тогда
    ТЗ =  Новый ТаблицаЗначений;
    Для Счетчик = 1 По ВсегоКолонок Цикл
    ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
    КонецЦикла;
    КонецЕсли;
    
    Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
    НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
    Данные = Область.Value.Выгрузить();
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
    ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    
    //ТабличныйДокумент = Новый ТабличныйДокумент;
    //Для Row = 1 По ВсегоСтрок Цикл
    //    Для Column = 1 По ВсегоКолонок Цикл
    //        ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Формат(ЛистЭксель.Cells(Row,Column).Value, "ЧГ=");
    //    КонецЦикла;
    //КонецЦикла;
    
    // Перезапишем файл Excel в формате htm во временный файл
    ФайлВФорматеHTML = ПолучитьИмяВременногоФайла("htm");
    
    // Попытка публикации активного листа
    Структура = Новый Структура;
    
    Попытка
    ЛистЭксель.ActiveWorkbook.PublishObjects.Add("1", ФайлВФорматеHTML, ЛистЭксель.ActiveSheet.Name).Publish(True);
    ЛистЭксель.Workbooks.Close();
    ТекстПисьма = Новый ТекстовыйДокумент;
    ТекстПисьма.Прочитать(ФайлВФорматеHTML);
    
    ХТМЛТекст = ТекстПисьма.ПолучитьТекст();
    
    НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
    НовыйHTMLДокумент.open("text/html");
    НовыйHTMLДокумент.write(ХТМЛТекст);
    НовыйHTMLДокумент.close();
    
    ТегТела = НовыйHTMLДокумент.all.tags("BODY");
    Для а = 0 По ТегТела.length - 1 Цикл
    ТегТела.item(а).innerHTML = " // для правильного отображения на форуме заменено  заменено на -
    |*P-*BR-*BR-*BR-
    |*HR-
    |*/P-
    |*P-*/P-" + ТегТела.item(а).innerHTML;
    КонецЦикла;
    
    ТекстСообщенияДляОтправки = "";
    Для а = 0 По НовыйHTMLДокумент.all.length - 1 Цикл
    Если НовыйHTMLДокумент.all.item(а).tagName = "HTML" Тогда
    ТекстСообщенияДляОтправки = НовыйHTMLДокумент.all.item(а).innerHTML;
    КонецЕсли; 
    КонецЦикла;
    Исключение
    Возврат Структура;
    КонецПопытки;
    
    ЛистЭксель = 0;
    
    Структура.Вставить("ТЗ", ТЗ);
    Структура.Вставить("ТекстСообщенияДляОтправки", ТекстСообщенияДляОтправки);
    
    Возврат Структура;
    
    КонецФункции
    
    

Поделиться этой страницей