Создание диаграммы Excel из 1С

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

Создание диаграммы в excel состоит из нескольких этапов:

  1. Создание экземпляра Excel;
  2. Заполнение источника данных для построения диаграммы;
  3. Создание диаграммы и заполнение ее свойств;
  4. Вывод полученных данных пользователю для просмотра или сохранение файла.

Диаграмма может быть создана на листе с источником данных или отдельном листе.

Программная реализация описанного алгоритма с созданием диаграммы на листе с источником данных может выглядеть так:
&НаКлиенте
Процедура СоздатьДиаграммуНаОтдельномЛисте(Команда)

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

// Этап 2. Вызов процедуры заполнения источника данных
СформироватьИсточникДанных(Лист);

// Этап 3. Создание диаграммы и заполнение ее свойств
ОбластьДанных = Лист.Range(Лист.Cells(1, 1), Лист.Cells(3, 13)); // определение области данных
Эксель.Charts.Add(); // добавление диаграммы
Эксель.ActiveChart.SetSourceData(ОбластьДанных); // установка области данных диаграммы
Эксель.ActiveChart.ChartType = 51; // установка типа диаграммы
Эксель.ActiveChart.HasDataTable = 1; // отображать под диаграммой таблицу с данными
Эксель.ActiveChart.HasTitle = 1; // отображать заголовок
Эксель.ActiveChart.ChartTitle.Text = "Моя диаграмма"; // текст заголовка

// Этап 4. Вывод результата пользователю
Эксель.Visible = Истина;

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

Заполнение источника данных вынесено в отдельную процедуру:
&НаКлиенте
Процедура СформироватьИсточникДанных(Лист)

ГСЧ = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());

Лист.Cells(2, 1).Value = "План";
Лист.Cells(3, 1).Value = "Факт";
Для Ном = 1 По 12 Цикл
Лист.Cells(1, Ном+1).Value = Формат(ДобавитьМесяц(НачалоГода(ТекущаяДата()), Ном-1), "ДФ=MMM");
Лист.Cells(2, Ном+1).Value = ГСЧ.СлучайноеЧисло(0, 100);
Лист.Cells(3, Ном+1).Value = ГСЧ.СлучайноеЧисло(0, 100);
КонецЦикла;

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

При необходимости вывести диаграмму на листе с источником данных необходимо заменить этап 3 описанного алгоритма на:
ОбластьДанных = Лист.Range(Лист.Cells(1, 1), Лист.Cells(3, 13)); // определение области данных
Диаграмма = Лист.ChartObjects().Add(1, 100, 500, 400).Chart; // создание диаграммы и определение ее размеров
Диаграмма.SetSourceData(ОбластьДанных); // установка области данных диаграммы
Диаграмма.ChartType = 51; // установка типа диаграммы
Диаграмма.HasDataTable = 0; // отображать под диаграммой таблицу с данными
Диаграмма.HasTitle = 1; // отображать заголовок
Диаграмма.ChartTitle.Text
= "Моя диаграмма"; // текст заголовка

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

  • 4 — график;
  • 5 — круговая;
  • 51 — гистограмма с группировкой;
  • 54 — объемная гистограмма с группировкой;
  • 57 — линейчатая с группировкой;
  • 65 — график с маркерами;
  • 72 — точечная с гладкими кривыми и маркерами.
Оцените статью