C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例

作者:雨竹 时间:2023-05-29 21:50:02 

本文实例讲述了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()+"日&nbsp;&nbsp;&nbsp;&nbsp;</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()+"日&nbsp;&nbsp;&nbsp;&nbsp;</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#,DataSet,Excel,Word
0
投稿

猜你喜欢

  • Java贪吃蛇游戏完善版

    2023-04-12 03:07:53
  • C#实现温度转换功能

    2021-10-06 22:54:18
  • 使用C语言编写基于TCP协议的Socket通讯程序实例分享

    2023-07-05 03:30:03
  • Android中AlertDialog的六种创建方式

    2021-08-23 15:59:52
  • C#中abstract的用法详解

    2021-07-08 21:53:46
  • android中SwipeRefresh实现各种上拉,下拉刷新示例

    2022-06-14 17:18:03
  • Android 拍照后返回缩略图的两种方法介绍

    2023-02-06 02:06:28
  • Android通过代码控制ListView上下滚动的方法

    2022-06-29 03:07:57
  • 基于@RequestBody和@ResponseBody及Stringify()的作用说明

    2021-12-14 01:47:38
  • Mybatis-Plus注入SQL原理分析

    2022-11-09 21:17:22
  • SpringBoot自定义MessageConvert详细讲解

    2023-04-23 19:24:39
  • Android自定义ViewGroup实现选择面板

    2022-11-02 09:20:36
  • Android onClick方法与setOnClickListener方法对比

    2022-02-09 22:21:40
  • Java 使用多线程调用类的静态方法的示例

    2021-10-31 21:29:20
  • C#判断访问来源是否为搜索引擎链接的方法

    2021-11-01 09:15:53
  • java8 Stream list to Map key 重复 value合并到Collectio的操作

    2022-02-01 23:53:58
  • Android完美实现平滑过渡的ViewPager广告条

    2023-10-01 13:05:31
  • Springboot 项目读取Resources目录下的文件(推荐)

    2023-07-27 09:40:47
  • C# 索引器的使用教程

    2022-08-25 05:11:59
  • Java网络编程实例——简单模拟在线聊天

    2023-08-20 04:39:42
  • asp之家 软件编程 m.aspxhome.com