文章出處
文章列表
大多數情況下,當我們說將圖表導出到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;
導出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; }
以上只是一個實現辦法,僅供參考。我相信程序猿們在面對不同需求時,還會有各自的修改和實現辦法。根據不同的要求,獲取不同的值。完整示例請參考如下Demo:
文章列表
全站熱搜