当前位置: 移动技术网 > IT编程>开发语言>c# > C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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#程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网