当前位置: 首页 > news >正文

程序中怎样用最简单方法实现写excel文档

很多开发语言都能找到excel文档读写的库,但是在资源极其受限的环境下开发,引入这些库会带来兼容性问题。因为一个小功能引入一堆库,我始终觉得划不来。看到有项目引用的jar包有一百多个,看着头麻,根本搞不清谁依赖谁。你会说用maven、gradle来解决,但是我极不喜欢,比如在java与安卓都要支持的情况,就要碰到麻烦了。

通过分析excel文档格式,自己用模板生成,就不会碰到这类问题。xlsx格式是开放的,xml形式的,应该也会稳定很长时间。下面介绍一下分析的结果,实现方法类似于我前面写的关于docx文件的输出操作。java中可以使用freemarker、js等动态的方法替换模板,其他语言应该有类似的工具。java中用到的工具只有zip(开发语言自带),js(jdk11自带或用quickjs)或freemarker,连接如下:

java中,怎样用最简单方法实现写word文档_java 写word-CSDN博客

xls文档格式介绍,看这篇文档OOXML:详解Excel工作表(worksheet) - 知乎 (zhihu.com)

xlsx文档本质也是一个zip文件,将扩展名改成zip,然后解压,目录如下,主要内容都在xl子目录中:

worksheets目录下有各个sheet的数据,比如sheet1.xml。只要将数据逐行格式化输出到sheet1.xml就行了,输出完成后,再将内容打包成zip,然后将文件扩展名改成xlsx就可以了。

在输出到sheet1.xml时,注意单元的类型不要设置,一旦设置了t="s",<v></v>中的内容就是一个索引值(比如0,1,2,3,5...N),表示字符串是sharedStrings.xml中的第N个字符串。sharedStrings.xml中记录了所有共享的字符串,从前往后,编号分别为0、1、2...。使用sharedStrings.xml能节省一点空间,但是对于freemarker之类的格式库就麻烦了,所以单元格不建议设置t="s",而是在<v></v>之间直接输出内容。

<row r="4" ht="15.75" customHeight="1" spans="1:7">
<c r="A1" s="7"><v>1</v></c>
<c r="B1" s="9" (t="s"不可以有)><v>7</v></c>
</row>

提供一个用js输出的sheet1.xml文件,其中的list可以通过自己的一些方法传进来:

var list=[{a:1,b:'1b',c:'test1'},{a:2,b:'2b',c:'test2'}];
var txt=[`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:etc="http://www.wps.cn/officeDocument/2017/etCustomData"><sheetPr/><dimension ref="A1:C2"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="C2" sqref="C2"/></sheetView></sheetViews><sheetFormatPr defaultColWidth="9" defaultRowHeight="14.4" outlineLevelRow="1" outlineLevelCol="2"/>
<sheetData>
<row r="1" spans="1:3"><c r="A1" t="s"><v>0</v></c><c r="B1" t="s"><v>1</v></c><c r="C1" t="s"><v>2</v></c></row>`];
var i=2;
for(var l of list) {txt.push(`<row r="`,i,`" spans="1:3"><c r="A"`,i,`><v>`,l.a,`</v></c><c r="B`,i,`"><v>`,l.b,`</v></c><c r="C`,i,`"><v>`,l.c,`</v></c></row>`);i++;
}
txt.push(`</sheetData><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
<pageSetup paperSize="9" orientation="portrait"/><headerFooter/></worksheet>`);
txt.join('');

zip打包后,再用excel打开,就是下面这样。

相关文章:

程序中怎样用最简单方法实现写excel文档

很多开发语言都能找到excel文档读写的库&#xff0c;但是在资源极其受限的环境下开发&#xff0c;引入这些库会带来兼容性问题。因为一个小功能引入一堆库&#xff0c;我始终觉得划不来。看到有项目引用的jar包有一百多个&#xff0c;看着头麻&#xff0c;根本搞不清谁依赖谁。…...

《机器学习与人类学习:比较、融合与未来展望》

《机器学习与人类学习&#xff1a;比较、融合与未来展望》 一、引言二、机器学习的概念与发展&#xff08;一&#xff09;机器学习的定义与分类&#xff08;二&#xff09;机器学习的发展历程&#xff08;三&#xff09;机器学习的应用领域 三、人类学习的本质与过程&#xff0…...

Mysql 8.4.3LTS 的离线部署

文章目录 一、部署环境资源配置 二、下载地址版本选择 三、部署详情1. 上传安装包2. 解压软件包3. 安装mysql3.3.1 创建mysql用户与用户组3.3.2 授权安装文件夹3.3.3 安装libaio依赖 &#xff08;坑&#xff09;ubuntu24.04 中关于libaio的坑 3.3.4 初始化Mysql数据库3.3.5 编辑…...

h5项目打包上线报错404文件找不到

配置一下路由就可以了 1.找到项目里的这个文件 2.滑到最下面‘源码视图’ 3.找到base&#xff0c;没有的话写上一个&#xff0c;保存后打包就可以了 "h5" : {"router" : {"base" : "./"}}...

mysql上课总结(5)(MySQL的完整性约束(详细介绍))

目录 一、完整性约束。 &#xff08;1&#xff09;概念与目的。 <1>概念。 <2>目的。 &#xff08;2&#xff09;各个约束的详细&#xff08;表格&#xff09; &#xff08;3&#xff09;各个约束的简要总结。 <1>主键约束。 <2>唯一约束。 <3>非…...

复原IP地址

分割字符串的姐妹题 题目&#xff1a;93. 复原 IP 地址 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a;代码随想录 代码&#xff1a; class Solution {List<String> resnew ArrayList<>();public List<String> restoreIpAddresses(String s) …...

Effective C++ 学习笔记二

Effective C 学习笔记二 文章目录 Effective C 学习笔记二别让异常逃离析构函数绝不在构造和析构的过程中调用virtual函数令operator 返回一个reference to *this在operator中处理"自我赋值"C四种转换 别让异常逃离析构函数 C 并不禁止析构函数吐出异常&#xff0c;…...

以「JIMUMETA元宇宙体验馆」为例,探讨有哪些元宇宙场景?

让我们以「JIMUMETA元宇宙体验馆」为例&#xff0c;深入探讨元宇宙场景中提供的产品与服务。该体验馆由视创云展精心打造&#xff0c;集成了企业主展馆、元宇宙虚拟活动分会场、品牌展示分会场、线上论坛会场以及会议室接待会客等多重功能&#xff0c;旨在全方位满足企业发布会…...

RHCE的练习(8)

动态网站 lnmp&#xff08;LAMP&#xff09; 解析index.php界面 &#xff08;1&#xff09;预配&#xff0c;确保服务能够被访问 systemctl stop firewalld setenforce 0 &#xff08;2&#xff09;安装nginx服务 mount /dev/sr0 /mnt cat /etc/yum.repos.d/base.repo dnf …...

yocto是如何收集recipes,如何加入现有的bb文件

yocto通常是如何收集recipes: 在Yocto中&#xff0c;通过以下方式收集recipes&#xff1a; 层&#xff08;Layers&#xff09; Yocto项目使用层来组织recipes。层是包含配置文件、recipes和其他相关文件的目录结构。每个层有自己的目录&#xff0c;其中 recipes-* 目录用于存…...

[运维] 服务器本地网络可用性检查脚本

引言 在日常活动中&#xff0c;我遇到过一个令人头疼的问题。测试使用的远程终端在第二天继续使用时可能就发生无法与外网通信的情况&#xff0c;往往连上终端后在拉取资源时才能发现。这导致每次使用前都需要手动检查网络状况&#xff0c;增加了不必要的麻烦。为了简化这一过…...

MYSQL-显示信息关于服务器插件语法(二十五)

13.7.5.25 SHOW PLUGINS 语句 SHOW PLUGINSSHOW PLUGINS 显示信息 关于服务器插件。 SHOW PLUGINS 输出示例&#xff1a; mysql> SHOW PLUGINS\G *************************** 1. row ***************************Name: binlogStatus: ACTIVEType: STORAGE ENGINE Librar…...

【线下培训】龙信受邀参加开封市公安局举办的电子数据取证培训班

文章关键词&#xff1a;电子数据取证、手机取证、云取证、国产化取证 为了提升开封市公安机关在互联网电子数据取证分析方面的专业能力&#xff0c;龙信为开封市公安机关量身打造了一场高质量的电子数据取证分析技能培训课程。 本次培训课程不仅涵盖了电子数据取证的基础理论、…...

软件测试工程师面试整理 —— 编程与自动化!

在软件测试领域&#xff0c;编程与自动化是提升测试效率、覆盖率和可靠性的关键因素。掌握编程技术和自动化测试框架&#xff0c;能够帮助测试人员有效地执行大量重复性测试任务&#xff0c;并迅速反馈软件的质量状况。以下是编程与自动化在测试中的主要应用及相关技术介绍&…...

【鸿蒙新闻】10月29日警用鸿蒙开发者大会在北京胜利召开,开启智慧应用新时代!

10月29日&#xff0c;在公安部科技信息化局、公安部装备财务局指导下&#xff0c;由公安部第一研究所主办&#xff0c;鼎桥通信技术有限公司、OpenHarmony生态委员会及公共安全专委会协办的警用鸿蒙开发者大会在北京胜利召开。会议以“拥抱警鸿创新生态 开启智慧应用新时代”为…...

java.io.IOException: Too many open files

java.io.IOException: Too many open files 前言&#xff1a; 项目最近报 java.io.IOException: Too many open files 问题&#xff0c;大概意思是&#xff1a;意味着你的应用程序尝试打开的文件描述符数量超过了系统允许的最大数量&#xff0c;在linux中每个进程打开的文件描…...

ElementUI el-form表单多层数组的校验

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; ElementUI el-form表单多层数组的校验 页面效果&#xff1a; 数据结构&#xff1a; addform: {code: ,type: ,value: ,state: 1,remark: ,fieldList: [{fieldCode: ,resolverEntities: [{resolverType: , re…...

常见的向量范数、矩阵范数和对偶范数-对偶范数详细证明过程

文章目录 对偶范数一般定义&#xff1a; p p p-范数和 q q q-范数的对偶性特例 1&#xff1a;无穷范数和 1 范数的对偶性特例 2&#xff1a;2 范数的对偶是自身特例 3&#xff1a;有限范数与 0 范数的对偶关系&#xff08;稀疏性&#xff09;特例 4&#xff1a;核范数&#xff…...

Android 滴滴面经

Android 滴滴面经 文章目录 Android 滴滴面经一面二面三面 一面 Activity的启动的四种模式&#xff0c;四种启动模式的应用场景&#xff0c;单例模式的启动场景&#xff0c;我回答的是闹钟&#xff0c;反问&#xff1a;在单例模式下闹钟运行时点击back键&#xff0c;是回退到闹…...

angular登录按钮输入框监听

说明&#xff1a;angular实现简单的登录页面&#xff0c;监听输入框的值&#xff0c;打印出来&#xff0c;按钮监听&#xff0c;打印数据 效果图: step1:E:\projectgood\ajnine\untitled4\src\app\app.config.ts import { ApplicationConfig, provideZoneChangeDetection } …...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...