• 使用NPOI将TABLE内容导出到EXCEL


    项目中需要将页面中的table内容导出到EXCEL,在用了几种方法后发现NPO是最快&最好的

    需要应用 NPOI.dll 还有个Ionic.Zip.dll不知道有用没,没去研究,两个DLL都放到bin目录里了

    NPOIX dll点击下载

    假设页面中有个<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[^>]*>[sS]*?</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[^>]*>[sS]*?</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[^>]*>[sS]*?</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了~代码有点乱,别介意哈。

  • 相关阅读:
    spring管理hibernate session的问题探究
    【J2EE入门】13个规范
    WCF基础
    初识WCF
    一路风雨,一路收获
    【项目经验】——JSON.parse() && JSON.stringify()
    【项目经验】--EasyUI DataGrid之右键菜单
    NuGet 发布
    【项目经验】之——Controller向View传值
    【项目总结】之——JS分割字符串
  • 原文地址:https://www.cnblogs.com/relax/p/3586355.html
Copyright © 2020-2023  润新知