Farseer

导航

将查询结果导出到客户端的EXCEL中(一)

客户经常有这样的需求,要把查询的结果导出到客户端的Excel中。企业经常要分析一些数据,而通过界面操作得到的数据往往是杂乱无章的,没有统计意义,一些流水帐对客户来说是没有意义的。而给企业开发的报表往往不能完全满足客户的要求,这样将查询结果导出到客户端的Excel文件中,就成了一个企业软件的必须功能。

将查询结果导出到客户端Excel文件,我先后用了三种方式。最后舍弃了两种,采用了一种,三种方式各有利弊,不过前两种始终有问题没解决掉,所以才忍痛割爱的。

1.通过OWC(Offcie Web Component)将数据写到Excel中。
2.采用OleDB连接数据库的方式,类似于读写Sql Server 数据表格。
3.采用Excel.dll将数据写到Excel中
4.将DataGrid中的数据直接输出到客户端的Excel中

每种实现都很多内容,所以分成四篇文章连描述。这篇文章先来了解一下,通过OWC将数据写到Excel中的做法。

OWC,即Office Web Component. Office里面的一个组件。用于Offcie的网络设计,office2000带的是owc9版本,office2002是owc10版本,office2003,owc11。通过owc可以在网页上绘制图表等,我们只用它的其中一个功能,将内存中的数据通过OWC写到Excel中。安装了Offcice后就会有对应版本的OWC,添加引用

项目添加引用-〉com-〉Microsoft Office Web Component 9.0,这样在引用中就出现OWC了. 引用OWC,using OWC;


private string ExportToExcel(DataSet ds)
        
{
            
//设定制表日期
            string strCreateDate="建表日期:"+DateTime.Now;
            
//实例化Sheet实体
            SpreadsheetClass xlsheet= new SpreadsheetClass();

            xlsheet.ActiveCell.Cells[
1,4]="下载测试";    //标题
            xlsheet.ActiveCell.Cells[2,2]=strCreateDate; 

            
int offSet=1;

            
//生成的Excel的栏位名
            xlsheet.ActiveCell.Cells[4,offSet] = "销售部";offSet++;
            xlsheet.ActiveCell.Cells[
4,offSet] = "门店";offSet++;
            xlsheet.ActiveCell.Cells[
4,offSet] = "工号";offSet++;
            xlsheet.ActiveCell.Cells[
4,offSet] = "姓名";offSet++;

            
//循环插入每一行数据
            forint i=0;i<ds.Tables[0].Rows.Count;i++ )
            
{
                offSet
=1;
                xlsheet.ActiveCell.Cells[i
+5,offSet]="'"
                    
+ds.Tables[0].Rows[i]["SOG_ORG_NAME"].ToString().Trim();offSet++;
                xlsheet.ActiveCell.Cells[i
+5,offSet]="'"
                    
+ds.Tables[0].Rows[i]["OUT_SHORTNAME"].ToString().Trim();offSet++;
                xlsheet.ActiveCell.Cells[i
+5,offSet]="'"
                    
+ds.Tables[0].Rows[i]["StaffNumber"].ToString().Trim();offSet++;
                xlsheet.ActiveCell.Cells[i
+5,offSet]="'"
                    
+ds.Tables[0].Rows[i]["Name"].ToString().Trim();
            }


            
//得到下载路径
            string path = System.Configuration.ConfigurationSettings.AppSettings["UploadFilePath"].Trim();
            path 
= path+Guid.NewGuid().ToString()+".xls";
            
            
//保存文件到服务器中某个目录中
            xlsheet.ActiveSheet.Export(path,OWC.SheetExportActionEnum.ssExportActionNone);
            
return path;
            
        }


其中传入参数ds,是查询的结果。采用上述方法,就可以将查询的结果导出到Excel,并保存在服务器上。至于如何下载的客户端,将统一用一篇文章来叙述。

OWC的缺点比较明显,写的速度很慢,如果数据量稍大,则无法忍受。通过这种方式写成的Excel并不是真正的Excel格式的文件,只是存为了.xls的文本文件而已,类似于将网页另存为.xls文件的效果。

posted on 2005-02-28 19:55  佛西亚  阅读(2123)  评论(1)    收藏  举报