导出excel、word、csv文件方法汇总
http://www.woaic.com/2012/06/64
excel文件主要是输出html代码。以xls的文本格式保存文件。
生成excel格式的代码:
/// <summary>
/// 输出excel格式的html代码
/// </summary>
/// <param name="dt"></param>
/// <param name="fileName"></param>
/// <param name="tableHeader"></param>
/// <param name="UseDefinedHeader"></param>
/// <returns></returns>
public string MakeExcelStr(DataTable dt, string fileName, string[] tableHeader,bool UseDefinedHeader)
{
StringBuilder strResult = new StringBuilder();
int iColCount = dt.Columns.Count;
if (dt.Columns.Count == 0)
return strResult.ToString();
strResult.Append("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
strResult.Append("<tr style=\"font-weight: bold; white-space: nowrap;\">");
if (UseDefinedHeader)//是否是用户自定义表头
{
for (int i = 0; i < tableHeader.Length; i++)
{
strResult.Append("<td style=\"text-align:center\">" + tableHeader[i] + "</td>");//让文本居中显示
}
}
else
{
for (int i = 0; i < iColCount; i++)
{
strResult.Append("<td style=\"text-align:center\">" + (dt.Columns[i] + "").ToString() + "</td>");
}
}
strResult.Append("</tr>");
foreach (DataRow dr in dt.Rows)
{
strResult.Append("<tr>");
for (int i = 0; i < iColCount; i++)
{
// style=\"vnd.ms-excel.numberformat:@\"
strResult.Append("<td style=\"vnd.ms-excel.numberformat:@\">'" + (dr[i] + "").ToString() + "</td>");//设置单元格是文本格式(防止文本是科学计算法,即E+***这种情况)
}
strResult.Append("</tr>");
}
strResult.Append("</table>");
return strResult.ToString();
}
把生成的excel格式的代码保存成excel文件的方法
/// <summary>
/// 导出excel表格
/// </summary>
/// <param name="dt"></param>
/// <param name="fileName"></param>
/// <param name="tableHeader">表头</param>
/// <param name="Defined">是否自定义表头</param>
private void ExprotToExcel(DataTable dt, string fileName, string[] tableHeader, bool Defined)
{
DogManage.Common.ExcelHelper excelHelper = new DogManage.Common.ExcelHelper();
string result = excelHelper.MakeExcelStr(dt, fileName, tableHeader,Defined);
HttpContext.Current.Response.Clear();
System.IO.StringWriter sw = new System.IO.StringWriter();
sw.Write(result);
sw.Close();
string str2 = HttpUtility.UrlEncode(fileName + "_" + DateTime.Now.ToString("yyyy-MM-dd"));
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" +str2 + ".xls");
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
HttpContext.Current.Response.Write(sw);
HttpContext.Current.Response.End();
}
生成word的代码:
private void exportword()
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "utf-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=tmp.doc");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.ContentType = "application/ms-word";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
oHtmlTextWriter.WriteLine(hf.Value);
Response.Write(oStringWriter.ToString());
Response.End();
}
csv文件就是一个有特定格式的字符串拼接出来的文件,每个列通过,分割开来。换行则两外输出一行文本就行了
生成csv文件的代码:
/// <summary>
/// 输出csv文件的代码
/// </summary>
/// <param name="dt"></param>
/// <param name="fileName"></param>
/// <param name="tableHeader">表头</param>
/// <returns></returns>
public string MakeCSVStr(DataTable dt, string fileName, string[] tableHeader)
{
StringBuilder strResult = new StringBuilder();
string temp = string.Empty;
int iColCount = dt.Columns.Count;
if (iColCount == 0)
return strResult.ToString();
for (int i = 0; i < iColCount; i++)
{
temp+="\"" + dt.Columns[i] + "\"";
if (i < iColCount - 1)
temp+=",";
}
strResult.AppendLine(temp);
foreach (DataRow dr in dt.Rows)
{
temp = "";
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
temp+="\"" + dr[i].ToString() + "\"";
else
temp += "\"\"";
if (i < iColCount - 1)
temp+=",";
}
strResult.AppendLine(temp);
}
return strResult.ToString();
}
导出csv文件的方法:
/// <summary>
/// 导出csv文件
/// </summary>
/// <param name="dt"></param>
/// <param name="fileName"></param>
/// <param name="tableHeader">表头</param>
/// <param name="Defined">是否自定义表头</param>
private void ExprotToCSV(DataTable dt,string fileName, string[] tableHeader)
{
DogManage.Common.ExcelHelper excelHelper = new DogManage.Common.ExcelHelper();
string result=excelHelper.MakeCSVStr(dt, fileName, tableHeader);
HttpContext.Current.Response.Clear();
System.IO.StringWriter sw = new System.IO.StringWriter();
sw.Write(result);
sw.Close();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv");
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.Write(sw);
HttpContext.Current.Response.End();
}
导出excel、word、csv文件方法汇总的更多相关文章
- PHP导出数据到CSV文件函数/方法
如果不清楚什么是CSV文件,可看如下文章介绍 CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...
- (转载)DBGridEh导出Excel等格式文件
DBGridEh导出Excel等格式文件 uses DBGridEhImpExp; {--------------------------------------------------------- ...
- Excel打开csv文件乱码问题的解决办法
excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通 ...
- js原生导出excel和csv
严格意义来说并不是真正的excel文件,只是可以用excel打开查看而已,实际上的格式是逗号分隔文件即csv文件. 这里有几个坑要说一下: 不加Unicode的utf8头部标识excel打开文件会 ...
- mysql导出数据到csv文件
在日常工作中经常会遇见导出表中的数据到csv文件的操作,这里就简单总结一下导出的操作. 下面对csv文件的描述是摘录: 据RFC4180文档设置的,该文档全称Common Format and MIM ...
- PHP导出数据到CSV文件函数 csv_export()
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- PHP导出数据到CSV文件
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- DataGird导出EXCEL的几个方法
DataGird导出EXCEL的几个方法(WebControl) using System;using System.Data;using System.Text;using System.Web;u ...
- excel打开csv文件乱码解决办法
参考链接: https://jingyan.baidu.com/article/4dc408484776fbc8d846f168.html 问题:用 Excel 打开 csv 文件,确认有乱码的问题. ...
随机推荐
- VMware 安装 Centos 7 虚拟机配置网络
在 Windows 机器上如果想使用 Linux 环境,最方便的方式莫过于使用虚拟机,最常用的软件各位肯定也不陌生,大名鼎鼎的 VMware . 不过这玩意有点稍稍不是那么智能,每次安装 Linux ...
- for循环中++i和i++的区别
语法 for (语句1; 语句2; 语句3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被执行之后执行(这就是循 ...
- NTP 集群简略部署指南
NTP 集群简略部署指南 by 无若 1. NTP 简介 网络时间协议(英语:Network Time Protocol,简称NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的 ...
- Spring Cloud Alibaba - Gateway
Gateway Gateway简介 底层使用Netty框架,性能大于Zuul 配置gateway模块,一般使用yaml格式: server: port: 80 #spring boot actuato ...
- 保存Total Commander的列宽
Total Commander的默认列宽经常显示不全内容,需要手工调整,用"Menu -> Configuration -> Save Position"可以永久保存列 ...
- Redis配置及攻击利用
Redis配置及攻击利用 Redis及其安全配置 Redis介绍 redis默认会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...
- Pikachu-php反序列化、XXE、SSRF模块
一.PHP反序列化 理解这个漏洞需要明白php中的两个函数,serialize(),unserialize() 1)序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下 ...
- java对xml节点属性的增删改查实现方法
package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import o ...
- Xilinx约束学习笔记(一)—— 约束方法学
<Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...
- 算法入门 - 基于动态数组的栈和队列(Java版本)
之前我们学习了动态数组的实现,接下来我们用它来实现两种数据结构--栈和队列.首先,我们先来看一下栈. 什么是栈? 栈是计算机的一种数据结构,它可以临时存储数据.那么它跟数组有何区别呢? 我们知道,在数 ...