1С поддерживает работу с различными видами диаграмм, но иногда требуется программно создать диаграмму в excel. Такая потребность может быть обусловлена жесткой постановкой задачи заказчиком или необходимостью иметь более богатые возможности для работы с диаграммами, например, создавать комбинированную диаграмму, чего 1С пока не позволяет.
Создание диаграммы в excel состоит из нескольких этапов:
- Создание экземпляра Excel;
- Заполнение источника данных для построения диаграммы;
- Создание диаграммы и заполнение ее свойств;
- Вывод полученных данных пользователю для просмотра или сохранение файла.
Диаграмма может быть создана на листе с источником данных или отдельном листе.
Программная реализация описанного алгоритма с созданием диаграммы на листе с источником данных может выглядеть так:
&НаКлиенте
Процедура СоздатьДиаграммуНаОтдельномЛисте(Команда)
// Этап 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 — точечная с гладкими кривыми и маркерами.