把HTML无嵌套表格完美导出为Excel文件的方法

Vue - 详细实现将复杂 table 表格导出到 Excel(xls) 文件,支持原生表格、ElementUI 复杂表格、Ant Design Vue 复杂表格(将前端表格“所见所得“导出) vue2,excel,xls,电子表格,antdesignvue,elementUI,table表格导出,将网页上的表格原封不动的导出成excel,vue2如何将组件库的表格导出excel,vue将页面上的表格导出,实现导出表格并合并单元格,vue+element表格导出为Excel文件,无法导出很复杂表格怎么办,vue2导出复杂表格,表格很复杂用什么办法能导出为xls文件,纯前端导出,所见所得导出表格,vue2表格很多合并行和列怎么导出成excel,复杂表格多行多列合并的导出,Vue导出复杂excel 阅读详情

原文地址:http://www.java2000.net/viewthread.jsp?tid=1977

此方法生成xls文件,不是那种简单的通过文件头来实现的那种。而是真正的Excel文件。

此方法支持那种合并的单元格,需要jxl类库的支持。

jxl 的下载地址 http://sourceforge.net/project/showfiles.php?group_id=79926 

如果打不开了,我想优快云的下载频道一定有。或者到我的网站【下载资源】里面下载。

 

如果代码看不清楚,或者有问题,请到原始地址,或者到底部看截图

 



1 我们先看页面的部分

 


 
行号客户编号合同类型客户名称事业部签订日期有效期起始有效期终止信用额度收货人收货人身份证收货省收货城市收货地址备注
...

唯一需要修改的,就是你的要导出的Table的ID 必须和Form里面的ID相同,比如都叫 "MAIN_TABLE";
当然,你换成任何其它名字都是可以的。

2 下面我们来看那个被影射成的/export/excel.jsp 的 servlet

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
* 解析页面并导出为Excel格式。
* 
* @author JAVA世纪网,www.java2000.net,赵学庆
* 
*/
public class ExcelExportor extends HttpServlet {

  private static final long serialVersionUID = 8563623076707865788L;

  @Override
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    request.setCharacterEncoding("GBK");
    String content = request.getParameter("c");
    if (content == null) {
      Writer out = response.getWriter();
      response.setCharacterEncoding("GBK");
      out.write("No Content");
      return;
    }
    try {
      export(content, response);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private WritableWorkbook wwb = null;

  private WritableSheet sheet = null;

  private void export(String content, HttpServletResponse response) throws IOException, RowsExceededException, WriteException {
    response.setContentType("application/ms-excel");
    String sheetName = getCaption(content);
    if (sheetName == null) {
      sheetName = "Sheet1";
    }
    sheetName = sheetName.replaceAll(":", "").replaceAll("[)]", "").replaceAll("[(]", "");
    response.addHeader("Content-Disposition", "attachment; filename=" + new String(sheetName.getBytes("GBK"), "ISO-8859-1")
        + ".xls");

    OutputStream os = response.getOutputStream();
    wwb = Workbook.createWorkbook(os);
    wwb.setProtected(true);

    sheet = wwb.createSheet(sheetName, 0);
    int row = 0;
    int col = 0;
    Label label = null;

    if (sheetName.trim().length() > 30) {
      label = new Label(col, row, sheetName);
      sheet.addCell(label);
      row++;
    }

    List listBody = getContent(content);
    Map
 
   map = new HashMap
  
   ();
    for (TD td : listBody) {
      if (td == null) {
        row++;
        col = 0;
        continue;
      }

      while (map.get(col + "-" + row) != null) {        
        col++;
      }

      if (td.colspan > 1 || td.rowspan > 1) {
        sheet.mergeCells(col, row, col + td.colspan - 1, row + td.rowspan - 1);
        for (int i = col; i <= col + td.colspan - 1; i++) {
          for (int j = row; j <= row + td.rowspan - 1; j++) {
            map.put(i + "-" + j, true);
          }
        }
      }

      label = new Label(col, row, td.content);
      sheet.addCell(label);

      map.put(col + "-" + row, true);
      col += td.colspan;
    }
    wwb.write();
    wwb.close();
  }

  private String getCaption(String content) {
    int begin = content.indexOf("
   
    ");
    if (begin == -1 || end == -1) {
      return null;
    }
    begin = content.indexOf(">", begin);
    if (begin == -1) {
      return null;
    }
    return content.substring(begin + 1, end);
  }

  public List getContent(String content) throws UnsupportedEncodingException {
    int begin = -1;
    int end = -1;
    int index = -1;
    String numberStr;
    int number;
    String[] tables = content.split("");
    List list = new ArrayList();
    for (String table : tables) {
      String[] trs = table.split("");
      for (String tr : trs) {

        number = 1;
        String[] ss = tr.split("");
        for (String s : ss) {
          begin = s.indexOf("
    
     ");
          TD td = new TD();
          begin = s.indexOf("rowSpan=");
          if (begin != -1) {
            end = s.indexOf(" ", begin);

            if (end == -1) {
              end = index;
            }
            numberStr = s.substring(begin + 8, end).replace(&apos;"&apos;, &apos; &apos;).replace(&apos;/&apos;&apos;, &apos; &apos;).trim();
            number = Integer.parseInt(numberStr);
            td.rowspan = number;
          }

          begin = s.indexOf("colSpan=");
          if (begin != -1) {
            end = s.indexOf(" ", begin);
            index = s.indexOf(">", begin);
            if (end == -1) {
              end = index;
            }
            if (end > index) {
              end = index;
            }
            numberStr = s.substring(begin + 8, end).replace(&apos;"&apos;, &apos; &apos;).replace(&apos;/&apos;&apos;, &apos; &apos;).trim();
            number = Integer.parseInt(numberStr);
            td.colspan = number;
          }
          td.content = s.substring(index + 1).replaceAll("//<.*?//>", "").replaceAll(" ", "").trim();
          list.add(td);
        }
        list.add(null);
      }
      list.add(null);
      list.add(null);
    }
    return list;
  }
}

class TD {
  int rowspan = 1;

  int colspan = 1;

  String content;
}
    
   
  
 

详细的我就不多解释了,基本就是解析Table的语法,唯一需要注意的,里面的CharacterEncoding() 需要你根据自己的情况进行修改。

3 最后那个web.xml的影射我就顺便给了,其实大家都知道怎么做


 

 
 
 
  
  
   ExcelExportor
  
  
  
   ExcelExportor
  
 
 
 
 
  
  
   ExcelExportor
  
  
  
   /export/excel.jsp
  

 
 

========================================================================
============================以下是截图,不是文字 ========================
========================================================================











<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
HTML表格生成Excel文件代码(纯前端) HTML表格生成Excel文件代码 纯前端 demo 可以做参考~~ 立即下载

相关推荐

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 877

纯前端导出表格

纯前端导出表格,vue导出excel表格,react导出excel表格

好川的博客 1万+

深入解析poi-tl自定义表格渲染插件中的多级子循环实现

本文深入解析了poi-tl自定义表格渲染插件中的多级子循环实现,详细介绍了其在处理复杂业务数据时的核心价值、实现原理及实战技巧。通过多级子循环机制,开发者可以高效地将层级数据结构渲染到Word表格中,显著提升代码简洁性和维护效率。文章还分享了性能优化和异常处理经验,帮助开发者更好地应用该插件。

weixin_33734785的博客 484

前端实现excel导出表格(纯前端实现)

vue中前端自己实现excel导出表格。实现是给表格绑定一个id,通过获取dom来导出。

liang04273的博客 5100

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

玩转前端之导出Excel(包教包会)

前端实现导出Excel。

爱勇宝 4181

基于深度学习的文字识别与检测算法研究

基于深度学习的文字识别与检测算法研究 1. 背景介绍 1.1 文字识别与检测的重要性 在当今信息时代,文字作为人类交流和传递信息的主要载体,无处不在。从日常生活中的路牌、广告牌,到办公场所的文件、合同,再到互联网上的网页、图片等

AI天才研究院 1043

前端导出excel的几种方法

js代码解读复制代码// 整理数据 const data = transformData(tableData.value);// 获取表头所有键 const headers = Object.keys(data[0]);// 初始化每列的最大宽度为标题行的宽度 let columnWidths = headers.map((header) => header.length);

qq_66118130的博客 2541

R语言机器学习算法实战系列(十一)MLP算法分类器 (Multi-Layer Perceptrons)

本文介绍了多层感知器(MLP)分类算法的原理和计算步骤,并通过R语言实现MLP模型。MLP是一种前馈神经网络,包含输入层、隐藏层和输出层,通过激活函数引入非线性,利用前向传播和反向传播进行训练。文章详细描述了数据预处理、数据切割、模型构建、预测和评估等步骤,并提供了乳腺癌数据集(BreastCancer_clean.csv)的下载链接。通过R包如neuralnet和caret,读者可以逐步实现MLP模型,并评估其分类性能。

专注生信领域 933

069_死区效应对输出电压畸变的补偿思路

死区效应导致逆变器输出电压在过零点出现台阶畸变,引发THD升高。其本质是死区期间续流二极管钳位造成的非线性误差,与电流方向、负载大小、母线电压耦合。补偿需结合前馈(基于电流方向自适应调整偏置)与反馈(抑制残余谐波),关键在于准确判断电流方向(采用滞环滤波避免跳变)、合理设置补偿量(随负载动态调整),并注意补偿位置、极性及限幅防漂移。调试应通过差分探头、FFT频谱等手段验证效果,最终实现全负载范围内的低畸变输出。

2401_88858637的博客 21

纯前端实现 导入 与 导出 Excel

最近经常在做 不规则`Excel`的导入,或者一些普通`Excel`的导出,当前以上说的都是纯前端来实现;下面我们来聊聊经常用到的Excel导出与导入的实现方案,本文实现技术栈以 Vue2 + JS 为例

程邓楠的博客 5707

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

[转贴]把HTML无嵌套表格完美导出为Excel文件的方法

 原文来自java200_net大牛: http://blog.youkuaiyun.com/java2000_net/archive/2008/07/21/2684994.aspx 太长了,点过去看吧

fireflyk的专栏 481

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Javascript将HTML表格导出到Excel

vue-json-excel (vue-json-excel) Javascript to export html table to Excel Javascript将HTML表格导出到Excel The method implemented in this component use HTML tables to draw the .xls files, Microsoft Excel n...

cuk5340的博客 374

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TableExport终极指南:5分钟掌握HTML表格导出Excel、CSV的完美方案

还在为网页数据导出而烦恼吗?TableExport.js让你只需一行代码就能将HTML表格轻松转换为Excel、CSV等多种办公格式。这款JavaScript库彻底改变了网页数据处理的传统方式,让表格导出变得前所未有的简单高效。 ## 🔍 痛点分析:为什么你需要TableExport? 在日常Web开发中,你是否经常遇到这样的困扰: - **数据共享困难**:用户需要将网页表格数据导出到E

gitblog_00905的博客 411

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

手机 deepseek 生成的表格怎么导出?AI 导出鸭一键导出规整表格超便捷

本文探讨了AI生成表格在手机端难以导出的问题及解决方案。文章从技术原理分析指出,DeepSeek等AI工具生成的表格本质是Markdown语法,因手机系统剪贴板编码丢失和沙盒机制限制导致导出困难。作者提供了三种技术方案:Markdown代码中转、Python脚本自动化和HTML转换法。针对效率需求,推荐使用AI导出鸭APP,该工具能精准解析Markdown表格并支持Excel/Word/PDF/思维导图等多种格式一键导出,解决AI生成内容的结构化输出难题,显著提升移动端生产力。文末邀请读者分享更多格式处理经

aikunming998的博客 1080

TableExport终极指南:3分钟实现HTML表格高效导出Excel、CSV文件

还在为网页表格数据导出而烦恼吗?你是否曾经遇到过这样的困境:用户需要将网页上的数据表格保存到本地,但你却需要编写复杂的后端接口或依赖第三方服务?现在,TableExport.js这个强大的JavaScript库为你提供了完美的解决方案。只需一行代码,就能让HTML表格轻松导出为Excel、CSV、TXT等多种格式,彻底告别繁琐的导出流程。 ## 为什么你需要TableExport? ### 传

gitblog_01094的博客 466

把HTML无嵌套表格完美导出为Excel文件(转)

此方法生成xls文件,不是那种简单的通过文件头来实现的那种。而是真正的Excel文件。 此方法支持那种合并的单元格,需要jxl类库的支持。 jxl 的下载地址 http://sourceforge.net/project/showfiles.php?group_id=79926 1 我们先看页面的部分<SCRIPT type=text/javascript> function exportExce...

卧龙小山 166

怎么让智谱清言做表格?AI导出鸭苹果版将智谱清言输出的表格智能解析为二维结构,一键导出为Excel或Word标准表格。

摘要:智谱清言生成的Markdown/HTML表格无法直接用于Excel/Word,而AI导出鸭苹果版通过四阶段智能解析(边界检测→结构解析→类型推断→多格式输出),将智谱清言的表格转换为标准Excel/Word格式,保留公式、格式和合并单元格等属性,解决复制粘贴导致的格式混乱问题,实现一键导出,提升工作效率。

2601_95832060的博客 679

Qt桌面应用数据导出全攻略:Excel、CSV、PDF与Word表格生成方案

在桌面应用开发中,数据持久化与交换是核心需求,而表格数据导出是实现这一功能的关键技术。其原理在于将程序内部数据结构(如Qt的模型/视图架构)转换为通用文件格式,以满足不同场景下的使用需求。这项技术的价值在于提升软件的专业度和用户体验,使数据能够跨平台、跨应用无缝流转。常见的应用场景包括数据分析报告生成、系统间数据交换、文档归档与打印等。本文聚焦于**Qt框架**下,针对**Excel、CSV、PDF和Word**这四种主流格式,提供了从技术选型、核心原理到工程实践的完整导出方案,特别是深入探讨了使用Qt X

weixin_33725239的博客 385

豆包生成excel表格,AI导出鸭如何终结格式乱码?一份技术架构师的硬核测评

摘要: AI生成表格在导出至Excel/WPS时普遍存在格式乱码问题,根源在于视觉表格(HTML/CSS)与逻辑表格(单元格对象、公式AST)间的语义映射缺失。实测显示,传统方案(直接复制、WPS智能文档等)的格式损失率高达32%-67%,无法保留公式与单元格类型。行业报告指出,67.3%的企业因此放弃AI生成报告。虚构工具“AI导出鸭”通过AST解析、类型推断引擎和公式重写器,实现98.4%的公式保留率和96.7%的单元格准确率,18秒完成转换,填补了结构化数据迁移的技术缺口,成为工程级保真的优选方案。

aidssxz的博客 1215
上一篇: 跟老紫竹学Java-图书销售系统
下一篇: 业余爱好者,学习JAVA在实际中有什么用途?
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值