最近再做问卷的自动处理程序,研究了一个星期的EXCEL图表,终于实现了大部分想要的功能(选定数据区域绘制图表、图表位置的调整、图表样式的调整),以下为图表绘制部分的主要代码,备忘一下(chart放在选定数据区域的正下方,缺省大小、采用EXCEL 2007最漂亮的三维样式)。
// 要先在程序中引用Microsoft Excel 12.0 Object Library using Microsoft.Office.Interop.Excel; // sheet,数据所在工作表;oResizeRange,数据区域(可以包含标题);chartType,图表类型;alter,数据行列切换开关 private void autoDrawChart(Worksheet sheet, Range oResizeRange, XlChartType chartType, XlRowCol alter, string title) { //创建图表 Chart newchart = (Chart)((Workbook)sheet.Parent).Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); newchart.ChartWizard(oResizeRange, chartType, 6, alter, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //移动图表到数据所在工作表 newchart.HasTitle = true; if (title != "") { try { newchart.ChartTitle.Text = title; } catch (Exception e) { //郁闷,Chart设置Title有时是好的,有时候出错,不知道是哪里出了问题,只好截获异常处理。似乎是HasTitle的赋值有时不成功。 } } //如果是单行的柱状图,不显示序列值,并依数据点着色 if (chartType == XlChartType.xlColumnClustered) { newchart.HasLegend = false; ((ChartGroup)newchart.ChartGroups(1)).VaryByCategories = true; } //设置图表样式为彩色三维样式 newchart.ChartStyle = 26; newchart.Location(XlChartLocation.xlLocationAsObject, sheet.Name); //移动位置到相关数据的正下方 ChartObject curshape = (ChartObject)sheet.ChartObjects(sheet.Application.ActiveChart.Name.Replace(sheet.Name + " ", "")); curshape.Left = Single.Parse(oResizeRange.Left.ToString()); curshape.Top = Single.Parse(oResizeRange.Top.ToString()) + Single.Parse(oResizeRange.Height.ToString()); //改成圆角图表 curshape.RoundedCorners = true; }
Excel 2003代码基本相同,但是
// 设置图表样式为彩色三维样式 newchart.ChartStyle = 26 ;这个是用不了的,03里面没有三维彩色样式,好像ChartSytle都没有。另外
if (chartType == XlChartType.xlColumnClustered)这个编译通不过,不知道怎么回事