【ASP.NET】C# 将HTML中Table导出到Excel(TableToExcel)
首先,说下应用场景 就是,把页面呈现的Table 导出到Excel中。其中使用的原理是 前台使用ajax调用aspx后台,传递过去参数值,导出。使用的组件是NPOI。
前台调用:
<script type="text/javascript">
function toExcel() {
post("../TableToExcel.aspx", { act: 'tabletoexcel', html: $('#excelTable').html() });
}
function post(URL, PARAMS) {
var temp = document.createElement("form");
temp.action = URL;
temp.method = "post";
temp.style.display = "none";
for (var x in PARAMS) {
var opt = document.createElement("textarea");
opt.name = x;
opt.value = PARAMS[x];
temp.appendChild(opt);
}
document.body.appendChild(temp);
temp.submit();
return temp;
}
</script>
HTML页面内容示例:
<div class="formbody" id="excelTable">
<div class="formtitle"><span>报告详情页</span></div>
<table style="width: 100%;" id="tableCriHead" runat="server">
<tr>
<td>TEST</td>
</tr> </table>
</div>
后台生成代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.HSSF.Util;
using System.Text.RegularExpressions;
using System.IO; namespaceDemo
{
public partial class TableToExcel : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string act = GetValue("act"); //toExcel.aspx?act=tabletoexcel&html=<table class="reportstable">..</table>
if (act == "tabletoexcel")
{
TableToExcelMethod();
}
}
public void TableToExcelMethod()
{
string tableHtml = Request.Form["html"]; //接受前台table 数值字符串
if (string.IsNullOrEmpty(tableHtml)) { return; } InitializeWorkbook();
HSSFSheet sheet1 = (HSSFSheet)hssfworkbook.CreateSheet("Sheet1"); string rowContent = string.Empty;
MatchCollection rowCollection = Regex.Matches(tableHtml, @"<tr[^>]*>[\s\S]*?<\/tr>",
RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); //对tr进行筛选 NPOI.SS.UserModel.IFont fontSubTitle = hssfworkbook.CreateFont();
fontSubTitle.Boldweight = ;//加粗 NPOI.SS.UserModel.IFont fontBody = hssfworkbook.CreateFont();
fontBody.Boldweight = ;//加粗 for (int i = ; i < rowCollection.Count; i++)
{
HSSFRow row = (HSSFRow)sheet1.CreateRow(i);
rowContent = rowCollection[i].Value; MatchCollection columnCollection = Regex.Matches(rowContent, @"<th[^>]*>[\s\S]*?<\/th>",
RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); //对td进行筛选
for (int td = ; td < columnCollection.Count; td++)
{
row.CreateCell(td).SetCellValue(HtmlToTxt(columnCollection[td].Value));
} columnCollection = Regex.Matches(rowContent, @"<td[^>]*>[\s\S]*?<\/td>",
RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); //对td进行筛选
for (int td = ; td < columnCollection.Count; td++)
{
row.CreateCell(td).SetCellValue(HtmlToTxt(columnCollection[td].Value));
}
}
WriteToFile();
downFile(ppath);
} static HSSFWorkbook hssfworkbook;
public string ppath; public void WriteToFile()
{
string year = DateTime.Now.Year.ToString();
ppath = HttpContext.Current.Server.MapPath(DateTime.Now.ToString("yyyyMMddmmss") + ".xls");
FileStream file = new FileStream(ppath, FileMode.Create);
hssfworkbook.Write(file);
file.Close();
} public void InitializeWorkbook()
{
hssfworkbook = new HSSFWorkbook();
////create a entry of DocumentSummaryInformation
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "company";
hssfworkbook.DocumentSummaryInformation = dsi;
////create a entry of SummaryInformation
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "xxx";
hssfworkbook.SummaryInformation = si;
} public void downFile(string ppath)
{
if (File.Exists(ppath))
{
Response.ClearHeaders();
Response.Clear();
Response.Expires = ;
Response.Buffer = true;
Response.AddHeader("Accept-Language", "zh-cn");
string name = System.IO.Path.GetFileName(ppath);
System.IO.FileStream files = new FileStream(ppath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] byteFile = null;
if (files.Length == )
{
byteFile = new byte[];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, , (int)byteFile.Length);
files.Close();
File.Delete(files.Name);
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
Response.ContentType = "application/octet-stream;charset=gbk";
Response.BinaryWrite(byteFile);
Response.End();
}
} /// <summary>
/// POST/GET 参数获取
/// </summary>
/// <param name="context"></param>
/// <param name="name"></param>
/// <returns></returns>
private string GetValue(string name)
{
string result = ConvertToString(Request.QueryString[name], "");
if (string.IsNullOrEmpty(result))
{
result = ConvertToString(Request.Form[name], "");
}
return FilterSpecial(result);
} public static string ConvertToString(Object obj, string strDefault)
{
try
{
if (obj == null)
{
return strDefault;
}
return obj.ToString();
}
catch
{
}
return strDefault;
} /// <summary>
/// HTML转行成TEXT
/// </summary>
/// <param name="strHtml"></param>
/// <returns></returns>
public static string HtmlToTxt(string strHtml)
{
string[] aryReg ={
@"<script[^>]*?>.*?</script>",
@"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
@"([\r\n])[\s]+",
@"&(quot|#34);",
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(cent|#162);",
@"&(pound|#163);",
@"&(copy|#169);",
@"&#(\d+);",
@"-->",
@"<!--.*\n"
};
string newReg = aryReg[];
string strOutput = strHtml;
for (int i = ; i < aryReg.Length; i++)
{
Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);
strOutput = regex.Replace(strOutput, string.Empty);
}
strOutput.Replace("<", "");
strOutput.Replace(">", "");
strOutput.Replace("\r\n", "");
return strOutput;
} /// <summary>
/// 过滤特殊字符
/// 如果字符串为空,直接返回。
/// </summary>
/// <param name="str">需要过滤的字符串</param>
/// <returns>过滤好的字符串</returns>
public static string FilterSpecial(string str)
{
if (str == "")
{
return str;
}
else
{
str = str.Replace("'", "");
str = str.Replace("<", "");
str = str.Replace(">", "");
str = str.Replace("%", "");
str = str.Replace("'delete", "");
str = str.Replace("''", "");
str = str.Replace("\"\"", "");
str = str.Replace(",", "");
str = str.Replace(".", "");
str = str.Replace(">=", "");
str = str.Replace("=<", "");
str = str.Replace("-", "");
str = str.Replace("_", "");
str = str.Replace(";", "");
str = str.Replace("||", "");
str = str.Replace("[", "");
str = str.Replace("]", "");
str = str.Replace("&", "");
str = str.Replace("#", "");
str = str.Replace("/", "");
str = str.Replace("-", "");
str = str.Replace("|", "");
str = str.Replace("?", "");
str = str.Replace(">?", "");
str = str.Replace("?<", "");
str = str.Replace(" ", "");
return str;
}
}
}
}
附上NPOI的DLL下载地址: 点 击 下 载
最后,整体来说能够导出table到excel,但是同时存在一个问题,就是 导出后没有table的样式。
【ASP.NET】C# 将HTML中Table导出到Excel(TableToExcel)的更多相关文章
- js将HTML中table导出到EXCEL word (只支持IE) 另用php 配合AJAX可以支持所有浏览器
转载请注明来源:https://www.cnblogs.com/hookjc/ <HTML> <HEAD> <title>WEB页面导出为EXC ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- JS 导出网页中Table内容到excel
<html> <head> <script type="text/javascript" language="javascript" ...
- HTML Table导出为Excel的方法
HTML Table导出为Excel的方法: 直接上源码 <html> <head> <meta http-equiv="Content-Type" ...
- 使用js代码将HTML Table导出为Excel
使用js代码将HTML Table导出为Excel的方法: 直接上源码 <html> <head> <meta http-equiv="Content-Type ...
- Antd将Table导出为Excel
Antd将Table导出为Excel 在最近的项目中,需要把表格中的数据导出给财务进行统计,网上很多一键导出的按钮都没用.经过东拼西凑,最终搞定了导出,自己封装了组件. import { File } ...
- HTML table导出到Excel中的解决办法
第一部分:html+js 1.需要使用的表格数据(先不考虑动态生成的table) <table class="table tableStyles" id="tabl ...
- C# html的Table导出到Excel中
C#中导出Excel分为两大类.一类是Winform的,一类是Web.今天说的这一种是Web中的一种,把页面上的Table部分导出到Excel中. Table导出Excel,简单点说,分为以下几步: ...
- Web页中table导出到execl(带模板)
1.将excel另存为html,将其复制到aspx文件中 2.输出格式为excel InitData(); Response.Clear(); Response.Buffer = true; Resp ...
随机推荐
- 一个强大的LogParser的UI工具--logparserlizard简介
日志分析,特别是IIS日志,一般人都会想到LogParser工具,的确很强.但是命令行的操作界面令很多非专业的管理人员望而生畏,现在好了,有一个可视化的LogParser的UI工具可以使用了! Log ...
- 【LeetCode】83 - Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...
- 高质量代码之HTML、CSS篇
HTML篇 使用语义化标签<strong><fieldset><legend><ul>等等,少用<div><span> 判断网页 ...
- bzoj 3270 博物馆(高斯消元)
[题意] 两人起始在s,t点,一人pi概率选择留在i点或等概率移动,问两人在每个房间相遇的概率. [思路] 把两个合并为一个状态,(a,b)表示两人所处的状态,设f[i]为两人处于i状态的概率.则有转 ...
- Native App、Web App 还是Hybrid App?
一.什么是Native App? Native App即原生应用,即我们一般所称的客户端,是针对不同手机系统单独开发的本地应用,如需使用需要先下载到手机并安装,下载Native App的最常见方法是访 ...
- RPC进阶篇
RPC实现结构拆解 RPC过程调用详解:RPC 服务端通过 RpcServer 去导出(export)远程接口方法,而客户端通过 RpcClient 去引入(import)远程接口方法. 客户端像调用 ...
- Netmask v. Address Prefix Length
Netmask Address Prefix Length Hosts / Class C's / Class B's / Class A's (Class C) / / , / , / , / , ...
- dom select选单
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Ngix 移动端与Pc端 反向代理判断
如神马搜索和百度(http://www.baidu.com),当用桌面浏览器和移动浏览器访问的结果是不一样的.其中的手段可能有两种: 转载Ngix反向代理判断 服务端直接判断UA输出不同的界面,JAV ...
- 如何使cron任务出错时发邮件
如果设置了 MAILTO,cron就会将任务的标准输出和标准错误输出重定向到邮箱(即发送邮件).但如果只想接到错误报警邮件 -- 即任务正常执行时不发送,只在出错时发送 -- 应该怎么实现呢? 方法很 ...