DataSet数据导出为Excel文档(每个DataTable为一个Sheet)
Web项目中,很多时候须要实现将查询的数据集导出为Excel文档的功能,很多时候不希望在工程中添加对Office组件相关的DLL的引用,甚至有时候受到Office不同版本的影响,导致在不同的服务器上部署后功能受限,或和其它项目冲突,那么,使用这种简单粗暴的方式,可能会解决部分猿类灵长动物的烦恼忧愁。
/// <summary>
/// DataSet导出到Excel文件(多个Sheet)
/// </summary>
/// <param name="dataSet">DataSet</param>
/// <param name="fileName">文件名称</param>
/// <returns>导出是否成功</returns>
public static bool DataSetToExcel(DataSet dataSet, string fileName)
{
if (dataSet == null) return false;
if (dataSet.Tables.Count < ) return false;
if (dataSet.Tables[] == null) return false;
if (string.IsNullOrWhiteSpace(fileName)) return false;
try
{
ExecDataSetToExcel(dataSet, fileName);
return true;
}
catch (Exception ex)
{
//DO LOG
return false;
}
}
//执行 DataSet 导出
private static void ExecDataSetToExcel(DataSet dataSet, string fileName)
{
HttpResponse httpResponse = HttpContext.Current.Response;
httpResponse.Clear();
httpResponse.Charset = "utf-8";
httpResponse.ContentType = "text/xml";
httpResponse.ContentEncoding = System.Text.Encoding.UTF8;
httpResponse.AppendHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8) + ".xls"); StringBuilder sb = new StringBuilder();
for (int i = ; i < dataSet.Tables.Count; i++)
{
System.Data.DataTable dt = dataSet.Tables[i];
//新建Sheet
string sheetName = string.IsNullOrWhiteSpace(dt.TableName) ? "Sheet" + (i + ) : dt.TableName;
sb.Append("<Worksheet ss:Name='" + sheetName + "'>");
sb.Append("<Table x:FullColumns='1' x:FullRows='1' ss:DefaultColumnWidth='118'>");
//输出标题行
sb.Append("<Row ss:AutoFitHeight='1'>");
for (int j = ; j < dt.Columns.Count; j++) sb.Append("<Cell ss:StyleID='header'><Data ss:Type='String'>" + dt.Columns[j].ColumnName + "</Data></Cell>");
sb.Append("</Row>");
//输入内容行
for (int k = ; k < dt.Rows.Count; k++)
{
sb.Append("<Row>");
for (int l = ; l < dt.Columns.Count; l++)
{
//Type ct = dt.Columns[l].DataType;
//sb.Append("<Cell ss:StyleID='body'><Data ss:Type='Number'>" + dt.Rows[k][l] + "</Data></Cell>"); //数字类型
sb.Append("<Cell ss:StyleID='body'><Data ss:Type='String'>" + dt.Rows[k][l] + "</Data></Cell>");
}
sb.Append("</Row>");
}
sb.Append("</Table>");
sb.Append("</Worksheet>");
} string excelXmlDoc = CreateExcelXmlDoc(sb.ToString());
httpResponse.Write(excelXmlDoc);
httpResponse.Flush();
httpResponse.End();
}
//创建Excel文档对应的XML字符串
private static string CreateExcelXmlDoc(string worksheetXml)
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");
sb.Append("<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office'"
+"xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet'"
+"xmlns:html='http://www.w3.org/TR/REC-html40'>");
//文档属性
sb.Append("<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>"
+ "<Author>Unitech</Author><LastAuthor>Unitech</LastAuthor><Created></Created><LastSaved></LastSaved><Version>12.00</Version>"
+ "</DocumentProperties>");
//样式
sb.Append("<Styles>");
sb.Append("<Style ss:ID='header'>"
+ "<Font ss:FontName='宋体' x:CharSet='134' ss:Size='10' ss:Color='#000000' ss:Bold='0'/>"
+ "<Alignment ss:Horizontal='Center' ss:Vertical='Center'/>"
+ "<Interior ss:Color='#d8d8d8' ss:Pattern='Solid'/>"
+ "<Borders>"
+ "<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "</Borders></Style>");
sb.Append("<Style ss:ID='body'>"
+ "<Font ss:FontName='宋体' x:CharSet='134' ss:Size='10' ss:Color='#000000'/>"
+ "<Alignment ss:Vertical='Center'/>"
+ "<NumberFormat ss:Format='@'/>"
+ "<Borders>"
+ "<Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "<Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1' ss:Color='#bfbfbf'/>"
+ "</Borders></Style>");
sb.Append("</Styles>");
//Work Sheet
sb.Append(worksheetXml);
sb.Append("</Workbook>");
return sb.ToString();
}
有需要的拿去自己进行改进和优化吧。
DataSet数据导出为Excel文档(每个DataTable为一个Sheet)的更多相关文章
- sqlserver将数据库的数据导成excel文档方法
sqlserver将数据库的数据导成excel文档方法 最近公司需要下载uniport的数据跟之前的数据进行对比,所以避免不了需要将数据库的数据导出来,把SQLServer表中的数据导出为Excel文 ...
- 如何将Revit明细表导出为Excel文档
Revit软件没有将明细表直接导出为Excel电子表格的功能,Revit只能将明细表导出为TXT格式,但是这种TXT文件用EXCEL处理软件打开然后另存为XLS格式即可,以Revit2013版自带的建 ...
- dataset数据导出到Excel
1.将数据写入HTTP输出流/这样子导出以后的数据全在一行中 public void CreateExcel(DataSet ds, string FileName) { HttpResponse r ...
- C# 将dataset数据导出到excel中
//添加引用 NPOI.dll //添加 using NPOI.HSSF.UserModel; /// <summary> /// 导出数据到Excel /// </summary& ...
- asp.net DataSet数据导出到Excel中
方法: [STAThread]///这是必须的 public override void VerifyRenderingInServerForm(System.Web.UI.Control co ...
- Java之Poi导出Excel文档
一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...
- C#操作Excel(2)-- 打开-读取Excel文档
由于要为某软件实现导出Excel功能,故有此文. 本文的开发环境是Visual Studio 2010 ,C#, Excel 2007. 新建C#工程后打开Solution Explorer,可以看到 ...
- jquery.table2excel,将HTML的table标签数据导出成excel
<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...
- GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍
GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...
随机推荐
- html 动态添加TABLE的行。
<script type="text/javascript"> var pos =4;//默认位置为4,根据自己需要,也可以通过鼠标事件获取当前行数. function ...
- 如果将WCF服务发布为rest模式
WCF是支持多种协议的,其中basicHttpBinding是基础协议绑定,类似于传统的webservice. 如果要将WCF发布成rest,绑定协议要使用webHttpBinding,并且在终结点的 ...
- python django第一天
django第一天,上一次是使用了virtualenv(沙盒),这一次就直接用virtualenv直接建一个django的环境,用来自己练着试试django: source django/Script ...
- 【线性结构上的动态规划】UVa 11584 - Partitioning by Palindromes
回文串问题.给出一个字符串,问最少可以划分为多少个字符串子串. 对于判断是否为回文串,对于不是很长的字符串,可以采取直接暴力,即从两边向中间收缩判断字符相等. bool is_pali(int l, ...
- hdu 4666 最大曼哈顿距离
思路:这题我是看了题目后,上百度搜了一下才知道还有求最大曼哈顿距离的方法.直接把代码copy过来,研读一下,知道了代码实现机制,自然就很容易想到用优先队列来维护每种状态下的xi,yi之和的最大值最小值 ...
- DOM操作在jQuery中的实用------文字提示和图片提示
关于文字提示想必是家喻户晓,操作呢说简单一点就是在超链接中加入title属性.但是在人机交互越来越倍受恩宠的年代,依靠浏览器自带的文字提示即title属性,提示效果的响应速度就(还是人艰不拆了吧~)s ...
- document.ready和onload的区别
转自:http://holysonll.blog.163.com/blog/static/2141390932013411112823855/ document.ready和onload的区别——Ja ...
- IntelliJ IDEA 13.x 下使用Hibernate + Spring MVC + JBoss 7.1.1
从2004年开始做.NET到现在.直到最近要做一些JAVA的项目,如果说100个人写一篇关于.NET的文章,估计这10个人写的内容都是一样.但是如果说10个人写Java的文章,那真的是10个人10种写 ...
- 机器学习 —— 决策树及其集成算法(Bagging、随机森林、Boosting)
本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 决策树--------------------------------------------- ...
- Xcode-项目模板修改
项目模板就是创建工程的时候选择的某一个条目, Xcode会根据选择的条目生成固定格式的项目 例如想创建一个命令行项目就选择Command Line Tool 如何修改项目模板 1.应用程序中,找到Xc ...