powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Расположение графика и верные данных оси Х и Y
2 сообщений из 2, страница 1 из 1
Расположение графика и верные данных оси Х и Y
    #39154184
FanRammstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день граждане форумчане.

Как я понял тема в которой обсуждался класс для работы с Excel из c# померла. В принципе все что там есть работает очень даже хорошо, но не весь функционал который необходим есть, а именно ни как не реализовано построение графиков, но мне это очень необходимо. В итоге сел дописывать. Построить график получилось, но не так как нужно. Взяв часть кода из этой темы и немного его допилив для соответствия с кодом из темы получился данный сценарий танца с бубном для построения графика.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//СОЗДАНИЕ ГРАФИКА
        public void CreateCharts(string _List)
        {
            // _List просто имя листа в котором необходимо построить график
            WorkSheets = WorkBook.GetType().InvokeMember("Sheets", BindingFlags.GetProperty, null, WorkBook, null);
            WorkSheet = WorkBook.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, WorkBook, null);
            // object Charts, Chart;
            Charts = oExcel.GetType().InvokeMember("Charts", BindingFlags.GetProperty, null, oExcel, null);
            Chart = Charts.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, Charts, null);
            Chart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty, null, Chart, new object[] { 4 /*xlLine*/});

            Range = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheet, new object[] { "B2:C10" });
            Chart.GetType().InvokeMember("SetSourceData", BindingFlags.InvokeMethod, null, Chart, new object[] { Range, 2 /*xlColumns*/});

            Chart.GetType().InvokeMember("Location", BindingFlags.InvokeMethod, null, Chart, new object[] { 2 /*xlLocationAsObject*/, _List });
        }


График строится на том листе который необходим, НО выглядит он совсем не так как нужно (см. приложение). Ось X должна была заполниться данными из столбца "B2:B10", а ось Y из столбца "C2:C10", но что то пошло не так. А так же график строится тупо в середине листа, а хочется чтобы он построился по необходимым мне координатам и с заданным размером.
...
Рейтинг: 0 / 0
Расположение графика и верные данных оси Х и Y
    #39154815
FanRammstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в итоге сам задал вопрос, сам ответил, но всё же может кому пригодится. Ну и естественно может кто поправил что-то.
Сама функция создания графика

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
//СОЗДАНИЕ ГРАФИКА
        public void CreateCharts(string _List, string XValuesS, int XValuesI, string YValues, int YValuesI,
            int PositionX, int PositionY, int Width, int Height, int ColorLine)
        {
            // _List просто имя листа в котором необходимо построить график
            // XValuesS - Буква колонки где значения для оси Х
            // XValuesI - Начальное значение для осей X и Y
            // YValues - Буква колонки где значения для оси Y
            // YValuesI - Конецное значение для осей X и Y
            // PositionX - Положение графика относительно левой части Excel документа
            // PositionY - Положение графика относительно верхней части Excel документа
            // Width - Высота графика
            // Height - Ширина графика
            // ColorLine используется для раскраски линии значения 1-8
                // правильная работа тестировалась только на ChartType = 4 (обычный линейный график )

            object CurCharts, CurChart, _Chart, SeriesCollection, _SeriesCollection, RangeX, RangeY, ValX, ValY;
            
            string _XValues = XValuesS + XValuesI;
            string _YValues = YValues + YValuesI;
            WorkSheets = WorkBook.GetType().InvokeMember("Sheets", BindingFlags.GetProperty, null, WorkBook, null);
            WorkSheet = WorkBook.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, WorkBook, null);
            CurCharts = WorkSheet.GetType().InvokeMember("ChartObjects", BindingFlags.InvokeMethod, null, WorkSheet, null);
            CurChart = CurCharts.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, CurCharts, new object[] {PositionX, PositionY, Width, Height});
            _Chart = CurChart.GetType().InvokeMember("Chart", BindingFlags.GetProperty, null, CurChart, null);
            _Chart.GetType().InvokeMember("HasLegend", BindingFlags.SetProperty, null, _Chart, new object[] { false });
            _Chart.GetType().InvokeMember("ChartStyle", BindingFlags.SetProperty, null, _Chart, new object[] { ColorLine });

            SeriesCollection = _Chart.GetType().InvokeMember("SeriesCollection", BindingFlags.GetProperty, null, _Chart, null);
            _SeriesCollection = SeriesCollection.GetType().InvokeMember("NewSeries", BindingFlags.InvokeMethod, null, SeriesCollection, null);

            _SeriesCollection.GetType().InvokeMember("ChartType", BindingFlags.SetProperty, null, _SeriesCollection, new object[] { 4 /*xlLine*/});
            

            RangeX = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheet, new object[] { XValuesS + XValuesI + ":" + XValuesS + YValuesI });
            RangeY = WorkSheet.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheet, new object[] { YValues + XValuesI + ":" + YValues + YValuesI });

            ValX = _SeriesCollection.GetType().InvokeMember("XValues", BindingFlags.SetProperty, null, _SeriesCollection, new object[] { RangeX });
            ValY = _SeriesCollection.GetType().InvokeMember("Values", BindingFlags.SetProperty, null, _SeriesCollection, new object[] { RangeY });
        }



Вызываю так

Код: c#
1.
ex.CreateCharts("лист1", "B", 2, "C", 13, 0, 300, 400, 150, 5);


...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Расположение графика и верные данных оси Х и Y
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]