最近再做问卷的自动处理程序,研究了一个星期的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;
}
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 ;
newchart.ChartStyle = 26 ;
这个是用不了的,03里面没有三维彩色样式,好像ChartSytle都没有。另外
if
(chartType
==
XlChartType.xlColumnClustered)
这个编译通不过,不知道怎么回事