2016-01-04 6 views
0

У меня есть шаблон excel со следующими двумя столбцами период и точки, тренд.период и тренда. Точки представляют собой интеллектуальный маркер, который представляет данные.Создайте диаграмму excel из smart marker aspose

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 с помощью интеллектуального маркера? enter image description here

ответ

2

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

например

Пример кода:

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.

+0

Hi Amjad, следующий вопрос, можем ли мы скрыть эту таблицу, если у нее нет данных? Эта таблица относится к большой электронной таблице, а на листе содержится более 20 таблиц, подобных этому, и мой клиент хочет скрыть эти пустые таблицы. Это выполнимо? Насколько я знаю, я могу поместить каждую таблицу в отдельный лист, но в некоторых случаях может генерировать более 10 листов. – Yan

+0

Вы хотите сказать, чтобы скрыть Smart Markers, например «& = Trend.Period» и «& = Trend.Points» в ячейках? Ну, если в базовой таблице нет записи, Smart Markers будут удалены из этих ячеек (A2 и B2). И если вам не нужно создавать диаграмму, если в таблице данных нет записи, вы можете просто проверить (в своем коде), используя атрибут DataTable.Rows.Count, если таблица пуста, поэтому вам не следует создавать диаграмму через API Aspose.Cells. –

+0

Я имею в виду, например, если в моем листе 15 таблиц, если в одной таблице нет данных, можем ли мы скрыть это? Клиент говорит, что это раздражает видеть эти пустые таблицы, потому что на веб-странице мы динамически скрываем эти таблицы в соответствии с настройками каждого пользователя. – Yan