导出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 文件,确认有乱码的问题. ...
随机推荐
- Vulhub-Mysql 身份认证绕过漏洞(CVE-2012-2122)
前言 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的.也就是说只要知道用户名, ...
- MobSF移动安全扫描平台本地化部署与简单汉化
在之前的文章MobSF移动安全扫描平台环境搭建与试用中,我们用docker进行了搭建,那么我们如何在本地直接搭建呢,其实也是很简单的. 本地化部署 我们在本地安装 其实是很简单的,里面有两个文件,在不 ...
- 浅谈Java迭代器
迭代器Iterator 概述: 迭代器(Iterator):它不是一个容器,它是一种用于访问容器的方法,可用于迭代 List.Set和Map等容器. 迭代:一个一个的往外拿. 作用:帮我们遍历或者拿到 ...
- J-Link cmd的使用
01.WHY 为什么要使用到J-LinkCommander呢???大部分情况下,我们使用J-link都是在IDE中debug使用的,出现问题,直接debug复现然后解决.这是最常见的开发方式. 但是 ...
- 【XSS-labs】level 16-20
Level 16 查看源码:发现 空格 / 和script都被转义了. 用img标签的onerror事件(在加载外部文档或图片出错后触发),空格用%0a绕过, payload如下: <img% ...
- Git(12)-- Git 分支 - 分支简介
@ 目录 1.分支简介 1.1.初始化并首次提交 首次提交对象及其树结构: git 的 cat-file 的命令用法: 1.2.修改并第二次提交 第二次提交对象及其树结构: 1.3.修改并第三次提交 ...
- NOIP 模拟 $12\; \text{简单的玄学}$
题解 有些难度 对于 \(30pts\) 直接暴力 对于 \(70pts\) 发现规律 \(2^n-a\) 与 \(a\;\;(a\in [1,2^n))\) 分解质因数后,\(2\) 的次数相同 \ ...
- Centos7上安装rabbitmq和使用
github rpm地址: https://github.com/rabbitmq/erlang-rpm 要安装rabbitmq先安装它的语言 创建erlang repo /etc/yum.repos ...
- C# Monitor.Wait() 源码追踪 (转载)
source: 释放对象上的锁并阻止当前线程,直到它重新获取该锁. 如果已用指定的超时时间间隔,则线程进入就绪队列. 可以在等待之前退出同步上下文的同步域,随后重新获取该域. [SecuritySaf ...
- 【java虚拟机】垃圾回收机制详解
作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/6486852.html 一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分 ...