C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例
本文实例讲述了C#实现DataSet内数据转化为Excel和Word文件的通用类。分享给大家供大家参考,具体如下:
前不久因为项目的需要写的一个C#把DataSet内数据转化为Excel和Word文件的通用类,这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。最后请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。
usingSystem; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Web; usingSystem.Web.SessionState; usingSystem.Web.UI; usingSystem.Web.UI.WebControls; usingSystem.Web.UI.HtmlControls; usingSystem.IO; usingSystem.Windows.Forms; usingMicrosoft.Office.Interop.Excel; usingMicrosoft.Office.Interop.Word; usingMicrosoft.Office.Core; usingOWC=Microsoft.Office.Interop; usingSystem.Reflection; usingSystem.Text; namespaceCaOnLine.ZWDB.DFObject { ///<summary> ///ExportFiles的摘要说明。 ///作用:把DataSet数据集内数据转化为Excel、Word文件 ///描述:这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后 ///生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。 ///备注:请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。 ///</summary> publicclassExportFiles { ///<summary> /// ///</summary> /// #region//构造函数 publicExportFiles() { // //TODO:在此处添加构造函数逻辑 // } #endregion ///<summary> ///调用Excel.dll导出Excel文件 ///</summary> ///<paramname="ds"></param> /// #region//调用Excel.dll导出Excel文件 ///<summary> /// ///</summary> ///<paramname="ds">DataSet数据庥</param> ///<paramname="Duser">登录用户(如session["username"].Tostring())可为null或空</param> ///<paramname="titlename">添加一个报表标题</param> ///<paramname="filepath">指定文件在服务器上的存放地址(如:Server.MapPath("."))可为null或空</param> /// ///为什么在这里设置个filepath? ///原因如下:filepath接收的内容是Server.MapPath(".")这个参数值,这个值在这本类中对 ///System.Web.HttpServerUtilityHServer=newSystem.Web.HttpServerUtility()的引用出错,因为没有继承Page类 ///所以只能以传值的形式调用了,你有好的办法可以修改,那就再好不过了! publicvoidDataSetToExcel(DataSetds,stringDuser,stringtitlename,stringfilepath) { //Microsoft.Office.Interop.Owc11()appowc=newMicrosoft.Office.Interop.Owc11(); OWC.Owc11.SpreadsheetClassxlsheet=newMicrosoft.Office.Interop.Owc11.SpreadsheetClass(); #region//屏蔽内容 ///本来想用下面的这个办法实现的,可在IIS中必须设置相关的权限 ///所以就放弃了,把代码设置为屏蔽内容,供学习参考! /// //Microsoft.Office.Interop.Excel.Applicationapp=newMicrosoft.Office.Interop.Excel.Application(); // //if(app==null) //{ //thrownewException("系统调用错误(Excel.dll)"); //} //app.Application.Workbooks.Add(true); //WorkbookClassoBook=newWorkbookClass(); //WorksheetClassoSheet=newWorksheetClass(); // ////定义表对象与行对象,同时用DataSet对其值进行初始化 //System.Data.DataTabledt=ds.Tables[0]; //oSheet.get_Range(app.Cells[1,1],app.Cells[10,15]).HorizontalAlignment=OWC.Owc11.XlHAlign.xlHAlignCenter; //DataRow[]myRow=dt.Select(); //inti=0; //intcl=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.DataTabledt=ds.Tables[0]; DataRow[]myRow=dt.Select(); inti=0; intcol=1; intcolday=col+1; intcolsecond=colday+1; intcolnumber=colsecond+1; intcl=dt.Columns.Count; stringuserfile=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(DataRowrowinmyRow) { //当前数据写入 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.HttpServerUtilityHServer=newSystem.Web.HttpServerUtility(); //HServer.MapPath(".")+"//testowc.xls"; xlsheet.Export(filepath+"//exportfiles//~$"+userfile+".xls",OWC.Owc11.SheetExportActionEnum.ssExportActionNone,OWC.Owc11.SheetExportFormat.ssExportXMLSpreadsheet); } catch(Exceptione) { thrownewException("系统调用错误或有打开的Excel文件!"+e); } //Web页面定义 HttpResponseresp; resp=HttpContext.Current.Response; resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-disposition","attachment;filename="+userfile+".xls"); resp.ContentType="application/ms-excel"; stringpath=filepath+"//exportfiles//~$"+userfile+".xls"; System.IO.FileInfofile=newFileInfo(path); resp.Clear(); resp.AddHeader("content-length",file.Length.ToString()); resp.WriteFile(file.FullName); resp.End(); } #endregion ///<summary> ///导出Excel文件类 ///</summary> ///<paramname="ds"></param> ///<paramname="FileName"></param> /// #region//导出Excel文件类 publicvoidDataSetToExcel(DataSetds,stringFileName) { try { //Web页面定义 //System.Web.UI.Pagemypage=newSystem.Web.UI.Page(); HttpResponseresp; resp=HttpContext.Current.Response; resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-disposition","attachment;filename="+FileName+".xls"); resp.ContentType="application/ms-excel"; //变量定义 stringcolHeaders=null; stringIs_item=null; //显示格式定义//////////////// //文件流操作定义 //FileStreamfs=newFileStream(FileName,FileMode.Create,FileAccess.Write); //StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312")); StringWritersfw=newStringWriter(); //定义表对象与行对象,同时用DataSet对其值进行初始化 System.Data.DataTabledt=ds.Tables[0]; DataRow[]myRow=dt.Select(); inti=0; intcl=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(DataRowrowinmyRow) { //当前数据写入 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(Exceptione) { throwe; } } #endregion ///<summary> ///数据集转换,即把DataSet转换为Excel对象 ///</summary> ///<paramname="ds"></param> ///<paramname="FileName"></param> ///<paramname="titlename"></param> /// #region//运用html+css生成Excel publicvoidDataSetToExcel(DataSetds,StringFileName,stringtitlename) { stringExportFileName=null; if(FileName==null||FileName=="") ExportFileName="DFSOFT"; else ExportFileName=FileName; if(titlename==""||titlename==null) titlename="添加标题处(高级报表)"; //定义表对象与行对象,同时用DataSet对其值进行初始化 System.Data.DataTabledt=ds.Tables[0]; DataRow[]myRow=dt.Select(); inti=0; intcl=dt.Columns.Count; //Web页面定义 HttpResponseresp; 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"; stringBeginTab="<tableborder='0'cellpadding='0'cellspacing='0'style='border-right:#0000000.1ptsolid;border-top:#0000000.1ptsolid;'>"; stringEndTab="</table>"; stringFileIO=null; stringMainIO=null; stringTitleTab="<tr><tdcolspan='"+cl+"'style='font-size:30px;'align='center'><b>"+titlename+"</b></td></tr><tr><tdcolspan='"+cl+"'align='right'style='font-size:15px;'>"+DateTime.Now.Year.ToString()+"年"+DateTime.Now.Month.ToString()+"月"+DateTime.Now.Day.ToString()+"日 </td></tr>"; stringBeginTr="<tr>"; stringEndTr="</tr>"; for(i=0;i<cl;i++) { FileIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;font-size:15px;'align='center'><b>"+dt.Columns[i].Caption.ToString()+"</b></td>"; } FileIO=BeginTr.ToString()+FileIO.ToString()+EndTr.ToString(); //逐行处理数据 foreach(DataRowrowinmyRow) { stringOutIO=null; //当前数据写入 for(i=0;i<cl;i++) { OutIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;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> ///<paramname="ds"></param> ///<paramname="FileName"></param> /// #region//导出Word文件类 publicvoidDataSetToWord(DataSetds,stringFileName) { try { //Web页面定义 //System.Web.UI.Pagemypage=newSystem.Web.UI.Page(); HttpResponseresp; 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"; //变量定义 stringcolHeaders=null; stringIs_item=null; //显示格式定义//////////////// //文件流操作定义 //FileStreamfs=newFileStream(FileName,FileMode.Create,FileAccess.Write); //StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312")); StringWritersfw=newStringWriter(); //定义表对象与行对象,同时用DataSet对其值进行初始化 System.Data.DataTabledt=ds.Tables[0]; DataRow[]myRow=dt.Select(); inti=0; intcl=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(DataRowrowinmyRow) { //当前数据写入 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(Exceptione) { throwe; } } #endregion ///<summary> ///数据集转换,即把DataSet转换为Word对象 ///</summary> ///<paramname="ds"></param> ///<paramname="titlename"></param> /// #region//运行html+css生成Word文件 publicvoidDataSetToWord(DataSetds,stringFileName,stringtitlename) { //调用Office //备注:速度太慢放弃应用此方法 //OWC.Word.ApplicationoWord=newOWC.Word.ApplicationClass(); //OWC.Word._DocumentoDoc=newOWC.Word.DocumentClass(); stringExportFileName=null; if(FileName==null||FileName=="") ExportFileName="DFSOFT"; else ExportFileName=FileName; if(titlename==""||titlename==null) titlename="添加标题处(高级报表)"; //定义表对象与行对象,同时用DataSet对其值进行初始化 System.Data.DataTabledt=ds.Tables[0]; DataRow[]myRow=dt.Select(); inti=0; intcl=dt.Columns.Count; #region //stringFileTitle="<center><table><tr><td><b>报表测试</b></td></tr></table>"+"\n"; //stringEndFile="</center>"; ////Web页面定义 HttpResponseresp; 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.StringWriteroSW=newStringWriter(); //System.Web.UI.HtmlTextWriteroHW=newSystem.Web.UI.HtmlTextWriter(oSW); //System.Web.UI.WebControls.DataGridoDG=newSystem.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 stringBeginTab="<tableborder='0'cellpadding='0'cellspacing='0'style='border-right:#0000000.1ptsolid;border-top:#0000000.1ptsolid;'>"; stringEndTab="</table>"; stringFileIO=null; stringMainIO=null; stringTitleTab="<tr><tdstyle='font-size:13px;'align='center'><b>"+titlename+"</b></td></tr><tr><tdalign='right'style='font-size:15px;'>"+DateTime.Now.Year.ToString()+"年"+DateTime.Now.Month.ToString()+"月"+DateTime.Now.Day.ToString()+"日 </td></tr>"; stringBeginTr="<tr>"; stringEndTr="</tr>"; for(i=0;i<cl;i++) { FileIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;font-size:15px;'align='center'><b>"+dt.Columns[i].Caption.ToString()+"</b></td>"; } FileIO=BeginTr.ToString()+FileIO.ToString()+EndTr.ToString(); //逐行处理数据 foreach(DataRowrowinmyRow) { stringOutIO=null; //当前数据写入 for(i=0;i<cl;i++) { OutIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;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#程序设计有所帮助。