欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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#程序设计有所帮助。