将DataSet中的数据写入Excel(C#)

刑天 发表于 2006-07-24 22:23:53

有这样的任务,通过ADO.NET从数据库读取数据到DataSet,数据绑定到DataGrid或者.NET2.0里的新控件DataGridView,最后将数据写入Excel文件,提供给用户进一步的分析,如打印、图表等。程序最终运行如下:


前面的步骤都很简单,关键是写Excel,毕竟Excel不是数据格式,在C#中调用Excel表格要使用到Excel的COM组件。如果你装的Office2000 ,在"C:\Program   Files\Microsoft   Office\Office"可以找到这个COM组件"EXCEL9.OLB",这些COM组件都是非受管代码的,要在C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的类库。所以在用C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。在DOS命令行下键入:
  tlbimp   excel9.olb
这样在excel9.olb目录下就产生了三个DLL文件:"Excel.dll"、"Office.dll"、"VBIDE.dll"。
但Office2000以后的版本没有*.olb文件,对2003可以直接到OFFICE安装目录,利用.net 中带的工具在命令提示符下执行:
tlbimp excel.exe
还是会生成Excel.dll,在工程中引用这个文件就可以了。
这样与Excel有关的类都加了进来,别忘了在namespace里添加using Excel
窗体上添加一个按钮,对Click事件方法如下:
private void button1_Click(object sender, EventArgs e)
        {
            int count = this.archiverdbDataSet.channel.Rows.Count;//获取数据表中DataRow行总数
            int column = this.archiverdbDataSet.channel.Columns.Count;//获取数据表中列总数
            Excel.ApplicationClass excelapp = new ApplicationClass();
            //Make Excel Application Visible
            excelapp.Visible = true;
            //写入特定文件
            //Excel.Workbook wb = excelapp.Workbooks.Open(string filename,
            //    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);
            Excel.Workbook wb = excelapp.Application.Workbooks.Add(true);
            for (int x = 1; x <= count; x++)
            {
                for (int y = 1; y <= column; y++)
                {
                    excelapp.Cells[x, y] = this.archiverdbDataSet.channel.Rows[x- 1].ItemArray[y - 1];
                }
            }
            string tname = "C:\Book2.xls";
            wb.SaveAs(tname, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            try
            {
                wb.Saved = true;
                excelapp.UserControl = false;
                //excelapp.Quit();
            }
            catch(System.Exception op)
            {
                MessageBox.Show("wrong" + op.Message);
            }
        }
以上在VS.net 2005里测试通过。当然你还可以把Excel做的漂亮点,参考文档有例子,不过没试过。
参考文档:
关键词(Tag): c# excel .net 2.0 dataset


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定