将查询结果导出到客户端的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++;
//循环插入每一行数据
for( int 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文件的效果。
将查询结果导出到客户端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++;
//循环插入每一行数据
for( int 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文件的效果。

浙公网安备 33010602011771号