在excel中draw chart倒不是特别难,可是要画复杂还是要费点周折,下面的这个展示同比图表的函数就是我费了将近两天的时间才实现的,查了很多资料,详尽了很多办法,才让我满意!
private bool SaveChartToExcel(Excel.Workbook wb, Excel.Application tApp)
{
Excel.Worksheet xlChartSheet = (Excel.Worksheet)wb.Worksheets.Add(
Type.Missing, wb.Sheets[wb.Sheets.Count], Type.Missing, Type.Missing);
xlChartSheet.Name = "图形";
Excel.Chart xlChart = (Excel.Chart)wb.Charts.Add(
Type.Missing, wb.Worksheets[wb.Worksheets.Count], Type.Missing, Type.Missing);
try
{
for (int i = 0; i < m_axChartSpace.Charts.Count; i++)
{
OWC.Worksheet xlSpread = (OWC.Worksheet)m_axSpreadSheet.ActiveSheet;
//选中行头,然后粘贴到新增加的表中
xlSpread.get_Range(xlSpread.Cells[1, 1],
xlSpread.Cells[m_Rows + m_HeaderRows, m_HeaderCols]).Select();
xlSpread.Cells.Copy(Type.Missing);
xlChartSheet.Paste(Type.Missing, Type.Missing);
//选中数据区域和画图的列,并粘贴到新表中
xlSpread.get_Range(xlSpread.Cells[m_ChartRow, m_ChartCol],
xlSpread.Cells[m_Rows + m_HeaderRows, m_ChartCol2]).Select();
xlSpread.Cells.Copy(Type.Missing);
Excel.Range rng1 = xlChartSheet.get_Range(xlChartSheet.Cells[m_ChartRow , m_HeaderCols], xlChartSheet.Cells[m_Rows + m_HeaderRows, m_HeaderCols]);
Excel.Range rng2 = xlChartSheet.get_Range(xlChartSheet.Cells[m_ChartRow, m_ChartCol], xlChartSheet.Cells[m_Rows + m_HeaderRows, m_ChartCol2]);
Excel.Range rng = tApp.Union(rng1, rng2, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
//xlChart .HasAxis(xlValue, xlPrimary) = True;
//xlChart.HasAxis(xlValue, xlSecondary) = True;
xlChart.SetSourceData(rng, Excel.XlRowCol.xlColumns);
//((Excel.Series)xlChart.SeriesCollection(3)).XValues = xlChartSheet.get_Range(xlChartSheet.Cells[m_ChartRow, m_ChartCol2], xlChartSheet.Cells[m_Rows + m_HeaderRows, m_ChartCol2]);
xlChart.set_HasAxis(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary ,Type.Missing);
xlChart.set_HasAxis(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlSecondary , Type.Missing);
((Excel.Series)xlChart.SeriesCollection(1)).ChartType = Excel.XlChartType.xlLineMarkers;
((Excel.Series)xlChart.SeriesCollection(2)).ChartType = Excel.XlChartType.xlLineMarkers;
((Excel.Series)xlChart.SeriesCollection(3)).ChartType = Excel.XlChartType.xlColumnClustered;
Excel.Series s0 = ((Excel.Series)xlChart.SeriesCollection(3));
s0.AxisGroup = Excel.XlAxisGroup.xlSecondary ;
//((Excel.Series)xlChart.SeriesCollection(3)).AxisGroup = true;
xlChart.PlotArea.Fill.TwoColorGradient(
Microsoft.Office.Core.MsoGradientStyle.msoGradientHorizontal, 2);
xlChart.PlotArea.Fill.ForeColor.SchemeColor = 12;
xlChart.PlotArea.Fill.BackColor.SchemeColor = 36;
xlChart.ChartArea.Font.Size = 9;
xlChart.Location(Excel.XlChartLocation.xlLocationAsObject,
xlChartSheet.Name);
}
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}