C#完成DataSet內數據轉化為Excel和Word文件的通用類完全實例。本站提示廣大學習愛好者:(C#完成DataSet內數據轉化為Excel和Word文件的通用類完全實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#完成DataSet內數據轉化為Excel和Word文件的通用類完全實例正文
本文實例講述了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#法式設計有所贊助。