Создать диаграмму excel из смарт-маркера

У меня есть шаблон Excel со следующими двумя столбцами: период и точки: trend.period и trend.points — это смарт-маркеры, представляющие данные.

Period          Points
&=trend.period  &=trend.points

Созданная таблица приведена ниже.

Period  Points
4Q'14   27
1Q'15   0
2Q'15   0
3Q'15   0
4Q'15   200

Легко создать столбчатую диаграмму для таблицы 2, как создать такую ​​же диаграмму для таблицы 1 с помощью интеллектуального маркера? введите здесь описание изображения


person Yan    schedule 04.01.2016    source источник


Ответы (1)


Вы можете выполнить эту задачу, используя функцию Smart Markers Aspose.Cells. Все, что вам нужно сделать, это создать именованные диапазоны на основе ваших смарт-маркеров, вставленных в ячейки. Я написал пример кода с использованием API Aspose.Cells для ваших требований. Пожалуйста, обратитесь к нему, и вы можете добавить/обновить сегмент кода в соответствии с вашими потребностями.

e.g

Образец кода:

  DataTable dt = new DataTable("Trend");
        dt.Columns.Add("Period", typeof(string));
        dt.Columns.Add("Points", typeof(int));

        DataRow row = dt.NewRow();
        row[0] = "4Q'14";
        row[1] = 27;
        dt.Rows.Add(row);

        row = dt.NewRow();
        row[0] = "1Q'15";
        row[1] = 0;
        dt.Rows.Add(row);

        row = dt.NewRow();
        row[0] = "2Q'15";
        row[1] = 0;
        dt.Rows.Add(row);

        row = dt.NewRow();
        row[0] = "3Q'15";
        row[1] = 0;
        dt.Rows.Add(row);

        row = dt.NewRow();
        row[0] = "4Q'15";
        row[1] = 200;
        dt.Rows.Add(row);


        WorkbookDesigner wd = new WorkbookDesigner();

        //Create a designer workbook
        Workbook workbook = new Workbook();
        Worksheet worksheet = workbook.Worksheets[0];
        worksheet.Cells["A1"].PutValue("Period");
        worksheet.Cells["A2"].PutValue("&=Trend.Period");

        worksheet.Cells["B1"].PutValue("Points");
        worksheet.Cells["B2"].PutValue("&=Trend.Points");

        Range range1 = worksheet.Cells.CreateRange("A2:A2");
        range1.Name = "RANGE1";
        Range range2 = worksheet.Cells.CreateRange("B2:B2");
        range2.Name = "RANGE2";

        wd.Workbook = workbook;

        wd.SetDataSource(dt);
        wd.Process();

        //Create chart
        int chartIndex = worksheet.Charts.Add(ChartType.Column, 5, 2, 29, 10);
        Chart chart = worksheet.Charts[chartIndex];

        //Obtain the updated ranges after processing smart markers
        var r1 = workbook.Worksheets.GetRangeByName("RANGE1");
        var r2 = workbook.Worksheets.GetRangeByName("RANGE2");

        MessageBox.Show(r2.RefersTo);
        //Add the nseries collection to a chart 
        chart.NSeries.Add(r2.RefersTo, true);
        //Get or set the range of category axis values
        chart.NSeries.CategoryData = r1.RefersTo;
        chart.NSeries.IsColorVaried = true;


        wd.Workbook.Save("e:\\test2\\out1chart1.xlsx");

Я работаю разработчиком поддержки / евангелистом в Aspose.

person Amjad Sahi    schedule 05.01.2016
comment
Привет Амджад, дополнительный вопрос, можем ли мы скрыть эту таблицу, если в ней нет данных? Эта таблица принадлежит большой электронной таблице, и лист содержит более 20 таких таблиц, и мой клиент хочет скрыть эти пустые таблицы. Это выполнимо? Насколько мне известно, я могу поместить каждую таблицу на отдельный лист, но в некоторых случаях это может привести к созданию более 10 листов. - person Yan; 06.01.2016
comment
Вы хотите сказать, чтобы скрыть интеллектуальные маркеры, например, &=Trend.Period и &=Trend.Points в ячейках? Что ж, если в базовой таблице нет записи, смарт-маркеры будут удалены из этих ячеек (A2 и B2). И, если вам не нужно создавать диаграмму, если в таблице данных нет записи, вы можете просто проверить (в своем коде) с помощью атрибута DataTable.Rows.Count, если таблица пуста, поэтому вы не должны создавать диаграмму через API-интерфейсы Aspose.Cells. - person Amjad Sahi; 07.01.2016
comment
Я имею в виду, например, если на моем листе 15 таблиц, если в одной таблице нет данных, можем ли мы скрыть это? Клиент говорит, что его раздражает видеть эти пустые таблицы, потому что на веб-странице мы динамически скрываем эти таблицы в соответствии с настройками каждого пользователя. - person Yan; 07.01.2016
comment
Что ж, вы можете скрыть соответствующие строки/столбцы на листе с помощью API-интерфейсов Aspose.Cells, если это немного поможет, см. тему (aspose.com/docs/display/cellsnet/) для справки. Кроме того, в смарт-маркерах нет такой функции для автоматического скрытия этих пустых таблиц/данных при импорте, поэтому для выполнения задачи вам придется делать это вручную с помощью API-интерфейсов Aspose.Cells. - person Amjad Sahi; 07.01.2016