Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2017, 16:20   #1
regi4
 
Регистрация: 28.05.2014
Сообщений: 5
По умолчанию C# Excel Построить диаграмму

Здравствуйте, пишу программу для взаимодействия с excel.
Сделал импорт данных но не получается нарисовать диаграмму программно. Прошу помощи.
Ошибку выдает на 72 строке
Вложения
Тип файла: rar ppapp.rar (67.3 Кб, 38 просмотров)

Последний раз редактировалось regi4; 05.07.2017 в 17:43.
regi4 вне форума Ответить с цитированием
Старый 05.07.2017, 16:32   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от regi4 Посмотреть сообщение
Здравствуйте, пишу программу для взаимодействия с excel.
Сделал импорт данных но не получается нарисовать диаграмму программно. Прошу помощи.
Ошибку выдает на 61 строке
поле excelworksheet не проинициализировано, а чего-то от него хотите. Может там должно быть:
Код:
excelcells = ObjWorkSheet.get_Range("A3", "E3");
?
Со 135 строки тоже непонятно что идёт в непонятном порядке.
pu4koff вне форума Ответить с цитированием
Старый 05.07.2017, 16:39   #3
regi4
 
Регистрация: 28.05.2014
Сообщений: 5
По умолчанию

Пытаюсь сделать типо такой график, знаю что в коде другой, но в этом коде вообще другой даже не строит
Изображения
Тип файла: png Снимок.PNG (21.0 Кб, 146 просмотров)
regi4 вне форума Ответить с цитированием
Старый 06.07.2017, 09:35   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Код:
private void button1_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
            //Книга.
            ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
            //Таблица.
            ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];

            //Значения [y - строка,x - столбец]
            ObjWorkSheet.Cells[3, 1] = textBox1.Text;
            ObjWorkSheet.Cells[3, 2] = textBox2.Text;
            ObjWorkSheet.Cells[3, 3] = textBox3.Text;
            ObjWorkSheet.Cells[3, 4] = textBox4.Text;
            ObjWorkSheet.Cells[3, 5] = textBox5.Text;
            ObjWorkSheet.Cells[4, 5] = textBox5.Text;
            ObjWorkSheet.Cells[4, 6] = textBox6.Text;
            ObjWorkSheet.Cells[4, 7] = textBox7.Text;
            ObjWorkSheet.Cells[4, 8] = textBox8.Text;
            ObjWorkSheet.Cells[2, 1] = textBox9.Text;
            ObjWorkSheet.Cells[2, 2] = textBox10.Text;
            ObjWorkSheet.Cells[2, 3] = textBox11.Text;
            ObjWorkSheet.Cells[2, 4] = textBox12.Text;
            ObjWorkSheet.Cells[2, 5] = textBox13.Text;
            ObjExcel.Visible = true;
            ObjExcel.UserControl = true;
            //
        
                var excelcells = ObjWorkSheet.get_Range("A3", "E3");
            //И выбираем их
            excelcells.Select();
                    //Создаем объект Excel.Chart диаграмму по умолчанию
                    Excel.Chart excelchart = (Excel.Chart)ObjExcel.Charts.Add(Type.Missing,Type.Missing, Type.Missing, Type.Missing);
                    //Выбираем диграмму - отображаем лист с диаграммой
                    excelchart.Activate();
                    excelchart.Select(Type.Missing);
            //Изменяем тип диаграммы
            ObjExcel.ActiveChart.ChartType = Excel.XlChartType.xlConeCol;
            //Создаем надпись - Заглавие диаграммы
            ObjExcel.ActiveChart.HasTitle = true;
            ObjExcel.ActiveChart.ChartTitle.Text
                       = "Пример диаграммы";
            ObjExcel.ActiveChart.FullSeriesCollection(1).XValues = "=Лист1!$A$2:$E$2";
            //Меняем шрифт, можно поменять и другие параметры шрифта
            ObjExcel.ActiveChart.ChartTitle.Font.Size = 14;
            ObjExcel.ActiveChart.ChartTitle.Font.Color = 255;
            //Обрамление для надписи c тенями
            ObjExcel.ActiveChart.ChartTitle.Shadow = true;
            ObjExcel.ActiveChart.ChartTitle.Border.LineStyle
                         = Excel.Constants.xlSolid;
                    //Даем названия осей
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlCategory,
                        Excel.XlAxisGroup.xlPrimary)).HasTitle = true;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlCategory,
                        Excel.XlAxisGroup.xlPrimary)).AxisTitle.Text = "Годы";
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlSeriesAxis,
                        Excel.XlAxisGroup.xlPrimary)).HasTitle = false;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlValue,
                        Excel.XlAxisGroup.xlPrimary)).HasTitle = true;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlValue,
                        Excel.XlAxisGroup.xlPrimary)).AxisTitle.Text = "Количество";
                    //Координатная сетка - оставляем только крупную сетку
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlCategory,
                       Excel.XlAxisGroup.xlPrimary)).HasMajorGridlines = true;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlCategory,
                      Excel.XlAxisGroup.xlPrimary)).HasMinorGridlines = false;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlSeriesAxis,
                      Excel.XlAxisGroup.xlPrimary)).HasMajorGridlines = true;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlSeriesAxis,
                      Excel.XlAxisGroup.xlPrimary)).HasMinorGridlines = false;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlValue,
                      Excel.XlAxisGroup.xlPrimary)).HasMinorGridlines = false;
                    ((Excel.Axis)ObjExcel.ActiveChart.Axes(Excel.XlAxisType.xlValue,
                      Excel.XlAxisGroup.xlPrimary)).HasMajorGridlines = true;
            //Будем отображать легенду и уберем строки, 
            //которые отображают пустые строки таблицы
            ObjExcel.ActiveChart.HasLegend = true;
            //Расположение легенды
            ObjExcel.ActiveChart.Legend.Position
                       = Excel.XlLegendPosition.xlLegendPositionLeft;
                    //Можно изменить шрифт легенды и другие параметры 
                    ((Excel.LegendEntry)ObjExcel.ActiveChart.Legend.LegendEntries(1)).Font.Size = 12;
                    //((Excel.LegendEntry)ObjExcel.ActiveChart.Legend.LegendEntries(3)).Font.Size = 12;
                    //Легенда тесно связана с подписями на осях - изменяем надписи
                    // - меняем легенду, удаляем чтото на оси - изменяется легенда
                    Excel.SeriesCollection seriesCollection =
                     (Excel.SeriesCollection)ObjExcel.ActiveChart.SeriesCollection(Type.Missing);
                    Excel.Series series = seriesCollection.Item(1);
                    series.Name = "Количество";
                    //Помним, что у нас объединенные ячейки, значит каждая второя строка - пустая
                    //Удаляем их из диаграммы и из легенды
                    //series = seriesCollection.Item(2);
                    //series.Delete();
                    //После удаления второго (пустого набора значений) третий занял его место
                    //series = seriesCollection.Item(2);
                    series.Name = "Годы";
                    //series = seriesCollection.Item(3);
                    //series.Delete();
                    //series = seriesCollection.Item(1);

            //Перемещаем диаграмму на лист 1
            ObjExcel.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, "Лист1");
                    //Получаем ссылку на лист 1
                    var excelsheets = ObjWorkBook.Worksheets;
            ObjWorkSheet = (Excel.Worksheet)excelsheets.get_Item(1);
            //Перемещаем диаграмму в нужное место
            ObjWorkSheet.Shapes.Item(1).IncrementLeft(-201);
            ObjWorkSheet.Shapes.Item(1).IncrementTop((float)20.5);
            //Задаем размеры диаграммы
            ObjWorkSheet.Shapes.Item(1).Height = 550;
            ObjWorkSheet.Shapes.Item(1).Width = 500;
             
            }
pu4koff вне форума Ответить с цитированием
Старый 06.07.2017, 09:36   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Как по мне: лучше сделайте шаблонный файл excel, а в программе открывайте его и заполняйте только данные. параметры диаграммы и т.п. легко сможете изменить без изменения программы.
pu4koff вне форума Ответить с цитированием
Старый 06.07.2017, 23:05   #6
regi4
 
Регистрация: 28.05.2014
Сообщений: 5
По умолчанию

Спасибо, вы очень помогли
regi4 вне форума Ответить с цитированием
Старый 06.07.2017, 23:55   #7
regi4
 
Регистрация: 28.05.2014
Сообщений: 5
По умолчанию

В этой строчке ошибка
Код:
ObjExcel.ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$2:$E$2";
regi4 вне форума Ответить с цитированием
Старый 07.07.2017, 09:37   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от regi4 Посмотреть сообщение
В этой строчке ошибка
Код:
ObjExcel.ActiveChart.SeriesCollection(1).XValues = "=Лист1!$A$2:$E$2";
Имя листа может другое в книге, тогда эту ссылку нужно будет изменить.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить диаграмму классов slavjan Помощь студентам 0 22.12.2013 15:09
Нужно построить диаграмму((( grooveone Паскаль, Turbo Pascal, PascalABC.NET 3 14.12.2013 15:22
Не могу построить диаграмму bri Microsoft Office Excel 4 17.08.2012 13:40
Построить круговую диаграмму! gylayko Помощь студентам 1 17.12.2011 21:30
Реально ли построить такую диаграмму силами Excel 2003? Larryes Microsoft Office Excel 4 05.05.2011 12:39