文章出處

大多數情況下,當我們說將圖表導出到Excel時,意思是將Chart當成圖片導出到Excel中。如果是這樣,你可以參考幫助文檔中保存和導出C1Chart章節

不過,也有另一種情況,當你想把圖表中的數據用文本格式導出到Excel時,應該怎么辦?本文就是針對這個需求提供的解決辦法,將C1Chart綁定的數據導出到Excel表單中。

綁定Chart數據

關于Chart數據綁定,你可以參考文檔。本文Demo中使用如下代碼進行數據綁定:

            DataTable dTable = new DataTable();
            dTable.Columns.Add("時間");
            dTable.Columns.Add("銷量");

                  
            DataRow dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "一月", 2000 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "二月", 3423 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "三月", 2394 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "四月", 5920 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "五月", 4302 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "六月", 5222 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "七月", 6213 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "八月", 7990 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "九月", 6928 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "十月", 5021 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "十一月", 4321 };
            dTable.Rows.Add(dRow);

            dRow = dTable.NewRow();
            dRow.ItemArray = new object[] { "十二月", 3232 };
            dTable.Rows.Add(dRow);
            
            c1Chart1.Data.ItemNameBinding = new Binding("時間");
            c1Chart1.Data.Children.Add(new DataSeries() { ValueBinding = new System.Windows.Data.Binding("銷量"), Name = "銷量" });
            c1Chart1.Data.ItemsSource = dTable.DefaultView;
            c1Chart1.ChartType = ChartType.Column;

            c1Chart1.View.AxisY.AutoMin = false;
            c1Chart1.View.AxisY.Min = 1000;
            c1Chart1.View.AxisY.AutoMax = false;
            c1Chart1.View.AxisY.Max = 8000;
            c1Chart1.View.AxisY.MajorUnit = 1000;

SL_Chart_DataExport

 

導出Chart數據

現在看來,除了遍歷Chart Element獲取數據,沒有別的辦法可以導出Chart數據了。通過AxisX UIElement集合中拿到TextBlock元素并讀取它的“Text”屬性以獲得標簽軸的數據。同樣的,檢索Bar Elements獲得每個系列數據然后讀取“DataPoint”屬性。實際執行請參考如下代碼:

public C1.Silverlight.Excel.C1XLBook ExportChartExcel(C1.Silverlight.Chart.C1Chart _chart)
{
   C1XLBook wb = new C1XLBook();
   wb.Sheets.Add("Chart Data");
 
   int _row = 1;
 
   IList<DependencyObject> _itemNameList = new List<DependencyObject>();
   VTreeHelper.GetChildrenOfType((_chart.View.AxisX as Panel), typeof(TextBlock), ref _itemNameList);
 
   wb.Sheets[0][0, 0].Value = "Month";
   foreach (var _itemNameObject in _itemNameList.ToList())
   {
      wb.Sheets[0][_row, 0].Value = (_itemNameObject as TextBlock).Text;
      _row += 1;
   }
 
   foreach (DataSeries _dataSeries in _chart.Data.Children)
   {
      _row = 1;
      wb.Sheets[0][_row - 1, 1].Value = _dataSeries.Name;
 
      IList<DependencyObject> _seriesChildObject = new List<DependencyObject>();
      VTreeHelper.GetChildrenOfType((_dataSeries as Panel), typeof(Bar), ref _seriesChildObject);
 
      foreach (var cvl in _seriesChildObject.ToList())
      {
         wb.Sheets[0][_row, 1].Value = (cvl as Bar).DataPoint.Value;
         _row += 1;
      }
   }
 
   return wb;
}

SL_Chart_DataExport_Excel

以上只是一個實現辦法,僅供參考。我相信程序猿們在面對不同需求時,還會有各自的修改和實現辦法。根據不同的要求,獲取不同的值。完整示例請參考如下Demo:


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()