C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例
程序员文章站
2023-11-08 15:06:28
本文实例讲述了c#实现dataset内数据转化为excel和word文件的通用类。分享给大家供大家参考,具体如下:
前不久因为项目的需要写的一个c#把dataset内数据...
本文实例讲述了c#实现dataset内数据转化为excel和word文件的通用类。分享给大家供大家参考,具体如下:
前不久因为项目的需要写的一个c#把dataset内数据转化为excel和word文件的通用类,这些关于excel、word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后 生成xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。 最后请引用office相应com组件,导出excel对象的一个方法要调用其中的一些方法和属性。
using system; using system.collections; using system.componentmodel; using system.data; using system.web; using system.web.sessionstate; using system.web.ui; using system.web.ui.webcontrols; using system.web.ui.htmlcontrols; using system.io; using system.windows.forms; using microsoft.office.interop.excel; using microsoft.office.interop.word; using microsoft.office.core; using owc=microsoft.office.interop; using system.reflection; using system.text; namespace caonline.zwdb.dfobject { /// <summary> /// exportfiles 的摘要说明。 /// 作用:把dataset数据集内数据转化为excel、word文件 /// 描述:这些关于excel、word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后 /// 生成xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。 /// 备注:请引用office相应com组件,导出excel对象的一个方法要调用其中的一些方法和属性。 /// </summary> public class exportfiles { /// <summary> /// /// </summary> /// #region //构造函数 public exportfiles() { // // todo: 在此处添加构造函数逻辑 // } #endregion /// <summary> /// 调用excel.dll导出excel文件 /// </summary> /// <param name="ds"></param> /// #region // 调用excel.dll导出excel文件 /// <summary> /// /// </summary> /// <param name="ds">dataset数据庥</param> /// <param name="duser">登录用户(如session["username"].tostring())可为null或空</param> /// <param name="titlename">添加一个报表标题</param> /// <param name="filepath">指定文件在服务器上的存放地址(如:server.mappath("."))可为null或空</param> /// /// 为什么在这里设置个filepath? /// 原因如下:filepath接收的内容是server.mappath(".")这个参数值,这个值在这本类中对 /// system.web.httpserverutility hserver=new system.web.httpserverutility()的引用出错,因为没有继承page类 /// 所以只能以传值的形式调用了,你有好的办法可以修改,那就再好不过了! public void datasettoexcel(dataset ds,string duser,string titlename,string filepath) { //microsoft.office.interop.owc11() appowc=new microsoft.office.interop.owc11(); owc.owc11.spreadsheetclass xlsheet=new microsoft.office.interop.owc11.spreadsheetclass(); #region //屏蔽内容 ///本来想用下面的这个办法实现的,可在iis中必须设置相关的权限 ///所以就放弃了,把代码设置为屏蔽内容,供学习参考! /// // microsoft.office.interop.excel.application app=new microsoft.office.interop.excel.application(); // // if(app==null) // { // throw new exception("系统调用错误(excel.dll)"); // } // app.application.workbooks.add(true); // workbookclass obook=new workbookclass(); // worksheetclass osheet=new worksheetclass(); // // //定义表对象与行对象,同时用dataset对其值进行初始化 // system.data.datatable dt=ds.tables[0]; // osheet.get_range(app.cells[1,1],app.cells[10,15]).horizontalalignment=owc.owc11.xlhalign.xlhaligncenter; // datarow[] myrow=dt.select(); // int i=0; // int cl=dt.columns.count; // //取得数据表各列标题 // for(i=0;i<cl;i++) // { // app.cells[1,i+1]=dt.columns[i].caption.tostring(); // //app.cells.addcomment(dt.columns[i].caption.tostring()); // //osheet.cells.addcomment(dt.columns[i].caption.tostring()); // //app.cells=dt.columns[i].caption.tostring(); // //osheet.get_range(app.cells,app.cells).horizontalalignment= // //app.cells.addcomment=dt.columns[i].tostring(); // //osheet.get_range(app.cells,app.cells).horizontalalignment= // } #endregion //定义表对象与行对象,同时用dataset对其值进行初始化 system.data.datatable dt=ds.tables[0]; datarow[] myrow=dt.select(); int i=0; int col=1; int colday=col+1; int colsecond=colday+1; int colnumber=colsecond+1; int cl=dt.columns.count; string userfile=null; //合并单元格 xlsheet.get_range(xlsheet.cells[col,col],xlsheet.cells[col,cl]).set_mergecells(true); //添加标题名称 if(titlename=="" || titlename==null) xlsheet.activesheet.cells[col,col]="添加标题处(高级报表)"; else xlsheet.activesheet.cells[col,col]=titlename.trim(); //判断传值user是否为空 if(duser=="" || duser==null) userfile="dfsoft"; else userfile=duser; //设置标题大小 xlsheet.get_range(xlsheet.cells[col,col],xlsheet.cells[col,cl]).font.set_size(13); //加粗标题 xlsheet.get_range(xlsheet.cells[col,col],xlsheet.cells[col,cl]).font.set_bold(true); xlsheet.get_range(xlsheet.cells[colsecond,col],xlsheet.cells[colsecond,cl]).font.set_bold(true); //设置标题水平居中 xlsheet.get_range(xlsheet.cells,xlsheet.cells).set_horizontalalignment(owc.owc11.xlhalign.xlhaligncenter); //设置单元格宽度 //xlsheet.get_range(xlsheet.cells,xlsheet.cells).set_columnwidth(9); xlsheet.get_range(xlsheet.cells[colday,col],xlsheet.cells[colday,cl]).set_mergecells(true); xlsheet.activesheet.cells[colday,col]="日期:"+datetime.now.year.tostring()+"年"+datetime.now.month.tostring()+"月"+datetime.now.day.tostring()+"日 "; xlsheet.get_range(xlsheet.cells[colday,col],xlsheet.cells[colday,cl]).set_horizontalalignment(owc.owc11.xlhalign.xlhalignright); //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 for(i=0;i<cl;i++) { xlsheet.activesheet.cells[colsecond,i+1]=dt.columns[i].caption.tostring(); } //逐行处理数据 foreach(datarow row in myrow) { //当前数据写入 for(i=0;i<cl;i++) { xlsheet.activesheet.cells[colnumber,i+1]=row[i].tostring().trim(); } colnumber++; } //设置边框线 xlsheet.get_range(xlsheet.cells[colsecond,col],xlsheet.cells[colnumber-1,cl]).borders.set_linestyle(owc.owc11.xllinestyle.xlcontinuous); try { //xlsheet.get_range(xlsheet.cells[2,1],xlsheet.cells[8,15]).set_numberformat("¥#,##0.00"); // system.web.httpserverutility hserver=new system.web.httpserverutility(); //hserver.mappath(".")+"//testowc.xls"; xlsheet.export(filepath+"//exportfiles//~$"+userfile+".xls",owc.owc11.sheetexportactionenum.ssexportactionnone,owc.owc11.sheetexportformat.ssexportxmlspreadsheet); } catch(exception e) { throw new exception("系统调用错误或有打开的excel文件!"+e); } //web页面定义 httpresponse resp; resp=httpcontext.current.response; resp.contentencoding=system.text.encoding.getencoding("gb2312"); resp.appendheader("content-disposition","attachment;filename="+userfile+".xls"); resp.contenttype="application/ms-excel"; string path=filepath+"//exportfiles//~$"+userfile+".xls"; system.io.fileinfo file = new fileinfo(path); resp.clear(); resp.addheader("content-length",file.length.tostring()); resp.writefile(file.fullname); resp.end(); } #endregion /// <summary> /// 导出excel文件类 /// </summary> /// <param name="ds"></param> /// <param name="filename"></param> /// #region //导出excel文件类 public void datasettoexcel(dataset ds,string filename) { try { //web页面定义 //system.web.ui.page mypage=new system.web.ui.page(); httpresponse resp; resp=httpcontext.current.response; resp.contentencoding=system.text.encoding.getencoding("gb2312"); resp.appendheader("content-disposition","attachment;filename="+filename+".xls"); resp.contenttype="application/ms-excel"; //变量定义 string colheaders=null; string is_item=null; //显示格式定义//////////////// //文件流操作定义 // filestream fs=new filestream(filename,filemode.create,fileaccess.write); //streamwriter sw=new streamwriter(fs,system.text.encoding.getencoding("gb2312")); stringwriter sfw=new stringwriter(); //定义表对象与行对象,同时用dataset对其值进行初始化 system.data.datatable dt=ds.tables[0]; datarow[] myrow=dt.select(); int i=0; int cl=dt.columns.count; //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 for(i=0;i<cl;i++) { //if(i==(cl-1)) //最后一列,加\n // colheaders+=dt.columns[i].caption.tostring(); //else colheaders+=dt.columns[i].caption.tostring()+"\t"; } sfw.writeline(colheaders); //sw.writeline(colheaders); //逐行处理数据 foreach(datarow row in myrow) { //当前数据写入 for(i=0;i<cl;i++) { //if(i==(cl-1)) // is_item+=row[i].tostring()+"\n"; //else is_item+=row[i].tostring()+"\t"; } sfw.writeline(is_item); //sw.writeline(is_item); is_item=null; } resp.write(sfw); //resp.clear(); resp.end(); } catch(exception e) { throw e; } } #endregion /// <summary> /// 数据集转换,即把dataset转换为excel对象 /// </summary> /// <param name="ds"></param> /// <param name="filename"></param> /// <param name="titlename"></param> /// #region //运用html+css生成excel public void datasettoexcel(dataset ds,string filename,string titlename) { string exportfilename=null; if(filename==null || filename=="") exportfilename="dfsoft"; else exportfilename=filename; if(titlename=="" || titlename==null) titlename="添加标题处(高级报表)"; //定义表对象与行对象,同时用dataset对其值进行初始化 system.data.datatable dt=ds.tables[0]; datarow[] myrow=dt.select(); int i=0; int cl=dt.columns.count; //web页面定义 httpresponse resp; resp=httpcontext.current.response; resp.clear(); resp.contentencoding=system.text.encoding.getencoding("utf-8"); resp.appendheader("content-disposition","attachment;filename="+exportfilename+".xls"); resp.contenttype="application/vnd.ms-excel"; string begintab="<table border='0' cellpadding='0' cellspacing='0' style='border-right:#000000 0.1pt solid;border-top:#000000 0.1pt solid;'>"; string endtab="</table>"; string fileio=null; string mainio=null; string titletab="<tr><td colspan='"+cl+"' style='font-size:30px;' align='center'><b>"+titlename+"</b></td></tr><tr><td colspan='"+cl+"' align='right' style='font-size:15px;'>"+datetime.now.year.tostring()+"年"+datetime.now.month.tostring()+"月"+datetime.now.day.tostring()+"日 </td></tr>"; string begintr="<tr>"; string endtr="</tr>"; for(i=0;i<cl;i++) { fileio+="<td style='border-left:#000000 0.1pt solid; border-bottom:#000000 1.0pt solid; font-size:15px;' align='center'><b>"+dt.columns[i].caption.tostring()+"</b></td>"; } fileio=begintr.tostring()+fileio.tostring()+endtr.tostring(); //逐行处理数据 foreach(datarow row in myrow) { string outio=null; //当前数据写入 for(i=0;i<cl;i++) { outio+="<td style='border-left:#000000 0.1pt solid; border-bottom:#000000 1.0pt solid; font-size:15px;' align='center'>"+row[i].tostring()+"</td>"; } mainio+=begintr.tostring()+outio.tostring()+endtr.tostring(); } fileio="<center><table>"+titletab.tostring()+"<tr>"+begintab.tostring()+fileio.tostring()+mainio.tostring()+endtab.tostring()+"</tr></table></center>"; resp.write(fileio.tostring()); resp.end(); } #endregion /// <summary> /// 导出word文件类 /// </summary> /// <param name="ds"></param> /// <param name="filename"></param> /// #region //导出word文件类 public void datasettoword(dataset ds,string filename) { try { //web页面定义 //system.web.ui.page mypage=new system.web.ui.page(); httpresponse resp; resp=httpcontext.current.response; resp.clear(); resp.buffer=true; resp.charset="utf-8"; resp.contentencoding=system.text.encoding.getencoding("utf-8"); resp.appendheader("content-disposition","attachment;filename="+filename+".doc"); resp.contenttype="application/ms-word"; //变量定义 string colheaders=null; string is_item=null; //显示格式定义//////////////// //文件流操作定义 // filestream fs=new filestream(filename,filemode.create,fileaccess.write); //streamwriter sw=new streamwriter(fs,system.text.encoding.getencoding("gb2312")); stringwriter sfw=new stringwriter(); //定义表对象与行对象,同时用dataset对其值进行初始化 system.data.datatable dt=ds.tables[0]; datarow[] myrow=dt.select(); int i=0; int cl=dt.columns.count; //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 for(i=0;i<cl;i++) { //if(i==(cl-1)) //最后一列,加\n // colheaders+=dt.columns[i].caption.tostring(); //else colheaders+=dt.columns[i].caption.tostring()+"\t"; } sfw.writeline(colheaders); //sw.writeline(colheaders); //逐行处理数据 foreach(datarow row in myrow) { //当前数据写入 for(i=0;i<cl;i++) { //if(i==(cl-1)) // is_item+=row[i].tostring()+"\n"; //else is_item+=row[i].tostring()+"\t"; } sfw.writeline(is_item); //sw.writeline(is_item); is_item=null; } resp.write(sfw); //resp.clear(); resp.end(); } catch(exception e) { throw e; } } #endregion /// <summary> /// 数据集转换,即把dataset转换为word对象 /// </summary> /// <param name="ds"></param> /// <param name="titlename"></param> /// #region // 运行html+css生成word文件 public void datasettoword(dataset ds,string filename,string titlename) { //调用office //备注:速度太慢放弃应用此方法 //owc.word.application oword=new owc.word.applicationclass(); //owc.word._document odoc=new owc.word.documentclass(); string exportfilename=null; if(filename==null || filename=="") exportfilename="dfsoft"; else exportfilename=filename; if(titlename=="" || titlename==null) titlename="添加标题处(高级报表)"; //定义表对象与行对象,同时用dataset对其值进行初始化 system.data.datatable dt=ds.tables[0]; datarow[] myrow=dt.select(); int i=0; int cl=dt.columns.count; #region // string filetitle="<center><table><tr><td><b>报表测试</b></td></tr></table>"+"\n"; // string endfile="</center>"; // //web页面定义 httpresponse resp; resp=httpcontext.current.response; resp.clear(); resp.contentencoding=system.text.encoding.getencoding("utf-8"); resp.appendheader("content-disposition","attachment;filename="+exportfilename+".doc"); resp.contenttype="application/vnd.ms-word"; // system.io.stringwriter osw=new stringwriter(); // system.web.ui.htmltextwriter ohw=new system.web.ui.htmltextwriter(osw); // system.web.ui.webcontrols.datagrid odg=new system.web.ui.webcontrols.datagrid(); // odg.datasource=ds.tables[0]; // odg.databind(); // odg.rendercontrol(ohw); // resp.write(filetitle.tostring()+osw.tostring()+endfile.tostring()); // resp.end(); #endregion string begintab="<table border='0' cellpadding='0' cellspacing='0' style='border-right:#000000 0.1pt solid;border-top:#000000 0.1pt solid;'>"; string endtab="</table>"; string fileio=null; string mainio=null; string titletab="<tr><td style='font-size:13px;' align='center'><b>"+titlename+"</b></td></tr><tr><td align='right' style='font-size:15px;'>"+datetime.now.year.tostring()+"年"+datetime.now.month.tostring()+"月"+datetime.now.day.tostring()+"日 </td></tr>"; string begintr="<tr>"; string endtr="</tr>"; for(i=0;i<cl;i++) { fileio+="<td style='border-left:#000000 0.1pt solid; border-bottom:#000000 1.0pt solid; font-size:15px;' align='center'><b>"+dt.columns[i].caption.tostring()+"</b></td>"; } fileio=begintr.tostring()+fileio.tostring()+endtr.tostring(); //逐行处理数据 foreach(datarow row in myrow) { string outio=null; //当前数据写入 for(i=0;i<cl;i++) { outio+="<td style='border-left:#000000 0.1pt solid; border-bottom:#000000 1.0pt solid; font-size:15px;' align='center'>"+row[i].tostring()+"</td>"; } mainio+=begintr.tostring()+outio.tostring()+endtr.tostring(); } fileio="<center><table>"+titletab.tostring()+"<tr>"+begintab.tostring()+fileio.tostring()+mainio.tostring()+endtab.tostring()+"</tr></table></center>"; resp.write(fileio.tostring()); resp.end(); } #endregion } }
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#操作excel技巧总结》、《c#中xml文件操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。
下一篇: C#中构造函数和析构函数用法实例详解