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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2020, 13:15   #1
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию Указано измерение, недопустимое для текущего типа диаграммы.

Прошу извинить, я не знаю форумов по c# + excel. Может быть вы посоветуете что-нибудь.
Пытаюсь сделать график смешанного типа с дополнительной осью.
В пробном варианте код работал ("умная таблица" называлась по другому, столбцы другие... не существенно). А сейчас выдает ошибку. В лучшем случае "Указано измерение, недопустимое для текущего типа диаграммы."
Причем, если закомментировать строки относящиеся ко второй оси, график смешанного типа строится и сейчас без проблем.
Заменить метод xlCharts.Add(10, 10, 1000, 500) на this.Shapes.AddChart(XlChartType.xl Line, 10, 10, 1000, 500).Chart.Parent пробовал. Не помогает. В чемеще может быть проблема?
Код:
   /// <summary>
   /// Описание ряда данных
   /// </summary>
   internal class ChartSeries {
      private static String SourceTable { get; } = "financeResultsListObject";
      private static String XVauesColumn { get; } = "1";

      internal Series Series { get; set; }
      internal String SeriesName { get; set; }
      internal String ValuesColumn { get; set; }
      internal XlAxisGroup XlAxisGroup { get; set; }
      internal XlRgbColor XlRgbColor { get; set; }

      internal Range GetXValues() => Globals.Лист10.Range[SourceTable + "[" + XVauesColumn + "]"];

      internal Range GetValues() => Globals.Лист10.Range[SourceTable + "[" + ValuesColumn + "]"];
   }

   public partial class Лист11
   {
      public object typeMissing = System.Type.Missing;

      internal List<ChartSeries> chartSeriesCollection = new List<ChartSeries>();

      private void Лист11_Startup(object sender, System.EventArgs e)
      {
         InitChartSeriesCollection();
         FinanceResultsChart();
      }

      
      /// <summary>
      /// Создание коллекции рядов данных
      /// </summary>
      private void InitChartSeriesCollection() 
      {
         chartSeriesCollection.Add(new ChartSeries { XlAxisGroup = XlAxisGroup.xlPrimary,   XlRgbColor = XlRgbColor.rgbRed,       SeriesName = "20",     ValuesColumn = "20" });
//-- ряд данных для второй оси ----------------------------
         chartSeriesCollection.Add(new ChartSeries { XlAxisGroup = XlAxisGroup.xlSecondary, XlRgbColor = XlRgbColor.rgbGreen,       SeriesName = "4",    ValuesColumn = "4" });
      }

      public void FinanceResultsChart()
      {
         ChartObjects xlCharts = (ChartObjects)this.ChartObjects();
         ChartObject xlChart = xlCharts.Add(10, 10, 1000, 500);
         Chart chart = xlChart.Chart;
         chart.HasTitle = true;
         chart.ChartTitle.Text = "test";
         chart.ChartType = XlChartType.xlLine;

         SeriesCollection seriesCollection = (SeriesCollection)chart.SeriesCollection();
         foreach (ChartSeries item in chartSeriesCollection)
         {
            item.Series = seriesCollection.NewSeries();
            item.Series.XValues = item.GetXValues();
            item.Series.Values = item.GetValues();
            item.Series.Name = item.SeriesName;
//-- Ошибку выдает следующая строка ----------------------------
            item.Series.AxisGroup = item.XlAxisGroup;
            item.Series.ChartType = (item.XlAxisGroup == XlAxisGroup.xlPrimary) ? XlChartType.xlLine : XlChartType.xlColumnClustered;
            if (item.Series.ChartType == XlChartType.xlLine)
            {
               item.Series.Format.Line.ForeColor.RGB = (int)item.XlRgbColor;
               item.Series.Format.Line.BackColor.RGB = (int)item.XlRgbColor;
            }
            else if (item.Series.ChartType == XlChartType.xlColumnClustered) 
            {
               item.Series.Interior.Color = (int)item.XlRgbColor;
            }
         }

         Axis xAxis = (Axis) chart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);
         xAxis.HasTitle = true;
         xAxis.AxisTitle.Text = "Период";
         xAxis.TickLabelPosition = XlTickLabelPosition.xlTickLabelPositionLow;

         Axis yAxisPrimary = (Axis) chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
         yAxisPrimary.HasTitle = true;
         yAxisPrimary.AxisTitle.Text = "Руб.";

//-- вторая ось ----------------------------
         Axis yAxisSecondary = (Axis) chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlSecondary);
         yAxisSecondary.HasTitle = true;
         yAxisSecondary.AxisTitle.Text = "Лот";

      }
zw2auP&#j29! вне форума Ответить с цитированием
Старый 21.12.2020, 14:13   #2
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию

Причина найдена.
Код:
      private void Лист10_Startup(object sender, System.EventArgs e)
      {
         for (int i = 4; i < 31; i++)
         {
            this.Columns[i].Hidden = true;
         }
         this.Columns[20].Hidden = false;
      }
Нельзя скрывать столбцы таблицы с данными до создания графика.
zw2auP&#j29! вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Недопустимое сочетание спецификаторов типа. Catrine.brusnika Помощь студентам 5 23.01.2019 11:00
Недопустимое имя столбца student772 Общие вопросы C/C++ 3 04.01.2019 16:19
Shell. Распечатать для текущего каталога гистограмму Nightway Помощь студентам 3 22.04.2017 22:14
требуется программист для текущего проекта - PHP, Apache Niknikolay Фриланс 6 23.07.2015 22:18
Получение индекса текущего элемента по OnSelectedIndexChanged для CheckBoxList varb ASP.NET 2 23.10.2011 22:24