使用NPOI将TABLE内容导出到EXCEL
项目中需要将页面中的table内容导出到EXCEL,在用了几种方法后发现NPO是最快&最好的
需要应用 NPOI.dll 还有个Ionic.Zip.dll不知道有用没,没去研究,两个DLL都放到bin目录里了
假设页面中有个<div id="excelTable"><table>.....</table></div>需要导出到EXCEL
在页面中加一个button
<input type="button" name="excelBut" value="导出Excel" onclick="toExcel()" class="sgbtn" />
页面任意部分插入一段javascript:
function toExcel()
{
post("tools/toExcel.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;
}
toExcel.aspx文件空白即可
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="toExcel.aspx.cs" Inherits="tools_toExcel" %>
toExcel.aspx.cs代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Text;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.HSSF.Util;
using System.Text.RegularExpressions;
using System.IO; public partial class tools_toExcel : 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")
{
TableToExcel();
}
} public void TableToExcel()
{
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 = 800;//加粗 NPOI.SS.UserModel.IFont fontBody = hssfworkbook.CreateFont();
fontBody.Boldweight = 500;//加粗 for (int i = 0; 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 = 0; td < columnCollection.Count; td++)
{
row.CreateCell(td).SetCellValue(StrTools.HtmlToTxt(columnCollection[td].Value));
} columnCollection = Regex.Matches(rowContent, @"<td[^>]*>[\s\S]*?<\/td>",
RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); //对td进行筛选
for (int td = 0; td < columnCollection.Count; td++)
{
row.CreateCell(td).SetCellValue(StrTools.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 = 0;
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 == 0)
{
byteFile = new byte[1];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, 0, (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 = ConvertData.ConvertToString(Request.QueryString[name], "");
if (string.IsNullOrEmpty(result))
{
result = ConvertData.ConvertToString(Request.Form[name], "");
}
return StrTools.SafeSqlstr(result);
}
}
这样就可以将HTML中的TABLE方便地导出EXCEL了~代码有点乱,别介意哈。
使用NPOI将TABLE内容导出到EXCEL的更多相关文章
- 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(样式设计)
转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...
- jsp 页面内容导出到Excel中
日常使用网络资源时经常需要把网页中的内容下载到本地,并且导出到Excel中,现在介绍一种非常简单的方式实现网络资源的下载.只需要讲jsp的最上面加上一句话 <% response.reset() ...
- 将页面上的内容导出到Excel
<asp:Button ID="lkbExport" runat="server" Name="Save" Text="导出 ...
- html5中 table数据导出到excel文件
JS代码: /** * table数据导出到excel * 形参 table : tableId ; * sheetName : 工作薄名 * fileName : 文件名 * linkId :隐藏的 ...
- 【WPF】将DataGrid内容导出到Excel
引言 在做项目时要求将datagrid的内容导出到Excel,以前做winform项目时遇到过,就把代码搬过来用,但wpf和winform还是有些不同,就修改了一些东西,使其能实现这个功能. 本文是导 ...
- vue项目中的elementUI的table组件导出成excel表
1.安装依赖:npm install --save xlsx file-saver 2.在放置需要导出功能的组件中引入 import FileSaver from 'file-saver' impor ...
- 纯JS 将table表格导出到excel
html <div > <button type="button" onclick="getXlsFromTbl('tableExcel','myDiv ...
- asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL
代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...
随机推荐
- http://blog.csdn.net/hitmediaman/article/details/6636402
http://blog.csdn.net/hitmediaman/article/details/6636402
- OpenCV 线性混合(4)
带滚动条的线性混合示例: #include "stdafx.h" #include<iostream> #include<thread> #incl ...
- EBay .Net SDK Api 实践
1.请求流程介绍 提供SOA地址:https://api.ebay.com/wsapi WSDL生成的代码在WebService.cs文件当中. ApiCall封装了所有的RPC, ...
- 为OpenResty增加nginx_upload_module模块
1.下载 http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gz 或 http://pan.baidu.com/s ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- window 安装Mysql 5.6 发生系统错误 1067
问题: #安装MySQL服务:mysqld -install MySQL5 D:\Program Files\mysql_5.6.24_winx64\bin>mysqld -install My ...
- MongoDB的数据库基本操作(二)
创建数据库 >use mydb switched to db mydb 查看所有的数据表 >show collections system.indexes 创建数据表 >db.c ...
- VS重新生成后仍然执行旧代码
主要可能有以下三种情况: 1,生成的代码放错位置了,在iis中浏览打开网站目录,确保路径正确,不要自以为是. 2,页面和动态库不匹配,都要更新. 3,清除浏览器的缓存.
- DataContract
DataContractAttribute Class is in the System.Runtime.Serialization namespace. But you should add ref ...
- 李洪强经典面试题136-KVO-KVC
李洪强经典面试题136-KVO-KVC KVC-KVO KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作: ①检查是否存在相应key的set方法,如果存在,就调用se ...