2016-01-04 52 views
0

我有一個excel模板,包含以下兩列週期和點,trend.period和trend.points是代表數據的aspose智能標記。從智能標記生成excel圖表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

您可以使用Aspose.Cells的智能標記功能完成任務。您只需根據插入到單元格中的智能標記創建命名範圍即可。我已經使用Aspose.Cells API爲您的需求編寫了示例代碼。請參考它,您可以根據需要添加/更新代碼段。

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。

+0

Hi Amjad,後續問題,如果它沒有數據,我們可以隱藏這張表嗎?此表屬於一個大電子表格,並且工作表包含超過20個這樣的表格,而我的客戶希望隱藏這些空表格。它可行嗎?據我所知,我可以把每張桌子放在一張單獨的紙上,但在某些情況下可能會生成10張以上的紙張。 – Yan

+0

您的意思是說隱藏智能標記,例如單元格中的「&= Trend.Period」和「&= Trend.Points」?那麼,如果在底層表中沒有記錄,智能標記將從這些單元格中移除(A2和B2)。而且,如果您在數據表中沒有記錄時不需要創建圖表,則可以使用DataTable.Rows.Count屬性(如果表格爲空)來檢查(在您的代碼中),因此您不應該通過Aspose.Cells API。 –

+0

我的意思是,例如,如果我的工作表中有15個表格,如果一個表格沒有數據,我們可以隱藏它嗎?客戶說,看到這些空表很煩人,因爲在網頁上我們根據每個用戶的設置動態地隱藏這些表。 – Yan