C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例
本文实例讲述了C#实现DataSet内数据转化为Excel和Word文件的通用类。分享给大家供大家参考,具体如下:
前不久因为项目的需要写的一个C#把DataSet内数据转化为Excel和Word文件的通用类,这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。最后请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingSystem.IO;
usingSystem.Windows.Forms;
usingMicrosoft.Office.Interop.Excel;
usingMicrosoft.Office.Interop.Word;
usingMicrosoft.Office.Core;
usingOWC=Microsoft.Office.Interop;
usingSystem.Reflection;
usingSystem.Text;
namespaceCaOnLine.ZWDB.DFObject
{
///<summary>
///ExportFiles的摘要说明。
///作用:把DataSet数据集内数据转化为Excel、Word文件
///描述:这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后
///生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之。
///备注:请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性。
///</summary>
publicclassExportFiles
{
///<summary>
///
///</summary>
///
#region//构造函数
publicExportFiles()
{
//
//TODO:在此处添加构造函数逻辑
//
}
#endregion
///<summary>
///调用Excel.dll导出Excel文件
///</summary>
///<paramname="ds"></param>
///
#region//调用Excel.dll导出Excel文件
///<summary>
///
///</summary>
///<paramname="ds">DataSet数据庥</param>
///<paramname="Duser">登录用户(如session["username"].Tostring())可为null或空</param>
///<paramname="titlename">添加一个报表标题</param>
///<paramname="filepath">指定文件在服务器上的存放地址(如:Server.MapPath("."))可为null或空</param>
///
///为什么在这里设置个filepath?
///原因如下:filepath接收的内容是Server.MapPath(".")这个参数值,这个值在这本类中对
///System.Web.HttpServerUtilityHServer=newSystem.Web.HttpServerUtility()的引用出错,因为没有继承Page类
///所以只能以传值的形式调用了,你有好的办法可以修改,那就再好不过了!
publicvoidDataSetToExcel(DataSetds,stringDuser,stringtitlename,stringfilepath)
{
//Microsoft.Office.Interop.Owc11()appowc=newMicrosoft.Office.Interop.Owc11();
OWC.Owc11.SpreadsheetClassxlsheet=newMicrosoft.Office.Interop.Owc11.SpreadsheetClass();
#region//屏蔽内容
///本来想用下面的这个办法实现的,可在IIS中必须设置相关的权限
///所以就放弃了,把代码设置为屏蔽内容,供学习参考!
///
//Microsoft.Office.Interop.Excel.Applicationapp=newMicrosoft.Office.Interop.Excel.Application();
//
//if(app==null)
//{
//thrownewException("系统调用错误(Excel.dll)");
//}
//app.Application.Workbooks.Add(true);
//WorkbookClassoBook=newWorkbookClass();
//WorksheetClassoSheet=newWorksheetClass();
//
////定义表对象与行对象,同时用DataSet对其值进行初始化
//System.Data.DataTabledt=ds.Tables[0];
//oSheet.get_Range(app.Cells[1,1],app.Cells[10,15]).HorizontalAlignment=OWC.Owc11.XlHAlign.xlHAlignCenter;
//DataRow[]myRow=dt.Select();
//inti=0;
//intcl=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.DataTabledt=ds.Tables[0];
DataRow[]myRow=dt.Select();
inti=0;
intcol=1;
intcolday=col+1;
intcolsecond=colday+1;
intcolnumber=colsecond+1;
intcl=dt.Columns.Count;
stringuserfile=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(DataRowrowinmyRow)
{
//当前数据写入
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.HttpServerUtilityHServer=newSystem.Web.HttpServerUtility();
//HServer.MapPath(".")+"//testowc.xls";
xlsheet.Export(filepath+"//exportfiles//~$"+userfile+".xls",OWC.Owc11.SheetExportActionEnum.ssExportActionNone,OWC.Owc11.SheetExportFormat.ssExportXMLSpreadsheet);
}
catch(Exceptione)
{
thrownewException("系统调用错误或有打开的Excel文件!"+e);
}
//Web页面定义
HttpResponseresp;
resp=HttpContext.Current.Response;
resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-disposition","attachment;filename="+userfile+".xls");
resp.ContentType="application/ms-excel";
stringpath=filepath+"//exportfiles//~$"+userfile+".xls";
System.IO.FileInfofile=newFileInfo(path);
resp.Clear();
resp.AddHeader("content-length",file.Length.ToString());
resp.WriteFile(file.FullName);
resp.End();
}
#endregion
///<summary>
///导出Excel文件类
///</summary>
///<paramname="ds"></param>
///<paramname="FileName"></param>
///
#region//导出Excel文件类
publicvoidDataSetToExcel(DataSetds,stringFileName)
{
try
{
//Web页面定义
//System.Web.UI.Pagemypage=newSystem.Web.UI.Page();
HttpResponseresp;
resp=HttpContext.Current.Response;
resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-disposition","attachment;filename="+FileName+".xls");
resp.ContentType="application/ms-excel";
//变量定义
stringcolHeaders=null;
stringIs_item=null;
//显示格式定义////////////////
//文件流操作定义
//FileStreamfs=newFileStream(FileName,FileMode.Create,FileAccess.Write);
//StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
StringWritersfw=newStringWriter();
//定义表对象与行对象,同时用DataSet对其值进行初始化
System.Data.DataTabledt=ds.Tables[0];
DataRow[]myRow=dt.Select();
inti=0;
intcl=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(DataRowrowinmyRow)
{
//当前数据写入
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(Exceptione)
{
throwe;
}
}
#endregion
///<summary>
///数据集转换,即把DataSet转换为Excel对象
///</summary>
///<paramname="ds"></param>
///<paramname="FileName"></param>
///<paramname="titlename"></param>
///
#region//运用html+css生成Excel
publicvoidDataSetToExcel(DataSetds,StringFileName,stringtitlename)
{
stringExportFileName=null;
if(FileName==null||FileName=="")
ExportFileName="DFSOFT";
else
ExportFileName=FileName;
if(titlename==""||titlename==null)
titlename="添加标题处(高级报表)";
//定义表对象与行对象,同时用DataSet对其值进行初始化
System.Data.DataTabledt=ds.Tables[0];
DataRow[]myRow=dt.Select();
inti=0;
intcl=dt.Columns.Count;
//Web页面定义
HttpResponseresp;
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";
stringBeginTab="<tableborder='0'cellpadding='0'cellspacing='0'style='border-right:#0000000.1ptsolid;border-top:#0000000.1ptsolid;'>";
stringEndTab="</table>";
stringFileIO=null;
stringMainIO=null;
stringTitleTab="<tr><tdcolspan='"+cl+"'style='font-size:30px;'align='center'><b>"+titlename+"</b></td></tr><tr><tdcolspan='"+cl+"'align='right'style='font-size:15px;'>"+DateTime.Now.Year.ToString()+"年"+DateTime.Now.Month.ToString()+"月"+DateTime.Now.Day.ToString()+"日 </td></tr>";
stringBeginTr="<tr>";
stringEndTr="</tr>";
for(i=0;i<cl;i++)
{
FileIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;font-size:15px;'align='center'><b>"+dt.Columns[i].Caption.ToString()+"</b></td>";
}
FileIO=BeginTr.ToString()+FileIO.ToString()+EndTr.ToString();
//逐行处理数据
foreach(DataRowrowinmyRow)
{
stringOutIO=null;
//当前数据写入
for(i=0;i<cl;i++)
{
OutIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;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>
///<paramname="ds"></param>
///<paramname="FileName"></param>
///
#region//导出Word文件类
publicvoidDataSetToWord(DataSetds,stringFileName)
{
try
{
//Web页面定义
//System.Web.UI.Pagemypage=newSystem.Web.UI.Page();
HttpResponseresp;
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";
//变量定义
stringcolHeaders=null;
stringIs_item=null;
//显示格式定义////////////////
//文件流操作定义
//FileStreamfs=newFileStream(FileName,FileMode.Create,FileAccess.Write);
//StreamWritersw=newStreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"));
StringWritersfw=newStringWriter();
//定义表对象与行对象,同时用DataSet对其值进行初始化
System.Data.DataTabledt=ds.Tables[0];
DataRow[]myRow=dt.Select();
inti=0;
intcl=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(DataRowrowinmyRow)
{
//当前数据写入
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(Exceptione)
{
throwe;
}
}
#endregion
///<summary>
///数据集转换,即把DataSet转换为Word对象
///</summary>
///<paramname="ds"></param>
///<paramname="titlename"></param>
///
#region//运行html+css生成Word文件
publicvoidDataSetToWord(DataSetds,stringFileName,stringtitlename)
{
//调用Office
//备注:速度太慢放弃应用此方法
//OWC.Word.ApplicationoWord=newOWC.Word.ApplicationClass();
//OWC.Word._DocumentoDoc=newOWC.Word.DocumentClass();
stringExportFileName=null;
if(FileName==null||FileName=="")
ExportFileName="DFSOFT";
else
ExportFileName=FileName;
if(titlename==""||titlename==null)
titlename="添加标题处(高级报表)";
//定义表对象与行对象,同时用DataSet对其值进行初始化
System.Data.DataTabledt=ds.Tables[0];
DataRow[]myRow=dt.Select();
inti=0;
intcl=dt.Columns.Count;
#region
//stringFileTitle="<center><table><tr><td><b>报表测试</b></td></tr></table>"+"\n";
//stringEndFile="</center>";
////Web页面定义
HttpResponseresp;
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.StringWriteroSW=newStringWriter();
//System.Web.UI.HtmlTextWriteroHW=newSystem.Web.UI.HtmlTextWriter(oSW);
//System.Web.UI.WebControls.DataGridoDG=newSystem.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
stringBeginTab="<tableborder='0'cellpadding='0'cellspacing='0'style='border-right:#0000000.1ptsolid;border-top:#0000000.1ptsolid;'>";
stringEndTab="</table>";
stringFileIO=null;
stringMainIO=null;
stringTitleTab="<tr><tdstyle='font-size:13px;'align='center'><b>"+titlename+"</b></td></tr><tr><tdalign='right'style='font-size:15px;'>"+DateTime.Now.Year.ToString()+"年"+DateTime.Now.Month.ToString()+"月"+DateTime.Now.Day.ToString()+"日 </td></tr>";
stringBeginTr="<tr>";
stringEndTr="</tr>";
for(i=0;i<cl;i++)
{
FileIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;font-size:15px;'align='center'><b>"+dt.Columns[i].Caption.ToString()+"</b></td>";
}
FileIO=BeginTr.ToString()+FileIO.ToString()+EndTr.ToString();
//逐行处理数据
foreach(DataRowrowinmyRow)
{
stringOutIO=null;
//当前数据写入
for(i=0;i<cl;i++)
{
OutIO+="<tdstyle='border-left:#0000000.1ptsolid;border-bottom:#0000001.0ptsolid;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#程序设计有所帮助。