学习是为了生活!
我学习,我进步,所以我快乐!

在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;
            }
        }

posted on 2007-02-01 14:19  Emma  阅读(6885)  评论(1编辑  收藏  举报