2017-10-08 168 views
0

我正在編寫一個簡單的應用程序,它接受一個文本文件,將其轉換爲數據表,對其執行少量操作,然後轉換爲Excel工作表並繪製圖表。 爲了實現這個目標,我使用EPPlus 4.1.0用EPPlus編輯excel圖表的圖例

下面是我用繪製圖表的方法的代碼:

public static ExcelPackage DrawChartTwoAxis(this ExcelPackage package) 
    { 
     if (package.Workbook.Worksheets.FirstOrDefault(ws => ws.Name == "Wykresy") != null) 
     { 
      package.Workbook.Worksheets.Delete("Wykresy"); 
     } 
     ExcelWorksheet worksheetWithCharts = package.Workbook.Worksheets.Add("Wykresy"); 

     ExcelWorksheet worksheetWithData = package.Workbook.Worksheets["Dane"]; 

     var numberOfRows = package.Workbook.Worksheets["Dane"].Dimension.End.Row; 
     var maxColumnLetter = package.Workbook.Worksheets["Dane"].Dimension.End.Address.ToCharArray()[0]; 
     var numberofColumns = package.Workbook.Worksheets["Dane"].Dimension.End.Column; 

     ExcelChart chart = worksheetWithCharts.Drawings.AddChart("Zgrubny wykres", eChartType.LineMarkers); 
     var chartType2 = chart.PlotArea.ChartTypes.Add(eChartType.LineMarkers); 
     chartType2.UseSecondaryAxis = true; 

     Random rand = new Random(); 

     for (int i = 2; i <= numberofColumns; i++) 
     { 
      if (worksheetWithData.Cells[1, i].Text.ToLower().Contains("pttk") || 
       worksheetWithData.Cells[1, i].Text.ToLower().Contains("pt100")) 
      { 
       var serie = chart.Series.Add(worksheetWithData.Cells[2, i, numberOfRows, i], 
        worksheetWithData.Cells[$"A2:A{numberOfRows}"]); 
       serie.Border.Fill.Color = System.Drawing.Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)); 
       serie.HeaderAddress = worksheetWithData.Cells[1, i]; 
      } 
      else 
      { 
       var serie = chartType2.Series.Add(worksheetWithData.Cells[2, i, numberOfRows, i], 
        worksheetWithData.Cells[$"A2:A{numberOfRows}"]); 
       serie.Border.Fill.Color = System.Drawing.Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0, 256)); 
       serie.HeaderAddress = worksheetWithData.Cells[1, i]; 
      } 
     } 
     return package; 

這種方法對於處理ExcelPackage較大的管道​​的一部分,這就是爲什麼有沒有調用Save()或Dispose()方法。

問題是,在圖表的圖例中,儘管將Header屬性設置爲其他值,但所有系列都標記爲「列A」,「列B」等。無論我明確指定Header名稱還是HeaderAdress,它的工作原理都是一樣的。

如何將圖例標籤更改爲我的自定義名稱?或者EPPlus是不可能的 - 有沒有其他的框架具有這種功能?注意:如果重要,我使用OpenOffice 4打開了創建的.xlsx文件,但我沒有Microsoft Office的權限。

另外 - 我設法爲我的系列着色,儘管EPPlus說它是不可能的。你能告訴我我用Border.Fill.Color做了什麼顏色?

回答

0

1號路)遍歷所有的列一樣,

//ws is your excel sheet 
    //in cells you put the column 
    ws.Cells["A1"].Value = "the column name"; 
ws.Cells["B1"].Value = "the column name"; 

...

您可以創建一個數據表與列名第二路) 你想,那麼你填充你的數據,然後像下面加載它

//ws is your excel sheet 
//MyDt is your DataTable 
ws.Cells["A1"].LoadFromDataTable(MyDt, true);