技术标签: excel spring boot java intellij-idea 资源 程序人生 开发语言
所谓“03版” 和 “07版”,指的是 Microsoft Excel 版本号。这些版本号代表着不同的Excel 文件格式。2003版 Excel 使用的文件格式为 .xls,而2007版开始使用新的文件格式 .xlsx。
. xlsx 文件格式使用了一种基于 XML 的压缩方式来存储 Excel 数据,这种方式可以减小文件大小,并提高文件的可读性和可编辑性。相比之下,.xls 文件格式是一种二进制格式,常常导致文件体积较大以及许多兼容性问题。
除了文件格式之外,Microsoft Excel 2007和Microsoft Excel 2003之间还存在一些其他差异:
兼容性差异。由于文件格式的不同,Microsoft Excel 2003不能直接打开Microsoft Excel 2007的 .xlsx 文件,除非安装了文件格式转换器。
新功能差异。Microsoft Excel 2007引入了许多新功能,如数据透视表和高级图表,而这些功能在Microsoft Excel 2003中并不存在。
最大行数差异。Microsoft Excel 2007支持最多 1048576 行数据,而Microsoft Excel 2003仅支持最多 65536 行数据。
总的来说,Microsoft Excel 2007相对于2003具有更好的用户体验、更高的数据处理能力、更好的可视化效果、更好的稳定性和兼容性。但是,当需要与使用 Microsoft Excel 2003 的用户共享文件时,则需要注意版本兼容性问题。
Java解析、生成Excel比较有名的框架有POI、JXL。但是它们都存在一个严重的问题,就是非常损耗内存,也就是数据量比较大的时候有可能会出现OOM(内存溢出)的问题,但是POI有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但是依旧没有完全的解决内存消耗过大的问题。
①、写入数据(跟导入导出的逻辑很类似)
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
new Demo().writedemo();
}
public void writedemo() throws IOException {
//创建工作薄 (03 版本)
HSSFWorkbook workbookb = new HSSFWorkbook();
//创建工作表
HSSFSheet sheet = workbookb.createSheet("sheet1");
//创建行
HSSFRow cells = sheet.createRow(1);
//创建单元格
HSSFCell cell = cells.createCell(1);
//写入数据
cell.setCellValue("商品ID");
//生成一张表(IO流)
FileOutputStream fileOutputStream = new FileOutputStream("./测试数据.xls");
workbookb.write(fileOutputStream);
//关闭输出流
fileOutputStream.close();
System.out.println("文件生成完毕!");
}
}
生成成功!
②、读取数据
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.FileInputStream;
public class TestDemo {
public static void main(String[] args) throws Exception {
//读文件操作
readexcel030();
}
public static void readexcel030() throws Exception {
//1.通过文件流读取Excel工作簿
FileInputStream inPutStream = new FileInputStream("./03TestBatchData.xls");
//2.获取工作簿
Workbook workbook=new HSSFWorkbook(inPutStream);
//3.获取表(通过下标的方式来进行读取或者 可以采用表名来进行读取)
Sheet sheet = workbook.getSheetAt( 0);
//4.获取行(采用下标的方式来进行获取)
Row row=sheet.getRow( 0);
//5.获取单元格(采用下标的方式)
Cell cell = row.getCell( 0);
//6.读取数据
//String data =cell.getStringCellValue();
Integer data = (int) cell.getNumericCellValue();
System.out.println(data);
//7.关闭流
inPutStream.close();}
}
①、写入数据
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
new Demo().writedemo();
}
public void writedemo() throws IOException {
//创建工作薄 (03 版本)
XSSFWorkbook workbookb = new XSSFWorkbook();
//创建工作表
XSSFSheet sheet = workbookb.createSheet("sheet1");
//创建行
XSSFRow cells = sheet.createRow(1);
//创建单元格
XSSFCell cell = cells.createCell(1);
//写入数据
cell.setCellValue("产品ID");
//生成一张表(IO流)
FileOutputStream fileOutputStream = new FileOutputStream("./测试数据.xlsx");
workbookb.write(fileOutputStream);
//关闭输出流
fileOutputStream.close();
System.out.println("文件生成完毕!");
}
}
②、读取数据(与03类似)
03版本
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) throws IOException {
// 03 版本
writeBatchData03();
}
public static void writeBatchData03() throws IOException {
//开始时间
long start = System.currentTimeMillis();
//创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建表
HSSFSheet sheet = workbook.createSheet();
//03 版本最多只能写入65536行数据,超出这个行数就会报出异常
for (int rowNum = 0; rowNum < 65536; rowNum++) {
HSSFRow row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 20; cellNum++) {
HSSFCell cell = row.createCell(cellNum);
cell.setCellValue(cellNum+1);
}
}
//生成表
FileOutputStream fileOutputStream = new FileOutputStream("./03TestBatchData.xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("03版本表格生成完毕!");
//结束时间
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end - start)/1000+"秒");
}
}
( 即使没有创建好 03TestBatchData.xls 也会自动生成,当然此处也没有指定生成的sheet页面,默认会在sheet 0 内创建好,如果指定了,则会在指定的sheet页内进行创建。(如果没有新建一个对象,仅在原有的对象的workbook.createSheet 语句上进行修改,那么原来Excel文件创建好的sheet的内容则会被覆盖))
HSSFSheet sheet = workbook.createSheet("03");
07版本(这个时间明显要比03版本的慢很多)
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) throws IOException {
// 07 版本
writeBatchData07();
}
public static void writeBatchData07() throws IOException {
//开始时间
long start = System.currentTimeMillis();
//创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//创建表
XSSFSheet sheet = workbook.createSheet("03");
//03 版本最多只能写入65536行数据,超出这个行数就会报出异常
for (int rowNum = 0; rowNum < 65536; rowNum++) {
XSSFRow row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 20; cellNum++) {
XSSFCell cell = row.createCell(cellNum);
cell.setCellValue(cellNum+1);
}
}
//生成表
FileOutputStream fileOutputStream = new FileOutputStream("./07TestBatchData.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("07版本表格生成完毕!");
//结束时间
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end - start)/1000+"秒");
}
}
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) throws IOException {
// 07 版本大表模式
writeBigData07();
}
public static void writeBigData07() throws IOException {
//开始时间
long start = System.currentTimeMillis();
//创建工作簿(可以自定义窗口大小,不填就是使用默认值100的窗口)
SXSSFWorkbook workbook = new SXSSFWorkbook();
//创建表
SXSSFSheet sheet = workbook.createSheet("07");
//03 版本最多只能写入65536行数据,超出这个行数就会报出异常
for (int rowNum = 0; rowNum < 65536; rowNum++) {
SXSSFRow row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 20; cellNum++) {
SXSSFCell cell = row.createCell(cellNum);
cell.setCellValue(cellNum+1);
}
}
//生成表
FileOutputStream fileOutputStream = new FileOutputStream("./07TestBigData.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
System.out.println("07版本大表格生成完毕!");
//结束时间
long end = System.currentTimeMillis();
System.out.println("耗时:"+(end - start)/1000+"秒");
}
}
可以看到时间快了非常多(相比之前的07版本来说)
程序进行操作的时候记得一定要把excel文件关闭。
文章浏览阅读2.1k次。原文链接先说说编解码问题编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 Eg:str1.decode('gb2312') #将gb2312编码的字符串转换成unicode编码str2.encode('gb2312') #将unicode编码..._python中encode在什么模块
文章浏览阅读949次,点赞21次,收藏15次。本文介绍了Java中的数据输入流(DataInputStream)和数据输出流(DataOutputStream)的使用方法。
文章浏览阅读111次。ie无法兼容_ie 浏览器 newdate
文章浏览阅读239次。这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。
文章浏览阅读561次。ADI中文手册获取方法_adi 如何查看数据手册
文章浏览阅读1k次,点赞4次,收藏3次。React 获取接口数据实现分页效果以拼多多接口为例实现思路加载前 加载动画加载后 判断有内容的时候 无内容的时候用到的知识点1、动画效果(用在加载前,加载之后就隐藏或关闭,用开关效果即可)2、axios请求3、map渲染页面4、分页插件(antd)代码实现import React, { Component } from 'react';//引入axiosimport axios from 'axios';//引入antd插件import { Pagination }_react 分页
文章浏览阅读449次,点赞9次,收藏7次。这个变量与验签过程中的SignatureVerificationFilter::PUT_MESSAGE这个宏是对应的,SignatureVerificationFilter::PUT_MESSAGE,如果在签名过程中putMessage设置为true,则在验签过程中需要添加SignatureVerificationFilter::PUT_MESSAGE。项目中使用到了CryPtopp库进行RSA签名与验签,但是在使用过程中反复提示无效的数字签名。否则就会出现文章开头出现的数字签名无效。_cryptopp 签名
文章浏览阅读848次。新闻稿是新闻从业者经常使用的一种文体,它的格式与内容都有着一定的规范。本文将从新闻稿的格式和范文两个方面进行介绍,以帮助读者更好地了解新闻稿的写作_新闻稿时间应该放在什么位置
文章浏览阅读1.7k次。Java中的转换器设计模式 在这篇文章中,我们将讨论 Java / J2EE项目中最常用的 Converter Design Pattern。由于Java8 功能不仅提供了相应类型之间的通用双向转换方式,而且还提供了转换相同类型对象集合的常用方法,从而将样板代码减少到绝对最小值。我们使用Java8 功能编写了..._java转换器模式
文章浏览阅读150次。1,kubectl run创建pods[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1[root@master ~]# kubectl get podsNAME READY STATUS REST...
文章浏览阅读128次。PAT菜鸡进化史_乙级_1003“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是: 1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或..._1003 pat乙级 最优
文章浏览阅读5.6k次。CH340与Android串口通信为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio移植的具体步骤CH340串口通信驱动函数通信过程中重难点还存在的问题为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio为了在这个工程基础上进行改动,验证串口的数据和配置串口的参数,我首先在Eclipse上配置了安卓开发环境,注意在配置环境是..._340串口小板 安卓给安卓发指令