The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
posts - 306, comments - 2046, trackbacks - 78, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

下面的代码使用一个现有的统计图Excel文件,加载这个文件,设置某一项的值和统计图的表示方式,然后保存到另一个Excel文件里。如果是VS2005+Office2003,也可以选择使用Visual Studio Tools for Office来作。

Excel.Application m_objExcel = null;

Excel._Workbook m_objBook = null;

Excel._Chart m_objChart = null;

Excel.ChartGroup m_objChartGroup = null;

Excel.Series m_objSeries = null;

object m_objOpt = System.Reflection.Missing.Value;

try

{

        m_objExcel = new Excel.Application();

        m_objBook = m_objExcel.Workbooks.Open("z:\\Book11.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

        m_objChart = (Excel._Chart)m_objExcel.Charts.get_Item(1);

        m_objChart.BarShape = Excel.XlBarShape.xlCylinder;

        m_objChartGroup = (Excel.ChartGroup)m_objChart.ChartGroups(1);

        m_objSeries = (Excel.Series)m_objChartGroup.SeriesCollection(1);

                               

        m_objSeries.Values = 456;

        m_objExcel.DisplayAlerts = false;

 

        m_objBook.SaveAs("z:\\Book2.xls", m_objOpt, m_objOpt,

                                        m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,

                                m_objOpt, m_objOpt, m_objOpt, m_objOpt);

 

                        }

catch (Exception ex)

{

        MessageBox.Show(ex.Message);

}

finally

{

        m_objBook.Close(m_objOpt, m_objOpt, m_objOpt);

        m_objExcel.Workbooks.Close();

 

        m_objExcel.Quit();

                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);

                                System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);

        m_objBook = null;

        m_objExcel = null;

        GC.Collect();

        this.Close();

}

源Excel文件中的统计图:

经过代码处理后保存的统计图:

Feedback

#1楼  回复 引用   

2007-01-05 14:45 by 韩[未注册用户]
Excel.Chart = (Excel.Chart)workSheet.ChartObjects(1);

我引用的是Microsoft Excel 11.0 object, vs 2003里面。我的一个已经存在的Excel里面已经存在一个很复杂的chart图,现在我用上面的语法获取这个chart对象就是不能成功获取。

上面的语法报错说 类型转换不正确。

兄弟,知道为什么吗?

#2楼[楼主]  回复 引用 查看   

2007-01-05 14:55 by Cure      
你的Chart是放在一个WorkSheet内的吗?还是单独的一个ChartSheet?试试在类型转换的时候用
m_objChart = (Excel._Chart)m_objExcel.Charts.get_Item(1);

#3楼  回复 引用   

2007-02-07 10:42 by sas[未注册用户]
如何让统计图显示在C# 控件中。
我是菜鸟,帮帮忙!!

#4楼[楼主]  回复 引用 查看   

2007-02-07 11:33 by Cure      
@sas
C#里有个AxWebBrowser控件,可以在winform中用这个控件打开Excel文件

#5楼  回复 引用   

2007-07-30 22:04 by wk[未注册用户]
m_objChart = (Excel._Chart)m_objExcel.Charts.get_Item(1);


按你上面做的总是这句出错????

#6楼  回复 引用   

2007-07-30 22:05 by wk[未注册用户]
无效索引。 (异常来自 HRESULT:0x8002000B (DISP_E_BADINDEX))错误提示~~大哥在线等你啊

#7楼  回复 引用   

2007-07-30 22:06 by wk[未注册用户]
VS2005+offices2003做的

#8楼[楼主]  回复 引用 查看   

2007-07-31 09:13 by Cure      
@wk
能不能给出你的代码?上面提供的内容不好判断错误

#9楼  回复 引用   

2007-08-03 18:25 by wk[未注册用户]
m_objChart = (Excel._Chart)m_objExcel.Charts.get_Item(1);


能否对内嵌图表操作?

#10楼  回复 引用   

2007-08-03 18:26 by wk[未注册用户]
上楼大哥等你几个星期了`~~....

#11楼  回复 引用 查看   

2008-04-23 20:43 by 留恋星空      
mark

#12楼  回复 引用 查看   

2008-11-21 15:06 by 沧海一声笑      
无效索引 我碰到的情况是 sheet的名称弄错了,对应上就可以了!

#13楼  回复 引用 查看   

2009-12-20 23:52 by fjk2009      
引用沧海一声笑: 无效索引 我碰到的情况是 sheet的名称弄错了,对应上就可以了!


我也是出现无效索引
那个参数1是代表sheet1吗?

#14楼  回复 引用 查看   

2009-12-21 10:34 by fjk2009      
m_objChart = (Excel._Chart)m_objExcel.Charts.get_Item(1);
这一行报错啊,说是无效索引啊
楼主怎么回事?能否解释下的?