C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例
更新时间:2020年6月25日 11:24 点击:1741
本文实例讲述了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#程序设计有所帮助。
下一篇: LZW数据压缩算法的原理分析
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25