- 浏览: 71363 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
贝塔ZQ:
导出和解析excel可以用PageOffice插件试试看,挺简 ...
使用JXL导出和解析EXCEL文件 -
sshzhangwg:
ExcelProperties 是jexcel 1.0 时的类 ...
使用JXL导出和解析EXCEL文件 -
zqb666kkk:
写的挺好 但是上面几个疑问 不清楚的话 没法用
使用JXL导出和解析EXCEL文件 -
zqb666kkk:
public static int exportExce ...
使用JXL导出和解析EXCEL文件 -
zqb666kkk:
ExcelProperties是什么类
使用JXL导出和解析EXCEL文件
前些日子在做一个项目时,经常需要将一些数据导出到EXCEL文件中,而且操作很类似--一个标题,然后是子标题接着是一个列表。于是对其进行抽象,写了另一个类,完成了关键的处理。
使用模拟数据的ArrayList对象,在main()方法中进行测试可以生成下面的EXCE文件,代码如下:
调用的代码:
运行以后就可以在D盘生成一个EXCEL。
在C/S项目中,通过输出流直接向客户端输出,JSP代码里或Web框架的Action里调用代码为:
常量接口类的代码为:
解析EXCEL文件的代码如下:
package cn.com.tweb.common.excel; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.List; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import cn.com.tweb.common.Constant; import cn.com.tweb.common.StringUtil; /** * 生成EXCEL文件 * * @author ZHANGWEIGUO * @version Revision: 1.0 Date: 2008-10-24 * @see * @see */ public class ExportExcel { /** * 生成EXCEL文件到本地目录,最简的参数列表 * * @param data * @param path * @return */ public static int exportExcelToFileSystem(List<String[]> data, String path) { int result = 1; int colsNum=0; // 先判断是否传入原始数据 if (data == null || data.size() == 0) { result = Constant.EXPORT_EXCEL_NO_DATA; } else { // 根据传入的文件名路径,先生成一个文件 File exportFile = null; try { exportFile = new File(path + "/" + "test.xls"); if (exportFile == null) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; } } catch (Exception ex) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; ex.printStackTrace(); } // 如果能生成文件,就进行生成EXCEL文件的操作 if (exportFile != null) { // 生成EXCEL文件 WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(exportFile); Label lable = new Label(0, 0, "学生信息列表", ExcelProperties.getHeader()); // 创建EXCEL工作表 WritableSheet ws = wwb.createSheet("默认", 0); ws.addCell(lable); // 取得LIST中的数组大小 colsNum=data.get(0).length; // 参数的含义为:左列,左行,右列,右行 合并成一个单元格 ws.mergeCells(0, 0, colsNum-1, 0); int flag = 0; for (String temp[] : data) { if (colsNum == temp.length) { for (int i = 0; i < temp.length; i++) { lable = new Label(i, flag + 1, temp[i], ExcelProperties.getNormolCell()); ws.addCell(lable); System.out.println("flag" + flag + " -- " + temp[i]); } flag++; }else{ result=Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION; } } // 列宽的处理还需要动态的来设置,属性数据从参数总获取 ws.setColumnView(0, 40); ws.setColumnView(1, 35); ws.setColumnView(2, 20); ws.setColumnView(3, 80); ws.setColumnView(4, 30); // 写EXCEL wwb.write(); // 关闭资源 wwb.close(); } catch (IOException e) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; e.printStackTrace(); } catch (RowsExceededException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } catch (WriteException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } } } return result; } /** * 生成EXCEL文件到本地目录,带比较全面的参数列表 * * @param title 标题 * @param hasInnerTitle 子标题,如果传入NULL,就不生成子标题。 * @param colsSize 每列的宽度,如果传入的列数和LIST中的数组长度不一致,将会按默认的宽度处理 * @param data EXCEL列表数据源 * @param path 文件存放路径 * @return */ public static int exportExcelToFileSystem(String title, String innerTitle, int[] colsSize, List<String[]> data, String path) { int result = 1; int colsNum=0; // 先判断是否传入原始数据 if (data == null || data.size() == 0) { result = Constant.EXPORT_EXCEL_NO_DATA; } else { // 根据传入的文件名路径,先生成一个文件 File exportFile = null; try { exportFile = new File(path + "/" + "document.xls"); if (exportFile == null) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; } } catch (Exception ex) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; ex.printStackTrace(); } // 如果能生成文件,就进行生成EXCEL文件的操作 if (exportFile != null) { // 生成EXCEL文件 WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(exportFile); Label lable = new Label(0, 0, "学生信息列表", ExcelProperties.getHeader()); // 创建EXCEL工作表 WritableSheet ws = wwb.createSheet("默认", 0); ws.addCell(lable); // 取得LIST中的数组大小 colsNum=data.get(0).length; // 参数的含义为:左列,左行,右列,右行 合并成一个单元格 ws.mergeCells(0, 0, colsNum-1, 0); // 处理内标题 if(!StringUtil.isNullOrEmpty(innerTitle)){ lable = new Label(0, 1, innerTitle, ExcelProperties.getHeaderInner()); ws.addCell(lable); ws.mergeCells(0, 1, colsNum-1, 1); } int flag = 0; for (String temp[] : data) { if (colsNum == temp.length) { for (int i = 0; i < temp.length; i++) { lable = new Label(i, flag + ExcelProperties.dataRowBeginSize(!StringUtil.isNullOrEmpty(innerTitle)), temp[i], ExcelProperties.getNormolCell()); ws.addCell(lable); } flag++; }else{ result=Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION; } } // if (result != Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION) { // 设置列宽 if (colsSize.length == colsNum) { for (int i = 0; i < colsSize.length; i++) { ws.setColumnView(i, colsSize[i]); } } else { // 设置默认的宽度 for (int i = 0; i < colsNum; i++) { ws.setColumnView(i, 20); } result = Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION; } } // 写EXCEL wwb.write(); // 关闭资源 wwb.close(); } catch (IOException e) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; e.printStackTrace(); } catch (RowsExceededException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } catch (WriteException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } } } return result; } /** * 生成EXCEL通过浏览器导出到客户端,带比较全面的参数列表,在WEB项目中使用 * * @param title 标题 * @param hasInnerTitle 子标题,如果传入NULL,就不生成子标题。 * @param colsSize 每列的宽度,如果传入的列数和LIST中的数组长度不一致,将会按默认的宽度处理 * @param data EXCEL列表数据源 * @param path 文件存放路径 * @return */ public static int exportExcelInWeb(String title, String innerTitle, int[] colsSize, List<String[]> data, OutputStream os) { int result = 1; int colsNum=0; // 先判断是否传入原始数据 if (data == null || data.size() == 0) { result = Constant.EXPORT_EXCEL_NO_DATA; } else { // 判断传入的流 if (os != null) { // 生成EXCEL文件 WritableWorkbook wwb = null; try { wwb = Workbook.createWorkbook(os); Label lable = new Label(0, 0, "学生信息列表", ExcelProperties.getHeader()); // 创建EXCEL工作表 WritableSheet ws = wwb.createSheet("默认", 0); ws.addCell(lable); // 取得LIST中的数组大小 colsNum=data.get(0).length; // 参数的含义为:左列,左行,右列,右行 合并成一个单元格 ws.mergeCells(0, 0, colsNum-1, 0); // 处理内标题 if(!StringUtil.isNullOrEmpty(innerTitle)){ lable = new Label(0, 1, innerTitle, ExcelProperties.getHeaderInner()); ws.addCell(lable); ws.mergeCells(0, 1, colsNum-1, 1); } int flag = 0; for (String temp[] : data) { if (colsNum == temp.length) { for (int i = 0; i < temp.length; i++) { lable = new Label(i, flag + ExcelProperties.dataRowBeginSize(!StringUtil.isNullOrEmpty(innerTitle)), temp[i], ExcelProperties.getNormolCell()); ws.addCell(lable); } flag++; }else{ result=Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION; } } // if (result != Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION) { // 设置列宽 if (colsSize.length == colsNum) { for (int i = 0; i < colsSize.length; i++) { ws.setColumnView(i, colsSize[i]); } } else { // 设置默认的宽度 for (int i = 0; i < colsNum; i++) { ws.setColumnView(i, 20); } result = Constant.EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION; } } wwb.write(); wwb.close(); os.close(); } catch (IOException e) { result = Constant.EXPORT_EXCEL_NOFILE_EXCEPTION; e.printStackTrace(); } catch (RowsExceededException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } catch (WriteException e) { result = Constant.EXPORT_EXCEL_SYSTEM_EXCEPTION; e.printStackTrace(); } }else{ result = Constant.EXPORT_EXCEL_NULL_OUTPUTSTREAM_EXCEPTION; } } return result; } }
使用模拟数据的ArrayList对象,在main()方法中进行测试可以生成下面的EXCE文件,代码如下:
package test; import java.util.ArrayList; import java.util.List; public class DataMock { /** * 模拟数据 * * @return */ public static List<String[]> getListData() { List<String[]> list = new ArrayList<String[]>(); String[] temp=null; temp=new String[5]; temp[0]="姓名"; temp[1]="年龄"; temp[2]="性别"; temp[3]="身高"; temp[4]="爱好"; for (int i = 0; i < 50; i++) { temp=new String[5]; temp[0]="学生"+i; temp[1]="12"; temp[2]=i%2==0?"男":"女"; temp[3]="1.60"+(i/10*3); temp[4]="篮球,乒乓球"; list.add(temp); } return list; } }
调用的代码:
int result=ExportExcel.exportExcelToFileSystem("学生信息管理","(TWEB集团附属小学)",new int[]{24,24,18,16,20},DataMock.getListData(), "d:\\"); System.out.println("result:"+result);
运行以后就可以在D盘生成一个EXCEL。
在C/S项目中,通过输出流直接向客户端输出,JSP代码里或Web框架的Action里调用代码为:
<%@ page language="java" pageEncoding="UTF-8"%> <%@page import="java.io.OutputStream"%> <%@page import="cn.com.tweb.common.excel.ExportExcel"%> <%@page import="test.DataMock"%> <%@page import="cn.com.tweb.common.StringUtil"%> <% // 设定输出文件头 response.setCharacterEncoding("GBK"); // 当文件名为中文时请用StringUtil类的toUtf8String()方法进行转码 response.setHeader("Content-disposition", "attachment; filename="+StringUtil.toUtf8String("学生信息管理列表.xls")); // 定义输出类型 response.setContentType("application/vnd.ms-excel"); OutputStream os = response.getOutputStream(); int result=ExportExcel.exportExcelInWeb("学生信息管理","(拓旗集团附属小学)", new int[]{24,24,18,16,20},DataMock.getListData(),os); System.out.println("-------------(result:"+result+")-------------"); %>
常量接口类的代码为:
package cn.com.tweb.common; /** * 常量接口,以EXPORT_EXCEL_开头的变量,值大于0的都是导出EXCEL成功 * * @author ZHANGWEIGUO * @version Revision: 1001 Date: 2006-09-03 05:00:21 +0800 * @see * @see */ public interface Constant { // 成功导出EXCEL文件 public static final int EXPORT_EXCEL_SUCCESS=1; // 没有数据 public static final int EXPORT_EXCEL_NO_DATA=-1; // 系统异常 public static final int EXPORT_EXCEL_SYSTEM_EXCEPTION=-2; // 其他异常 public static final int EXPORT_EXCEL_OTHER_EXCEPTION=-3; // 文件路径和文件名无效 public static final int EXPORT_EXCEL_NOFILE_EXCEPTION=-4; // 集合对象中的数组存放的数据个数不一致 public static final int EXPORT_EXCEL_ARRAYNOTHESAME_EXCEPTION=-5; // 传入的OUTPUTSTREAM为空 public static final int EXPORT_EXCEL_NULL_OUTPUTSTREAM_EXCEPTION=-6; // 宽度设置参数有误,按默认值设定宽度 public static final int EXPORT_EXCEL_COLSNUM_NOTRIGHT=2; }
解析EXCEL文件的代码如下:
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import org.apache.commons.fileupload.FileItem; public class ParseExcel { /** * 用COMMON UPLOAD进行EXCEL文件上传,得到fileItem对象,这里 * 进行解析,返回集合对象。该方法适合在JAVA工程中使用。 * * @param fileItem * @param beginIndex 正式数据的起始行 例如EXCEL文件 * 有大标题和小标题和列标题,那么该参数应为 4 * @return * @throws BiffException * @throws IOException */ public static List<String[]> redExcel(FileItem fileItem,int beginIndex){ // 保存结果集 List<String[]> result=null; // 保存EXCEL每行的所有单元格中的数据 String[] temp=null; try { if (fileItem != null) { Workbook workBook = Workbook.getWorkbook(fileItem .getInputStream()); Sheet sheet = workBook.getSheet(0); Cell cell = null; int rowSize = sheet.getRows(); int colSize = sheet.getColumns(); result = new ArrayList<String[]>(); for (int i = beginIndex - 1; i < rowSize; i++) { temp = new String[colSize]; for (int t = 0; t < colSize; t++) { // 保存EXCEL每行的所有单元格中的数据,在内循环外面进行定义 cell = sheet.getCell(t, i); String content = ""; if (cell.getContents() != null) { // 去空格,特殊字符和回车键盘 content = cell.getContents().replace("%", "") .replace("|", "").replace(" ", "") .replaceAll("\\n", "") .replaceAll("\\r", "").trim(); } temp[t] = content; } // 将每列的的数据存入结果集中 result.add(temp); } } } catch (Exception ex) { ex.printStackTrace(); } return result; } /** * 用COMMON UPLOAD进行EXCEL文件上传,得到fileItem对象,这里 * 进行解析,返回集合对象。该方法适合在WEB项目中使用。 * * @param fileItem * @param beginIndex 正式数据的起始行 例如EXCEL文件 * 有大标题和小标题和列标题,那么该参数应为 4 * @return * @throws BiffException * @throws IOException */ public static List<String[]> redExcel(File file,int beginIndex){ // 保存结果集 List<String[]> result=null; // 保存EXCEL每行的所有单元格中的数据 String[] temp=null; try { Workbook workBook = Workbook.getWorkbook(file); Sheet sheet = workBook.getSheet(0); Cell cell = null; int rowSize = sheet.getRows(); int colSize = sheet.getColumns(); result=new ArrayList<String[]>(); for (int i = beginIndex-1; i < rowSize; i++) { // 保存EXCEL每行的所有单元格中的数据 temp=new String[colSize]; for (int t = 0; t < colSize; t++) { cell = sheet.getCell(t, i); String content=""; if (cell.getContents()!=null) { // 去空格,特殊字符和回车键盘 content = cell.getContents().replace("%", "") .replace("|", "") .replace(" ", "") .replaceAll("\\n", "") .replaceAll("\\r", "").trim(); } temp[t]=content; } // 将每列的的数据存入结果集中 result.add(temp); } } catch (Exception ex) { ex.printStackTrace(); } return result; } }
评论
5 楼
贝塔ZQ
2016-09-14
导出和解析excel可以用PageOffice插件试试看,挺简单的
4 楼
sshzhangwg
2015-08-30
ExcelProperties 是jexcel 1.0 时的类。
3 楼
zqb666kkk
2012-07-13
写的挺好 但是上面几个疑问 不清楚的话 没法用
2 楼
zqb666kkk
2012-07-13
public static int exportExcelInWeb(String title,
. String innerTitle, int[] colsSize, List<String[]> data,
. OutputStream os) {
这个方法里 的
OutputStream os
这个参数怎么传过来 的 能不能完整的例子整出来看看 怎么实现客户端通过浏览器 把excel文件放到 自定义的目录
. String innerTitle, int[] colsSize, List<String[]> data,
. OutputStream os) {
这个方法里 的
OutputStream os
这个参数怎么传过来 的 能不能完整的例子整出来看看 怎么实现客户端通过浏览器 把excel文件放到 自定义的目录
1 楼
zqb666kkk
2012-07-13
ExcelProperties是什么类
发表评论
-
使用程序来合并jar包
2013-09-03 16:43 1970逻辑比较简单,直接贴代码了。 package util; ... -
在Servlet获取spring管理的java对象
2013-05-22 17:00 1000在Servlet获取spring管理的java对象: ... -
sybase数据库使用mybatis框架插入数据返回主键值
2012-12-16 18:10 2758sybase数据库使用mybatis框架插入数据返回主键值 ... -
MyBatis3使用小结
2012-03-15 11:26 1408使用mybatis3-spring进行数据库操作时,出现 ... -
使用Java RMI访问xmemcached暴露的JMX服务
2012-02-24 09:58 2606我们可以通过JMX监控xmemcached状态,xme ... -
配置环境变量时遇到的小问题
2011-10-12 13:55 886今天在配置MAVEN的环境变量时遇到了小问题,在配 ... -
程序语言面向对象杂感<之一>
2011-09-08 12:02 1032类是对事物的状态和行为的抽象,如果做到了A类的状态变化 ... -
java基础很重要
2011-09-05 10:31 869一直在做项目,应用层的,导致JAVA基础越来越薄弱,亟待加 ... -
Tapestry的启动流程
2009-09-22 21:07 14281.启动应用服务器如Oracle-Weblogic或Apach ... -
使用Weblogic的常见问题
2009-08-25 17:22 20301. weblogic的domain中配置的JDK和m ... -
Java Swing版的PDF切割合并器
2009-01-21 12:57 1913前些天看了yoyo08同学的博文 用iText分割 ... -
使用eclipse遇到的"灵异"事件
2009-01-05 17:13 854下午用eclipse写着代码,不小心一伸腿把主机的插头 ...
相关推荐
3. **解析保存**:使用JXL库读取并解析Excel文件。以下是一个简单的示例代码片段,展示如何打开文件并遍历工作表: ```java Workbook workbook = Workbook.getWorkbook(new File("path_to_your_excel_file")); ...
"jxl模版生成excel" 指的是使用JExcelAPI(简称jxl)这个Java库来创建基于模板的Excel文件。JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可...
在描述中提到了一个博客链接,虽然具体内容未给出,但我们可以推测这篇博客可能详细介绍了如何使用JXL库来解析和生成Excel文件。通常,这样的教程会涵盖以下知识点: 1. **安装JXL**:介绍如何将JXL库添加到Java...
通过JXL库和EL表达式,开发者可以快速生成动态的、格式化的Excel文件,这在数据分析、报表生成或数据导出场景中非常有用。尽管JXL库在处理现代Excel格式上可能稍显过时,但它仍然是一个实用的工具,尤其适合处理较旧...
Java中的JXL库是一个非常实用的工具,它允许开发者在应用程序中读取、写入和修改Excel文件。这个库特别适合那些需要处理大量数据并希望将数据格式化为表格的项目。下面我们将深入探讨JXL库在Java Excel解析中的应用...
本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `jxl`库提供了一套完整的API来操作Excel文件,包括创建新的工作簿、添加...
本篇文章将详细介绍如何利用jxl库来解析Excel。 一、jxl库介绍 jxl库是由Waqas Bhatti开发的,它提供了Java API,使得开发者能够方便地与Excel文件进行交互。jxl库支持读取和写入Excel文件中的工作表、单元格、公式...
《jxl导出Excel的深度解析与应用》 在信息化高度发展的今天,Excel作为数据处理和分析的重要工具,被广泛应用于各个领域。Java作为一种强大的编程语言,如何与Excel进行交互,成为了许多开发者关注的焦点。jxl库...
【标题】"简单的Jxl.jar 解析Excel"指的是使用Java编程语言中的一种库——Jxl.jar,来处理和解析Excel文件。Jxl是一个开源的Java库,它允许开发者读取、写入和修改Excel文件,而无需依赖Microsoft Office。这个过程...
Java解析Excel文件是Java开发中常见的任务,尤其是在处理数据导入导出、数据分析或者报表生成时。JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。在Java中,JXL.jar库提供了一种简单且高效的...
在Java编程环境中,处理Excel文件...通过学习和实践使用JXL解析Excel文件,你不仅可以提升Java编程能力,还能在数据处理领域拓展自己的技能树。无论是数据导入、报表生成还是自动化测试,这都将是一个非常实用的工具。
在Java编程环境中,处理Excel数据是一项常见的任务,而`jxl`库是一个广泛使用的开源库,专门用于读取和写入Microsoft Excel文件。本篇将详细介绍如何使用`jxl`库进行Excel的操作,包括导入、导出、读取以及更新Excel...
1. **读取Excel文件**:JXL可以解析Excel文件中的所有工作表,获取单元格的值、格式、颜色、边框、字体等信息。通过`Workbook`类,你可以打开一个Excel文件,并通过`Sheet`类访问每个工作表。`Cell`类则用于获取...
《JXL:解析Excel的利器》 在Java编程领域中,处理Excel文件是一项常见的任务,尤其是在数据导入导出、报表生成等场景下。而JXL库正是这样一款强大的工具,它为Java开发者提供了方便快捷的方式来读取和写入Excel...
总结来说,"利用jxl实现excel解析"涉及的关键知识点包括:jxl库的使用、Excel文件的读取与写入、工作簿和工作表的操作、单元格的访问与样式设置,以及数据处理逻辑的实现。掌握这些技能对于进行Java中的Excel操作至...
本资源主要讲解了如何利用JXL和Apache POI这两个库来实现Excel的导入与导出,并介绍了DTREE(决策树)的使用。 JXL是一个广泛使用的Java库,它提供了读写Microsoft Excel文件的能力,支持多种格式,如.xls。使用JXL...
JXL是一个开源库,专门设计用来读写Excel文件(.xls格式),使得在Java环境中解析Excel数据变得简单易行。 首先,让我们深入了解JXL库的基本用法。JXL支持多种操作,包括读取、创建、修改和写入Excel文件。以下是...
JXL 操作 EXCEL 的各个类的解析是 Java 语言中操作 Excel 文件的主要方法之一。JXL 通过提供了多种类来实现对 Excel 文件的读写操作。 首先,JXL 提供了一个抽象类 Workbook,该类相当于是一个工具类,用于生成 ...
JXL库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Excel文件,而无需依赖Microsoft Office。本文将详细讨论如何使用JXL库创建一个通用的工具类来读取Excel模板并填充数据。 首先,我们需要了解JXL库的...
### Java Jxl (导入导出Excel):详细知识点解析 #### 概述 Jxl 是一款用于处理 Excel 文件的 Java 库,支持多种版本的 Excel 文件格式,包括 Excel 95 至 2000 版本。该库允许开发者以纯 Java 的方式创建、读取和...