前不久因为项目的需要写的一个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#把DataSet内数据转化为Excel和Word文件的通用类,这些关于Excel、Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后 生成Xml格式,再导入数据库!有些屏蔽内容没有...
0970 DataSet读取XML文件中数据作为数据源 567 0971 如何读取Fox的DBF文件 567 0972 通用方法实现数据增、删、改功能 567 0973 通用方法获取查询结果DataSet数据集 568 0974 同时查询多条SQL语句 568 0975...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
72 <br>0102 将字符串首字母转换大写 72 <br>0103 如何进行字节数组和字符串的相互转换 72 <br>0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 <br>4.2 获取字符串信息 73 ...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
实例019 像Excel一样复制DataGridView中的单元格区域数据 69 实例020 DataGridView中单元格合并及添加、显示行号 74 实例021 从DataGridView控件中拖放数据到TreeView控件 78 第3章 图形图像及多媒体应用 ...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
当然具体本书的作者就不深究了把! 第1章 认识ASP.NET 3.5 1.1 什么是ASP.NET 1.1.1 .NET历史与展望 1.1.2 ASP.NET与ASP 1.1.3 ASP.NET开发工具 1.1.4 ASP.NET客户端 1.1.5 ASP.NET 3.5新增控件 1.1.6 ASP.NET 3.5 ...
在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C#...