JAVA excel操作

合集下载

java excel删除列方法

java excel删除列方法

Java Excel删除列方法在日常开发和数据处理中,使用Java操作Excel文件是一项常见的任务。

而在处理Excel文件中,删除列是一个常见的需求。

本文将介绍如何使用Java来删除Excel文件中的列,并提供一些实用的代码示例。

1. Apache POI介绍Apache POI是一个开源的Java库,用于处理Microsoft Office格式的文件,包括Excel。

通过Apache POI,我们可以轻松地读取、写入和修改Excel文件,包括删除列操作。

2. 删除Excel列的基本思路在删除Excel文件中的列时,基本的思路是读取整个文件,将不需要的列排除出去,然后再写回到文件中。

接下来将详细介绍如何实现这一过程。

3. 读取Excel文件我们需要使用Apache POI来读取Excel文件。

我们可以使用HSSFWorkbook和HSSFSheet来表示Excel文件和工作表,然后使用这些类来读取文件中的数据。

```javaFileInputStream file = new FileInputStream(new File("input.xls"));HSSFWorkbook workbook = new HSSFWorkbook(file); HSSFSheet sheet = workbook.getSheetAt(0);```4. 删除列一旦我们读取了Excel文件,就可以开始删除列。

删除列的关键是将不需要的列从工作表中移除,并且移动其他列,以保持文件的完整性。

```java// 删除第3列for (int i = 0; i <= sheet.getLastRowNum(); i++) {HSSFRow row = sheet.getRow(i);if (row != null) {row.removeCell(row.getCell(2));}}```在删除列后,我们需要将文件写回磁盘,以保存修改后的内容。

Java Excel页面设置(页边距,页面大小,方向,缩放比例

Java Excel页面设置(页边距,页面大小,方向,缩放比例

Java Excel页面设置:页边距、页面大小/方向/背景、缩放比例、打印范围关于内容概述本文介绍如何通过Java 程序进行Excel页面设置,如设置页边距、页面大小、页面方向、页面背景、页面缩放比例、打印范围等等。

可参考如下方法进行相关代码操作:关于工具使用工具使用免费版Spire系列的Excel类库,Free Spire.XLS for Java,可自行在中文官网下载jar 包,下载后解压将lib文件夹下的Spire.Xls.jar文件导入Java程序(如下图导入结果);Maven 程序中的jar导入方法需要配置pom.xml文件,可参考官方教程文档来导入,这里不作赘述。

注意:这里页边距以英寸为单位,在Microsoft Excel中,页边距以厘米为单位。

(1 英寸= 2.54 厘米)Java 程序代码示例import com.spire.xls.*;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;public class PageMargin {public static void main(String[] args)throws IOException {//加载测试文档Workbook workbook = new Workbook();workbook.loadFromFile("test.xlsx");//获取第一个工作表Worksheet sheet = workbook.getWorksheets().get(0);//设置上下左右页边距PageSetup pageSetup = sheet.getPageSetup();pageSetup.setTopMargin(3);pageSetup.setBottomMargin(2);pageSetup.setLeftMargin(1);pageSetup.setRightMargin(1);//设置页眉页脚页边距pageSetup.setHeaderMarginInch(2);pageSetup.setFooterMarginInch(2);//设置页面方向pageSetup.setOrientation(ndscape);//设置纸张大小pageSetup.setPaperSize(PaperSizeType.PaperA4);//设置页面缩放大小pageSetup.setZoom(80);//加载图片,设置成页面背景BufferedImage image = ImageIO.read( new File("background.png"));pageSetup.setBackgoundImage(image);//设置页面打印区域pageSetup.setPrintArea("A1:I16");//保存文档workbook.saveToFile("result.xlsx", ExcelVersion.Version2013); workbook.dispose();}}页面设置效果:图1-页面背景图2-页面方向/缩放比例/纸张大小图3-页边距图4-打印区域。

Java操作Excel之JXL(填充EXCEL模板)转载

Java操作Excel之JXL(填充EXCEL模板)转载

Java操作Excel之JXL(填充EXCEL模板)转载Java操作Excel之理解JXL--读取Excel 说到如何⽤JXL读取Excel⽂件,现在来看看如何读取Excel模板然后把动态数据写⼊到模板以⽣成特定格式的Excel。

同样的思路,先来考虑下会涉及到那些对象,和上篇⽂章读取相⽐这⾥涉及到⼀个写⼊的步骤,所以JXL必然会提供⼀个对象来⽀持写⼊,这就是WritableWorkbook。

那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了⼏个静态的createWorkbook⽅法返回WritableWorkbook实例,可以看到众多createWorkbook⽅法主要分为两类:⼀个参数和两个参数。

简单分析可以得知前者仅仅是⽤来直接⽣成Excel⽂件,后者先读取模板再向模板写⼊数据然后⽣成Excel。

(还有⼀个三参数⽅法加上⼀个⽤来设置workbook的参数)现在按照上篇⽂章中所讲述的流程来看看读取模板并写⼊需要那些步骤。

第⼀步:选择模板⽂件:Workbook wb = Workbook.getWorkbook(new File(realpath));第⼆步:通过模板得到⼀个可写的Workbook:WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);第⼀个参数是⼀个输出流对象,⽐如可以ByteArrayOutputStream targetFile = new ByteArrayOutputStream();这样定义这个输出流对象。

第⼆个参数代表了要读取的模板。

第三步:选择模板中名称为StateResult的Sheet:WritableSheet wws = wwb.getSheet("StateResult");如果需要也可以创建SheetWritableSheet wws = wwb.createSheet("Sheet名称",i);第四步:选择单元格,写⼊动态值,根据单元格的不同类型转换成相应类型的单元格:Label A1 = (Label)wws.getWritableCell(0,0);A1.setString("单元格内容")或Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.NumberA2.setValue(3.3);也可以创建新的单元格并且加⼊到Sheet中Label C1 = new Label(2,0,"单元格内容");wws.addCell(C1);或Number C1 = new Number(2,0,3.3);wws.addCell(C1);在⽣成Excel报表的时候还会遇到⼀种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显⽰,⽽字符串型单元格以另⼀种格式显⽰。

java excelwriter 文档说明

java excelwriter 文档说明

java excelwriter 文档说明
Java ExcelWriter文档说明
Java ExcelWriter是一个用于在Java应用程序中生成和处理Excel文档的工具。

它提供了一系列的API和功能,使开发者可以轻松地创建、编辑和导出Excel文件。

该工具使用纯Java编写,可以与任何Java应用程序集成。

它支持多种Excel格式,包括.xls和.xlsx,并且可以进行单元格格式设置、数据排序、筛选等操作。

使用Java ExcelWriter,开发者可以通过以下步骤生成Excel文档:
1. 创建一个工作簿(Workbook)对象,该对象表示整个Excel文件。

2. 在工作簿中创建一个工作表(Sheet),可以创建多个工作表。

3. 在工作表中创建行(Row)对象,可以通过行对象创建单元格(Cell)对象。

4. 设置单元格的值和格式,可以通过Cell对象的方法进行操作。

5. 根据需要,可以进行单元格的合并、行高、列宽的调整等操作。

6. 最后,将工作簿保存为一个Excel文件。

除了生成Excel文件,Java ExcelWriter还提供了读取和解析Excel文件的功能。

开发者可以使用工具提供的API获取Excel文档中的数据,并进行相应的处理。

总的来说,Java ExcelWriter是一个功能强大且易于使用的工具,可以帮助开发
者轻松地在Java应用程序中生成和处理Excel文档。

无论是导出数据报表还是进行数据分析,Java ExcelWriter都是一个不错的选择。

希望以上内容能够满足任务名称描述的内容需求,若还有其他问题,请随时告知。

java操作Excel 详解

java操作Excel 详解

{ for ( int j = 0 ; j < columnum; j ++ ) {
Cell cell1 = sheet.getCell(j, i);
String result = cell1.getContents(); System.out.print(result);
System.out.print( " \t " );
JXL 操作 Excel
Jxl create 代码 java 表格操作类库 jxl poi jxl 是一个韩国人写的 java 操作 excel 的工具, 在开源世界中,有两套比较有影响的 API 可供使用,一 个是 POI,一个是 jExcelAPI。其中功能相对 POI 比较弱一点。但 jExcelAPI 对中文支持非常好,API 是纯 Java 的,并不依赖 Windows 系统,即使运行在 Linux 下,它同样能够正确的处理 Excel 文件。另 外需要说明的是,这套 API 对图形和图表的支持很有限,而且仅仅识别 PNG 格式。 使用如下: 搭建环境 将下载后的文件解包,得到 jxl.jar,放入 classpath,安装就完成了。 基本操作 一、创建、写入文件 拟生成一个名为“test.xls”的 Excel 文件,其中第一个工作表被命名为 “第一页”,大致效果如下: package test;
public class UpdateExcel { public static void main(String args[]) { try { // Excel 获得文件 Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb); // 添加一个工作表 WritableSheet sheet = book.createSheet( " 第二页 " , 1 ); sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " )); book.write(); book.close(); } catch (Exception e) { System.out.println(e); } }

Java 插入、隐藏、显示、删除Excel行或列

Java 插入、隐藏、显示、删除Excel行或列

Java 插入、隐藏/显示、删除Excel行或列概述操作Excel工作表时,对表格中的行或列数据可执行,包括插入、隐藏、显示、删除等在内的多种操作需求,本文将通过Java代码示例演示每种操作的具体实现方法。

文中方法使用了Java Excel类库(Free Spire.XLS for Java 免费版),可通过官网下载包,解压,并将lib文件中的jar文件导入Java程序;或者通过maven仓库导入。

导入效果如下:Java代码示例1. 插入行或列import com.spire.xls.*;public class InsertRowAndColumn {public static void main(String[] args) {//加载文档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//获取工作表Worksheet sheet = wb.getWorksheets().get(0);sheet.insertRow(2);//在第2行插入默认格式的行//sheet.insertRow(2,2);//在第2行插入默认格式的两行//sheet.insertRow(5,1,InsertOptionsType.FormatAsAfter);//在第5行插入和下一行格式相同的两行sheet.insertColumn(3);//在第3列插入默认格式的列//sheet.insertColumn(3,2);//在第3列插入默认格式的两列//sheet.insertColumn(3,1,InsertOptionsType.FormatAsBefore);//在第3列插入和前一列格式相同的一列//保存文档wb.saveToFile("InsertRowAndColumn.xlsx");wb.dispose();}}插入默认格式的一行或列,效果图:插入默认格式的两行或列,效果图:插入带格式的行或列,效果图:2. 隐藏、显示行或列import com.spire.xls.*;public class HideAndShowRowOrColumn {public static void main(String[] args) {//加载文档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//获取指定工作表Worksheet sheet = wb.getWorksheets().get(0);//隐藏第9行sheet.hideRow(9);//隐藏第3列sheet.hideColumn(3);//sheet.showRow(3);//显示行//sheet.showColumn(3);//显示列//保存文档wb.saveToFile("HideAndShow.xlsx");wb.dispose();}}隐藏行或列,效果图:3. 删除行或列import com.spire.xls.*;public class DeleteRowAndColumn {public static void main(String[] args) {//加载文档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//获取工作表Worksheet sheet = wb.getWorksheets().get(0); sheet.deleteRow(1);//删除第1行//sheet.deleteRow(1,2);//删除第1行及下一行在内的两行sheet.deleteColumn(4);//删除第4列//sheet.deleteColumn(4,2);//删除第4列及右侧一列在内的两列//保存文档wb.saveToFile("DeleteRowAndColumn.xlsx");wb.dispose();}}删除一行或一列,效果图:删除多行或多列,效果图:。

java 复杂excel表格解析

java 复杂excel表格解析

Java解析Excel表格是开发中常见的任务,特别是在处理复杂的Excel 表格时,更需要精确的处理和高效的算法。

本文将介绍Java解析复杂Excel表格的方法和技巧,帮助开发人员更好地处理Excel数据。

一、了解Excel表格结构1.1 我们需要了解Excel表格的结构。

Excel表格是由多个工作表(Sheet)组成,每个工作表由行和列构成,行和列交叉形成单元格,每个单元格可以包含数据、公式或者其他类型的内容。

在处理复杂Excel表格时,我们需要关注不同工作表之间的关联关系、单元格的格式和特殊数据类型等问题。

1.2 我们需要分析Excel表格中的数据类型,包括字符串、数字、日期、公式等不同类型的数据。

在解析Excel表格时,对于不同类型的数据要采用不同的处理方式,以确保数据的准确性和完整性。

二、选择合适的Java库2.1 在Java中有多个开源库可以用于解析Excel表格,如POI、JExcel、Apache POI等。

针对复杂Excel表格的解析,我们需要选择一个强大灵活的库来处理。

POI是Apache基金会下的一个开源项目,提供了强大的Excel表格处理功能,包括读取、写入、格式转换等多种能力,因此在处理复杂Excel表格时,推荐选择Apache POI作为解析库。

2.2 根据Excel表格的实际情况,选择合适的POI组件进行解析。

针对.xlsx格式的Excel表格,可以使用XSSFWorkbook和XSSFSheet进行解析;对于旧版的.xls格式的Excel表格,可以使用HSSFWorkbook和HSSFSheet进行解析。

根据实际情况选择合适的组件可以提高解析效率和准确性。

三、处理复杂数据逻辑3.1 在解析复杂Excel表格时,经常会遇到数据逻辑复杂、格式多样的情况。

对于这种情况,我们需要设计合适的数据结构和算法,以便更好地处理Excel表格中的数据。

3.2 一种常见的方法是使用模型-视图-控制器(MVC)的设计模式,将Excel表格解析的过程分为模型层(数据结构定义和处理逻辑)、视图层(界面呈现)和控制层(数据交互和业务逻辑)三部分,以便更好地规划和实现解析过程。

javaexcel解析常见方法

javaexcel解析常见方法

一、介绍在日常工作中,我们经常会遇到需要处理Excel文件的情况。

而对于Java程序员来说,对Excel文件进行解析是一项常见的任务。

本文将介绍一些常见的JavaExcel解析方法,希望能够帮助大家更好地处理Excel文件。

二、使用POI库解析Excel1. POI库简介POI(Poor Obfuscation Implementation)是Apache软件基金会的开源项目,旨在提供Java程序操作Microsoft Office格式文件的功能。

在处理Excel文件时,可以使用POI库来完成读取、写入和修改Excel文件的操作。

2. 使用POI库解析Excel的基本步骤a. 创建一个输入流,将Excel文件加载到工作簿中。

b. 获取工作表,可以根据工作表的名称或索引来获取。

c. 遍历工作表,获取每一行的数据。

d. 遍历每一行,获取单元格的数值并进行相应的处理。

3. 代码示例```java// 读取Excel文件File file = new File("test.xlsx");FileInputStream fis = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(fis);// 获取工作表XSSFSheet sheet = workbook.getSheetAt(0);// 遍历工作表for (Row row : sheet) {// 遍历行for (Cell cell : row) {// 获取单元格的值String value = cell.getStringCellValue();// 进行相应的处理}}// 关闭流fis.close();```4. 注意事项使用POI库解析Excel时,需要注意处理空单元格、日期格式、数值类型等特殊情况,以确保解析的准确性。

三、使用EasyExcel库解析Excel1. EasyExcel库简介EasyExcel是阿里巴巴开源的一款针对大数据量Excel操作的Java库。

java excel复选框代码

java excel复选框代码

一、介绍Java是一种面向对象的编程语言,具有跨评台、高性能、安全性好等特点,而Excel是一款广泛应用的电子表格软件,具有处理数据、制作图表等强大功能。

在Java中操作Excel文件是一项常见的任务,其中复选框是一种常见的元素,本文将介绍如何使用Java代码操作Excel中的复选框。

二、复选框的添加在Java中操作Excel文件通常使用Apache POI库,首先需导入相应的jar包,并创建一个新的Excel文件。

通过POI库的API可以在指定位置创建复选框,并指定复选框的默认选中状态。

```java// 创建一个新的Excel文件Workbook wb = new HSSFWorkbook();Sheet sheet = wb.createSheet("Sheet1");// 创建一个单元格,并设置其数据格式为复选框Row row = sheet.createRow(0);Cell cell = row.createCell(0);Drawing patriarch = sheet.createDrawingPatriarch(); ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) 0, 0, (short) 1, 1);Checkbox checkbox = patriarch.createCheckbox(anchor); cell.setCellType(CellType.FORMULA);cell.setCellFormula("=A1");// 设置复选框的默认选中状态checkbox.setIsChecked(true);```三、复选框的状态获取在操作Excel文件时,有时需要获取复选框的选中状态,这可以通过POI库的API实现。

```java// 获取复选框的选中状态CellReference cellRef = new CellReference("A1");Row row = sheet.getRow(cellRef.getRow());Cell cell = row.getCell(cellRef.getCol());XSSFPatriarch patriarch = (XSSFPatriarch)sheet.createDrawingPatriarch();XSSFCheckbox checkbox = patriarch.getCheckbox(cell); boolean isChecked = checkbox.getChecked();```四、复选框的状态设置除了获取复选框的选中状态,有时也需要动态地修改复选框的状态。

java实现对excel文件的处理合并单元格的操作

java实现对excel文件的处理合并单元格的操作

java实现对excel⽂件的处理合并单元格的操作⼀、依赖引⼊<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>⼆、表格操作1、读取xls⽂件测试⽂件为:代码:public void test() throws IOException, BiffException {// 1、获取⽂件,创建workbookFile file = new File("D:/test/⾃动化监测数据上传模板20210525.xls");Workbook workbook = Workbook.getWorkbook(file);// 2.获取第⼀个⼯作表Sheet sheet = workbook.getSheet(0);// 3.获取表中数据Range[] rangecell = sheet.getMergedCells();System.out.println("⾏:" + sheet.getRows());System.out.println("列:" + sheet.getColumns());for (int i = 0; i < sheet.getRows(); i++) {for (int j = 0; j < sheet.getColumns(); j++) {Cell cell = sheet.getCell(j, i);String contents = cell.getContents();System.out.print(contents + " ");}System.out.println();}workbook.close();}输出结果(注意合并单元格处,需要特殊处理):改造代码如下:public void test() throws IOException, BiffException {// 1、获取⽂件,创建workbookFile file = new File("D:/test/⾃动化监测数据上传模板20210525.xls");Workbook workbook = Workbook.getWorkbook(file);// 2.获取第⼀个⼯作表Sheet sheet = workbook.getSheet(0);// 3.获取表中数据// 返回合并单元格数据Range[] rangecell = sheet.getMergedCells();System.out.println("⾏:" + sheet.getRows());System.out.println("列:" + sheet.getColumns());for (int i = 0; i < sheet.getRows(); i++) {for (int j = 0; j < sheet.getColumns(); j++) {Cell cell = sheet.getCell(j, i);String contents = cell.getContents();// 判断当前单元格,是否为合并单元格for (Range r : rangecell) {if (i > r.getTopLeft().getRow() &&i <= r.getBottomRight().getRow() &&j >= r.getTopLeft().getColumn() &&j <= r.getBottomRight().getColumn()) {contents = sheet.getCell(r.getTopLeft().getColumn(), r.getTopLeft().getRow()).getContents();}}System.out.print(contents + " ");}System.out.println();}workbook.close();}结果:到此这篇关于java实现对excel⽂件的处理合并单元格的⽂章就介绍到这了,更多相关java excel⽂件合并单元格内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

Java学习笔记-EXCEL文件的读写操作

Java学习笔记-EXCEL文件的读写操作

一、基于POI操作EXCEL文件1.<!-- POI依赖包-->2.<dependency>3.<groupId>org.apache.poi</groupId>4.<artifactId>poi</artifactId>5.<version>4.1.2</version>6.</dependency>7.<dependency>8.<groupId>org.apache.poi</groupId>9.<artifactId>poi-ooxml</artifactId>10.<version>4.1.2</version>11.</dependency>12.<dependency>13.<groupId>org.apache.poi</groupId>14.<artifactId>poi-ooxml-schemas</artifactId>15.<version>4.1.2</version>16.</dependency>17.<dependency>18.<groupId>xerces</groupId>19.<artifactId>xercesImpl</artifactId>20.<version>2.12.0</version>21.</dependency>EXCEL文件读操作示例如下:1.import ng.StringUtils;2.import ng.time.DateFormatUtils;3.import org.apache.poi.openxml4j.exceptions.OpenXML4JException;4.import org.apache.poi.openxml4j.opc.OPCPackage;5.import ermodel.*;6.import org.apache.poi.xssf.eventusermodel.XSSFReader;7.import org.apache.poi.xssf.model.SharedStringsTable;8.import org.apache.poi.xssf.model.StylesTable;9.import ermodel.XSSFCellStyle;10.import ermodel.XSSFRichTextString;11.import org.jdom2.Attribute;12.import org.jdom2.Document;13.import org.jdom2.Element;14.import org.jdom2.JDOMException;15.import org.jdom2.input.SAXBuilder;16.import org.platform.utils.date.DateFormatter;17.import org.slf4j.Logger;18.import org.slf4j.LoggerFactory;19.import org.xml.sax.*;20.import org.xml.sax.helpers.DefaultHandler;21.import org.xml.sax.helpers.XMLReaderFactory;22.import java.io.*;23.import java.text.DecimalFormat;24.import java.text.SimpleDateFormat;25.import java.util.ArrayList;26.import java.util.Date;27.import java.util.Iterator;28.import java.util.List;29.import java.util.function.Consumer;30.31.public class PoiExcelFileReader {32.private Logger LOG =LoggerFactory.getLogger(PoiExcelFileReader.class);33.enum XssfDataType {34.BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX,NUMBER, DATE, NULL35.}36.public static final SimpleDateFormat SDF = DateFormatter.TIME.get();37.public static final DecimalFormat DF = new DecimalFormat("0");38.public static final int ERROR = 0;39.public static final int BOOLEAN = 1;40.public static final int NUMBER = 2;41.public static final int STRING = 3;42.public static final int DATE = 4;43.public static final String DATE_FORMAT_STR1 = "yyyy-MM-ddHH:mm:ss";44.public static final String DATE_FORMAT_STR2 = "yyyy/MM/ddHH:mm:ss";45.private boolean isExcel2007 = true;46.private InputStream inputStream = null;47.private InputStream sheetInputStream = null;48.private InputSource sheetInputSource = null;49.private XMLReader xmlReader = null;50.private List<PoiExcelRow> rowDataList = newArrayList<PoiExcelRow>();51.// 批量处理52.private Consumer<List<PoiExcelRow>> consumer = null;53.// 批量处理的阀值54.private Integer threshold = null;55.// 跳过表头的行数56.private Integer skipHeadLineCount = 0;57.58.public PoiExcelFileReader(InputStream in, String suffix,Consumer<List<PoiExcelRow>> consumer, int threshold) {59.this(in, suffix, consumer, threshold, 0);60.}61.62.public PoiExcelFileReader(InputStream in, String suffix,Consumer<List<PoiExcelRow>> consumer, int threshold,63.int skipHeadLineCount) {64.this.inputStream = in;65.this.isExcel2007 = "xls".equals(suffix.toLowerCase()) ? false :true;66.this.consumer = consumer;67.this.threshold = threshold;68.this.skipHeadLineCount = skipHeadLineCount;69.}70.71.public void parse() {72.if (isExcel2007) {73.try {74.init(OPCPackage.open(inputStream));75.} catch (Exception e) {76.LOG.error(e.getMessage(), e);77.}78.parseExcel2007();79.} else {80.parseExcel2003(inputStream);81.}82.}83.84.public List<PoiExcelRow> getRowDataList() {85.return this.rowDataList;86.}87.88./** 初始化将Excel转换为XML */89.private void init(OPCPackage pkg) throws IOException,OpenXML4JException, SAXException{90.XSSFReader xssfReader = new XSSFReader(pkg);91.SharedStringsTable sharedStringsTable =xssfReader.getSharedStringsTable();92.StylesTable stylesTable = xssfReader.getStylesTable();93.sheetInputStream =xssfReader.getSheet(getSheetId(xssfReader.getWorkbookData()));94.sheetInputSource = new InputSource(sheetInputStream);95.xmlReader = getXmlReader(sharedStringsTable, stylesTable);96.}97.98.private XMLReader getXmlReader(SharedStringsTablesharedStringsTable, StylesTable stylesTable) throws SAXException {99.XMLReader xmlReader =XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");100.ContentHandler contentHandler = newCustomHandler(sharedStringsTable, stylesTable);101.xmlReader.setContentHandler(contentHandler);102.return xmlReader;103.}104.105.private void parseExcel2007(){106.try {107.xmlReader.parse(sheetInputSource);108.} catch (Exception e) {109.LOG.error(e.getMessage(), e);110.} finally{111.if(sheetInputStream != null){112.try {113.sheetInputStream.close(); 114.} catch (IOException e) {115.LOG.error(e.getMessage(), e); 116.}117.}118.}119.}120.121.private String getSheetId(InputStream workbookDataInputStream) { 122.String sheetId = "rId1";123.BufferedReader br = null;124.try {125.br = new BufferedReader(newInputStreamReader(workbookDataInputStream));126.String line = null;127.loop:128.while (null != (line = br.readLine())) {129.if (line.startsWith("<workbook")) {130.InputStream in = null;131.try {132.in = newByteArrayInputStream(line.getBytes("UTF-8"));133.Document document = new SAXBuilder().build(in);134.Element rootElement = document.getRootElement();135.Iterator<Element> iterator = rootElement.getChildren().iterator();136.while(iterator.hasNext()) {137.Element element = iterator.next();138.if(!"sheets".equals(element.getName())) continue;139.List<Element> children = element.getChildren();140.for (int i = 0, iLen = children.size(); i < iLen; i++) {141.Element subElement = children.get(i);142.for (Attribute attribute : subElement.getAttributes()) {143.if ("id".equa 144.s 145.b 146.}147.}148.}149.}150.} catch (JDOMException e) {151.LOG.error(e.getMessage(), e);152.} finally {153.try {154.if (null != in) in.close();155.} catch (Exception e) {156.LOG.error(e.getMessage(), e);157.}158.}159.}160.}161.} catch (IOException e) {162.LOG.error(e.getMessage(), e);163.} finally {164.try {165.if (null != workbookDataInputStream) workbookDataInputStream.close();166.if (null != br) br.close();167.} catch (Exception e) {168.LOG.error(e.getMessage(), e); 169.}170.}171.return sheetId;172.}173.174.private class CustomHandler extends DefaultHandler {175.// 映射字符串176.private SharedStringsTable sharedStringsTable = null; 177.// 单元格样式178.private StylesTable stylesTable = null;179.// 读取值180.private String readValue = null;181.// 单元格类型182.private XssfDataType dataType = null;183.// 一行中数据文本184.private String[] rowStrings = null;185.// 一行中数据类型186.private int[] rowTypes = null;187.// 当前行索引188.private int rowIndex = 0;189.// 当前列索引190.private int columnIndex;191.private short formatIndex = -1;192.193.private CustomHandler(SharedStringsTable sharedStringsTable,StylesTable stylesTable) {194.this.sharedStringsTable = sharedStringsTable;195.this.stylesTable = stylesTable;196.}197.198.@Override199.public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {200.// 单元格201.if (qName.equals("c")) {202.this.columnIndex =getColumnIndex(attributes);203.String cellType = attributes.getValue("t"); 204.String cellStyle = attributes.getValue("s"); 205.this.dataType = XssfDataType.NUMBER; 206.if ("b".equals(cellType)) {207.this.dataType = XssfDataType.BOOL;208.} else if ("e".equals(cellType)) {209.this.dataType = XssfDataType.ERROR;210.} else if ("inlineStr".equals(cellType)) {211.this.dataType = XssfDataType.INLINESTR; 212.} else if ("s".equals(cellType)) {213.this.dataType = XssfDataType.SSTINDEX;214.} else if ("str".equals(cellType)) {215.this.dataType = XssfDataType.FORMULA; 216.} else if (cellStyle != null) {217.int styleIndex = Integer.parseInt(cellStyle);218.XSSFCellStyle style =stylesTable.getStyleAt(styleIndex);219.this.formatIndex = style.getDataFormat(); 220.}221.} else if (qName.equals("row")) {222.rowIndex++;223.// 获取该行的单元格数初始化数组224.int columnNumber =getColumnNumber(attributes);225.this.rowStrings = newString[columnNumber];226.this.rowTypes = new int[columnNumber]; 227.}228.readValue = "";229.}230.231.@Override232.public void endElement(String uri, String localName, String qName) throws SAXException {233.// 单元格的值234.if (qName.equals("v")) {235.switch (this.dataType) {236.case BOOL: {237.rowStrings[columnIndex] = readValue.charAt(0) == '0' ? "FALSE" : "TRUE"; 238.rowTypes[columnIndex] = BOOLEAN;239.break;240.}241.case ERROR: {242.rowStrings[columnIndex] = "ERROR:" + readValue.toString();243.rowTypes[columnIndex] = ERROR;244.break;245.}246.case INLINESTR: {247.rowStrings[columnIndex] = new XSSFRichTextString(readValue).getString(); 248.rowTypes[columnIndex] = STRING;249.break;250.}251.case SSTINDEX: {252.rowStrings[columnIndex] =sharedStringsTable.getItemAt(Integer.parseInt(readValue)).getString();253.rowTypes[columnIndex] = STRING; 254.break;255.}256.case FORMULA: {257.rowStrings[columnIndex] = readValue;258.rowTypes[columnIndex] = STRING;259.break;260.}261.case NUMBER: {262.// 判断是否是日期格式263.if (formatIndex != -1 && DateUtil.isADateFormat(formatIndex, readValue)) {264.Date date =DateUtil.getJavaDate(Double.parseDouble(readValue));265.if (null != date) {266.rowStrings[columnIndex] = DateFormatUtils.format(date, DATE_FORMAT_STR1); 267.} else { 268.rowStrings[columnIndex] = readValue;269.}270.rowTypes[columnIndex] = DATE;271.formatIndex = -1;272.} else {273.rowStrings[columnIndex] = readValue;274.rowTypes[columnIndex] = NUMBER;275.}276.break;277.}278.default : break;279.}280.} else if (qName.equals("row")) {281.// 当解析的一行的末尾时输出数组中的数据282.if (rowIndex > skipHeadLineCount) { 283.// 过滤空行284.boolean isValid = false;285.for (int i = 0, len = rowStrings.length; i < len; i++) {286.if (StringUtils.isNotBlank(rowStrings[i])) {287.isValid = true;288.break; 289.}290.}291.if (isValid) {292.rowDataList.add(new PoiExcelRow(rowIndex, rowTypes, rowStrings));293.if (null != threshold && rowDataList.size() > threshold) {294.consumer.accept(rowDataList);295.rowDataList.clear();296.}297.}298.}299.}300.}301.302./**303.* 如果单元格类型是字符串、INLINESTR、数字、日期,readValue则是索引值304.* 如果单元格类型是布尔值、错误、公式,readValue则是内容值305.*/306.@Override307.public void characters(char[] ch, int start, int length) throws SAXException {308.readValue += new String(ch, start, length); 309.}310.311.@Override312.public void endDocument() throws SAXException {313.super.endDocument();314.if (rowDataList.size() > 0) {315.consumer.accept(rowDataList);316.rowDataList.clear();317.}318.}319.320.private int getColumnIndex(Attributes attributes) {321.String attributeValue = attributes.getValue("r"); 322.int columnIndex = -1;323.for (int i = 0, len = attributeValue.length(); i < len; ++i) { 324.if (Character.isDigit(attributeValue.charAt(i))) break;325.columnIndex = (columnIndex + 1) * 26 + attributeValue.charAt(i) - 'A';326.}327.return columnIndex;328.}329.330.private int getColumnNumber(Attributes attrubuts){331.String spans = attrubuts.getValue("spans");332.return StringUtils.isBlank(spans) ? -1 : Integer.parseInt(spans.substring(spans.indexOf(":") + 1));333.}334.335.}336.337.private void parseExcel2003(InputStream in) {338.Workbook workbook = null;339.try {340.workbook = WorkbookFactory.create(in);341.Sheet sheet = workbook.getSheetAt(0);342.int lastCellNum =sheet.getRow(0).getPhysicalNumberOfCells();343.for (int i = skipHeadLineCount, iLen = sheet.getLastRowNum();i <= iLen; i++) {344.Row row = sheet.getRow(i);345.String[] rowStrings = new String[lastCellNum]; 346.for (int j = 0, jLen = lastCellNum; j < jLen; j++) { 347.Cell cell = row.getCell(j);348.if (null == cell) continue;349.Object cellValue = null;350.switch (cell.getCellType()) {351.case BOOLEAN: cellValue = cell.getBooleanCellValue(); break;352.case ERROR: cellValue = cell.getErrorCellValue(); break;353.case FORMULA: cellValue = cell.getCellFormula(); break;354.case NUMERIC: cellValue = DF.format(cell.getNumericCellValue()); break;355.default: cellValue = cell.getStringCellValue(); break;356.}357.rowStrings[j] = String.valueOf(cellValue);358.}359.rowDataList.add(new PoiExcelRow(i, null, rowStrings));360.if (null != threshold && rowDataList.size() > threshold) {361.consumer.accept(rowDataList); 362.rowDataList.clear();363.}364.}365.if (rowDataList.size() > 0) {366.consumer.accept(rowDataList);367.rowDataList.clear();368.}369.} catch (Exception e) {370.LOG.error(e.getMessage(), e);371.} finally {372.try {373.if (null != in) in.close();374.if (null != workbook) workbook.close(); 375.} catch (IOException e) {376.LOG.error(e.getMessage(), e);377.}378.}379.}380.381.}EXCEL文件写操作示例如下:1.import org.apache.poi.xssf.streaming.SXSSFCell;2.import org.apache.poi.xssf.streaming.SXSSFRow;3.import org.apache.poi.xssf.streaming.SXSSFSheet;4.import org.apache.poi.xssf.streaming.SXSSFWorkbook;5.import ermodel.XSSFCell;6.import ermodel.XSSFRow;7.import ermodel.XSSFSheet;8.import ermodel.XSSFWorkbook;9.import org.slf4j.Logger;10.import org.slf4j.LoggerFactory;11.12.import java.io.IOException;13.import java.io.OutputStream;14.import java.math.BigDecimal;15.import java.util.List;16.17.public class PoiExcelFileWriter {18.19.private static Logger LOG =LoggerFactory.getLogger(PoiExcelFileWriter.class);20.21.public static void writeXSSFWorkbook(List<String> headerList,List<List<Object>> resultList, OutputStream outputStream) {22.XSSFWorkbook xssfWorkbook = new XSSFWorkbook();23.XSSFSheet xssfSheet = xssfWorkbook.createSheet("sheet1");24.XSSFRow xssfRow = xssfSheet.createRow(0);25.for (int i = 0, len = headerList.size(); i < len; i++) {26.XSSFCell xssfCell = xssfRow.createCell(i);27.xssfCell.setCellValue(headerList.get(i));28.}29.for (int i = 0, iLen = resultList.size(); i < iLen; i++) {30.xssfRow = xssfSheet.createRow(i + 1);31.List<Object> result = resultList.get(i);32.for (int j = 0, jLen = result.size(); j < jLen; j++) {33.XSSFCell xssfCell = xssfRow.createCell(j);34.Object valueObj = result.get(j);35.if (valueObj instanceof String) {36.xssfCell.setCellValue(null == valueObj ? "" :valueObj.toString());37.} else if (valueObj instanceof BigDecimal) {38.BigDecimal vDecimal = (BigDecimal) valueObj;39.xssfCell.setCellValue(vDecimal.doubleValue());40.} else if (valueObj instanceof Integer) {41.xssfCell.setCellValue((Integer) valueObj);42.} else if (valueObj instanceof Double) {43.xssfCell.setCellValue((Double) valueObj);44.} else {45.xssfCell.setCellValue(null == valueObj ? "" :valueObj.toString());46.}47.}48.}49.try {50.xssfWorkbook.write(outputStream);51.} catch (IOException e) {52.LOG.error(e.getMessage(), e);53.} finally {54.try {55.if (null != xssfWorkbook) xssfWorkbook.close();56.} catch (IOException e) {57.LOG.error(e.getMessage(), e);58.}59.}60.}61.62.public static void writeSXSSFWorkbook(List<String> headerList,List<List<Object>> resultList, OutputStream outputStream) {63.SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook();64.SXSSFSheet sxssfSheet = sxssfWorkbook.createSheet("sheet1");65.SXSSFRow sxssfRow = sxssfSheet.createRow(0);66.for (int i = 0, len = headerList.size(); i < len; i++) {67.SXSSFCell sxssfCell = sxssfRow.createCell(i);68.sxssfCell.setCellValue(headerList.get(i));69.}70.for (int i = 0, len = resultList.size(); i < len; i++) {71.sxssfRow = sxssfSheet.createRow(i + 1);72.List<Object> result = resultList.get(i);73.for(int j = 0, jLen = result.size(); j < jLen; j++){74.SXSSFCell sxssfCell = sxssfRow.createCell(j);75.Object valueObj = result.get(j);76.if (valueObj instanceof String) {77.sxssfCell.setCellValue(null == valueObj ? "" :valueObj.toString());78.} else if (valueObj instanceof BigDecimal) {79.BigDecimal vDecimal = (BigDecimal) valueObj;80.sxssfCell.setCellValue(vDecimal.doubleValue());81.} else if (valueObj instanceof Integer) {82.sxssfCell.setCellValue((Integer) valueObj);83.} else if (valueObj instanceof Double) {84.sxssfCell.setCellValue((Double) valueObj);85.} else {86.sxssfCell.setCellValue(null == valueObj ? "" :valueObj.toString());87.}88.}89.}90.try {91.sxssfWorkbook.write(outputStream);92.} catch (Exception e) {93.LOG.error(e.getMessage(), e);94.} finally {95.sxssfWorkbook.dispose();96.try {97.if (null != sxssfWorkbook) sxssfWorkbook.close();98.} catch (IOException e) {99.LOG.error(e.getMessage(), e);100.}101.}102.}103.104.}二、基于EASYEXCEL操作EXCEL文件1.<!-- EASYEXCEL依赖包-->2.<dependency>3.<groupId>com.alibaba</groupId>4.<artifactId>easyexcel</artifactId>5.<version>2.2.3</version>6.</dependency>EXCEL文件读写操作示例如下:1.import com.alibaba.excel.EasyExcelFactory;2.import com.alibaba.excel.ExcelWriter;3.import com.alibaba.excel.support.ExcelTypeEnum;4.import com.alibaba.excel.write.metadata.WriteSheet;5.import org.slf4j.Logger;6.import org.slf4j.LoggerFactory;7.8.import java.io.InputStream;9.import java.io.OutputStream;10.import java.util.HashMap;11.import java.util.List;12.import java.util.Map;13.14.public class EasyExcelFileUtils {15.16.private static Logger LOG = LoggerFactory.getLogger(EasyExcelFileUtils.class);17.18.public static void read(InputStream in, int threshold, List<String>headerFieldList, List<Map<String, Object>> dataList) {19.Map<Integer, String> indexFieldMap = new HashMap<Integer, String>();20.EasyExcelFactory.read(in, EventListenerUtils.getListener(21.head -> {22.Map<Integer, Object> header = (Map<Integer, Object>) head;23.for (Map.Entry<Integer, Object> entry : header.entrySet()) {24.String entryValue = String.valueOf(entry.getValue());25.headerFieldList.add(entryValue);26.indexFieldMap.put(entry.getKey(), entryValue);27.}28.},29.results -> {30.List<Object> resultList = (List<Object>) results;31.for (int i = 0, len = resultList.size(); i < len; i++) {32.Map<String, Object> data = new HashMap<String,Object>();33.Map<Integer, Object> result = (Map<Integer, Object>)resultList.get(i);34.for (Map.Entry<Integer, Object> entry : result.entrySet()) {35.data.put(indexFieldMap.get(entry.getKey()),entry.getValue());36.}37.dataList.add(data);38.}39.}, threshold)).sheet(0).headRowNumber(0).autoTrim(true).doRead();40.try {41.if (null != in) in.close();42.} catch (Exception e) {43.LOG.error(e.getMessage(), e);44.}45.}46.47.public static void write(List<List<String>> headerList, List<List<Object>>resultList, OutputStream outputStream) {48.ExcelWriter excelWriter =EasyExcelFactory.write(outputStream).excelType(ExcelTypeEnum.XLSX).useDefaultStyle(tr ue)49..needHead(true).head(headerList).autoTrim(true).build();50.WriteSheet writeSheet = new WriteSheet();51.writeSheet.setSheetNo(1);52.excelWriter.write(resultList, writeSheet);53.excelWriter.finish();54.}55.56.}1.import java.util.ArrayList;2.import java.util.List;3.import java.util.function.Consumer;4.5.import com.alibaba.excel.context.AnalysisContext;6.import com.alibaba.excel.event.AnalysisEventListener;7.8.public class EventListenerUtils {9.10./**11.* 批量监听12.* @param <T>13.* @param consumer 批量消费14.* @param threshold 批量阀值15.* @return16.*/17.public static <T> AnalysisEventListener<T>getListener(Consumer<List<T>> consumer, int threshold) {18.return new AnalysisEventListener<T>() {19.20.private List<T> ts = new ArrayList<T>();21.22.@Override23.public void invoke(T t, AnalysisContext context) {24.ts.add(t);25.if (ts.size() == threshold) {26.consumer.accept(ts);27.ts.clear();28.}29.}30.31.@Override32.public void doAfterAllAnalysed(AnalysisContextcontext) {33.if (ts.size() > 0) {34.consumer.accept(ts);35.ts.clear();36.}37.}38.39.};40.}41.42./**43.* 批量监听44.* @param <T>45.* @param headConsumer 表头消费46.* @param consumer 批量消费47.* @param threshold 批量阀值48.* @return49.*/50.public static <T> AnalysisEventListener<T> getListener(Consumer<T>headConsumer, Consumer<List<T>> consumer, int threshold) {51.return new AnalysisEventListener<T>() {52.53.private List<T> ts = new ArrayList<T>();54.55.@Override56.public void invoke(T t, AnalysisContext context) {57.if(context.readRowHolder().getRowIndex() == 0) {58.headConsumer.accept(t);59.} else {60.ts.add(t);61.if (ts.size() == threshold) {62.consumer.accept(ts);63.ts.clear();64.}65.}66.}67.68.@Override69.public void doAfterAllAnalysed(AnalysisContextcontext) {70.if (ts.size() > 0) {71.consumer.accept(ts);72.ts.clear();73.}74.}75.76.};77.}78.79./**80.* 限制数量的监听81.* @param <T>82.* @param headConsumer 表头消费83.* @param consumer 消费84.* @param threshold 限制阀值85.* @return86.*/87.public static <T> AnalysisEventListener<T>getLimitListener(Consumer<T> headConsumer, Consumer<List<T>> consumer, int threshold) {88.return new AnalysisEventListener<T>() {89.90.private List<T> ts = new ArrayList<T>();91.92.@Override93.public void invoke(T t, AnalysisContext context) {94.if(context.readRowHolder().getRowIndex() == 0) {95.headConsumer.accept(t);96.} else {97.if (ts.size() < threshold) {98.ts.add(t);99.}100.}101.}102.103.@Override104.public void doAfterAllAnalysed(AnalysisContext context) {105.if (ts.size() > 0) {106.consumer.accept(ts);107.ts.clear();108.}109.}110.111.};112.}113.114.}。

【01】java操作excel,循环遍历

【01】java操作excel,循环遍历

【01】java操作excel,循环遍历使⽤org.apache.poi包下的HSSF相关⽅法,先后操作⼯作簿workbook、sheet、row、cell,最终定位到具体的单元格,getValue(cell)获得的都是String类型。

只取⼀⾏的时候,rowNum=1(因为rowNum=0的时候,取的是表头,也就是字段名称,不是数据);只取⼀列的时候,cellNum=0。

取多⾏多列的时候,嵌套两个for循环即可。

package com.course.coke.data;import ermodel.HSSFCell;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;public class Read {public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("/Users/poi.xls");POIFSFileSystem fs = new POIFSFileSystem(inputStream);HSSFWorkbook workbook = new HSSFWorkbook(fs);HSSFSheet sheet = workbook.getSheetAt(0); // 获取第⼀个sheet页if (sheet == null){return;}// 遍历rowfor (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {HSSFRow row = sheet.getRow(rowNum);if (row==null){continue;}// 遍历列cellfor (int cellNum = 0; cellNum <= row.getLastCellNum(); cellNum++) {HSSFCell cell = row.getCell(cellNum);if (cell==null){continue;}System.out.print(" "+getValue(cell));}System.out.println();}}private static String getValue(HSSFCell cell){if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){return String.valueOf(cell.getBooleanCellValue());}else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){return String.valueOf(cell.getNumericCellValue());}else {return String.valueOf(cell.getRichStringCellValue());}}}运⾏结果如下:1.0 宋江 20.02.0 张三 21.03.0 李四 22.04.0 王五 23.05.0 朱六 24.0。

java中easyexsl的用法

java中easyexsl的用法

java中easyexsl的用法Java中EasyExcel的用法在Java开发中,处理Excel文件是一项常见的任务。

而EasyExcel 作为一款优秀的Java Excel解决方案,提供了便捷的API,简化了Excel文件的读写操作。

本文将介绍Java中EasyExcel的用法,包括Excel文件的读取和写入操作。

一、Excel文件读取在使用EasyExcel读取Excel文件时,首先需要定义对应的Java实体类,用于映射Excel文件中的数据。

接着通过EasyExcel提供的监听器,实现对Excel文件的读取操作。

下面是一个简单的读取Excel文件的示例代码:```java// 定义Excel实体类@Datapublic class UserData {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;@ExcelProperty("性别")private String gender;}// 使用EasyExcel读取Excel文件String fileName = "test.xlsx";String sheetName = "Sheet1";EasyExcel.read(fileName, UserData.class, new AnalysisEventListener<UserData>() {@Overridepublic void invoke(UserData data, AnalysisContext context) {// 处理每一行数据}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 读取完成后的操作}}).sheet(sheetName).doRead();```在`invoke`方法中处理每一行数据。

java excel createrange参数

java excel createrange参数

【主题】Java中的Excel.createRange参数详解在Java中,对于Excel操作的需求是非常普遍的,而Excel.createRange参数也是其中的重要部分之一。

在本文中,我将深入探讨这一参数的作用、用法和相关注意事项,以便对其有一个全面的理解。

1. Excel.createRange参数的基本概念在Java中,Excel.createRange参数是用于创建一个范围(Range)的方法。

通过这个方法,我们可以指定范围的起始单元格和结束单元格,从而实现对Excel中指定区域的操作。

在使用这个参数时,我们需要指定起始行、起始列、结束行和结束列,以确定范围的位置和大小。

2. Excel.createRange参数的用法在实际使用中,我们可以通过以下方式来使用Excel.createRange参数:```Range range = sheet.createRange(startRow, startColumn, endRow, endColumn);```其中,startRow和startColumn表示范围的起始行和起始列,endRow和endColumn表示范围的结束行和结束列。

通过这个方法,我们可以方便地创建一个指定范围的Range对象,从而可以对该范围进行各种操作,比如写入数据、设置格式等。

3. Excel.createRange参数的注意事项在使用Excel.createRange参数时,我们需要注意以下几点:- 确保指定的范围在Excel表格内,不要超出表格范围。

- 起始行、起始列、结束行和结束列需要按照实际需求进行设置,以确保范围的准确性。

- 了解Excel表格的行列编号规则,以便准确地指定范围的位置。

4. 对Excel.createRange参数的个人观点和理解对我来说,Excel.createRange参数在Java中的应用是非常重要的。

通过这个参数,我们可以方便地对Excel表格中的指定范围进行操作,从而实现对数据的精确控制和处理。

Java中操作Excel表格方法

Java中操作Excel表格方法

Java中操作Excel表格方法Java中操作Excel表格方法引导语:我们都知道Excel 可以进行各种数据的处理、统计分析和辅助决策操作,那么在Java中又是如何操作Excel 表格的呢,以下是店铺分享给大家的Java中操作Excel表格方法,欢迎阅读!利用Java Excel API ,下载地址:jexcelapi.rar下面给出一段读取数据的例子代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.logging.Level;import java.util.logging.Logger;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {InputStream is = new FileInputStream("d:\\test.xls"); jxl.Workbook rwb = Workbook.getWorkbook(is); Sheet rs = rwb.getSheet(0);//取第一行,第一列的元素Cell c00 = rs.getCell(0, 0);String strc00 = c00.getContents();//取第一行,第二列的`元素Cell c10 = rs.getCell(1,0);String strc10= c10.getContents();System.out.println(strc00+" "+c00.getType().toString()); System.out.println(strc10+" "+c10.getType().toString()); //获取sheet的个数System.out.println(rwb.getNumberOfSheets());Sheet [] sheets =rwb.getSheets();for(int i=0;iSystem.out.println(rwb.getSheet(i).getName());}//获得列数System.out.println(rwb.getSheet(0).getColumns());//获得每列的元素Cell [] cell = rwb.getSheet(0).getColumn(0);//获得总行数System.out.println(rwb.getSheet(0).getRows());//获得行元素Cell [] cell2 = rwb.getSheet(0).getRow(0);//关闭对象rwb.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}再给出一段,创建Excel表格的代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.File;import java.util.logging.Level;import java.util.logging.Logger;import jxl.Workbook;import bel;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.Number;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {//创建EXCEL表格WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\test.xls"));//创建工作表WritableSheet ws = wwb.createSheet("Liu.Wei",0);//创建单元格ws.addCell(new Label(0,0,"Hello World"));//添加设置字体格式的单元格WritableFont wfc = new WritableFont(WritableFont.ARIAL,15,WritableFont.BOLD,true);WritableCellFormat wcff= new WritableCellFormat(wfc);Label labelcf = new Label(1,0,"Format text",wcff);ws.addCell(labelcf);//向单元格中写入数字Number labelN = new Number(0,1,12345);ws.addCell(labelN);wwb.write();wwb.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}最后给出一段更新表格的代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package excel;import java.io.File;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import jxl.CellType;import jxl.Workbook;import jxl.read.biff.BiffException;import bel;import jxl.write.WritableCell;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;/**** @author Wei.Liu*/public class Main {/*** @param args the command line arguments*/public static void main(String[] args) {try {Workbook rw = Workbook.getWorkbook(new File("d:\\test.xls"));WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\test.xls"),rw);//修改单元格的值WritableSheet ws = wwb.getSheet(0);WritableCell wc = ws.getWritableCell(0,0);if(wc.getType() == BEL){Label l= (Label)wc;l.setString("Modified");}wwb.write();wwb.close();rw.close();} catch (Exception ex) {Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);}}}【Java中操作Excel表格方法】。

java使用EasyExcel操作Excel

java使用EasyExcel操作Excel

java使⽤EasyExcel操作Excel⼀、EasyExcel简介1、EasyExcel特点Java领域解析、⽣成Excel⽐较有名的框架有Apache poi、jxl等。

但他们都存在⼀个严重的问题就是⾮常的耗内存。

如果你的系统并发量不⼤的话可能还⾏,但是⼀旦并发上来后⼀定会OOM或者JVM频繁的full gc。

EasyExcel是阿⾥巴巴开源的⼀个excel处理框架,以使⽤简单、节省内存著称。

EasyExcel能⼤⼤减少占⽤内存的主要原因是在解析Excel时没有将⽂件数据⼀次性全部加载到内存中,⽽是从磁盘上⼀⾏⾏读取数据,逐个解析。

EasyExcel采⽤⼀⾏⼀⾏的解析模式,并将⼀⾏的解析结果以观察者的模式通知处理(AnalysisEventListener)。

⼆、EasyExcel的使⽤2、pom.xml引⼊依赖,因为EasyExcel是依赖poi的,所以依赖如下(注意2个的版本对应 ):dependencies><!-- https:///artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency> <!--xls--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <!--xlsx--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency></dependencies>测试写操作://设置表头和添加的数据字段@datapublic class DemoData {//设置表头名称@ExcelProperty("学⽣编号")private int sno;//设置表头名称@ExcelProperty("学⽣姓名")private String sname;}4 、实现写操作(1)创建⽅法循环设置要添加到Excel的数据//循环设置要添加的数据,最终封装到list集合中private static List<DemoData> data() {List<DemoData> list = new ArrayList<DemoData>();for (int i = 0; i < 10; i++) {DemoData data = new DemoData();data.setSno(i);data.setSname("张三"+i);list.add(data);}return list;}(2)实现最终的添加操作(写法⼀)public static void main(String[] args) throws Exception {// 写法1String fileName = "F:\\11.xlsx";// 这⾥需要指定写⽤哪个class去写,然后写到第⼀个sheet,名字为模板然后⽂件流会⾃动关闭 // 如果这⾥想使⽤03 则传⼊excelType参数即可EasyExcel.write(fileName, DemoData.class).sheet("写⼊⽅法⼀").doWrite(data());}(3)实现最终的添加操作(写法⼆)public static void main(String[] args) throws Exception {// 写法2,⽅法⼆需要⼿动关闭流String fileName = "F:\\112.xlsx";// 这⾥需要指定写⽤哪个class去写ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build();WriteSheet writeSheet = EasyExcel.writerSheet("写⼊⽅法⼆").build();excelWriter.write(data(), writeSheet);/// 千万别忘记finish 会帮忙关闭流excelWriter.finish();}⼀、实现EasyExcel对Excel读操作1、创建实体类@datapublic class ReadData {//设置列对应的属性@ExcelProperty(index = 0)private int sid;//设置列对应的属性@ExcelProperty(index = 1)private String sname;}2、创建读取操作的监听器//创建读取excel监听器public class ExcelListener extends AnalysisEventListener<ReadData> {//创建list集合封装最终的数据List<ReadData> list = new ArrayList<ReadData>();//⼀⾏⼀⾏去读取excle内容@Overridepublic void invoke(ReadData user, AnalysisContext analysisContext) {System.out.println("***"+user);list.add(user);}//读取excel表头信息@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("表头信息:"+headMap);}//读取完成后执⾏@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}}3、调⽤实现最终的读取public static void main(String[] args) throws Exception {// 写法1:String fileName = "F:\\01.xlsx";// 这⾥需要指定读⽤哪个class去读,然后读取第⼀个sheet ⽂件流会⾃动关闭EasyExcel.read(fileName, ReadData.class, new ExcelListener()).sheet().doRead();// 写法2:InputStream in = new BufferedInputStream(new FileInputStream("F:\\01.xlsx"));ExcelReader excelReader = EasyExcel.read(in, ReadData.class, new ExcelListener()).build(); ReadSheet readSheet = EasyExcel.readSheet(0).build();excelReader.read(readSheet);// 这⾥千万别忘记关闭,读的时候会创建临时⽂件,到时磁盘会崩的excelReader.finish();}。

通过java代码实现调用excel当中的宏的操作。

通过java代码实现调用excel当中的宏的操作。

通过java代码实现调⽤excel当中的宏的操作。

最近做的项⽬是⾃动化⽣成基⾦的交易合同的操作。

然后就想着通过java代码去操作Excel当中的宏按钮,然后⽣成word版本的合同的操作。

具体的java代码如下:import org.junit.Assert;import org.junit.Test;public class ExcelToolsServiceTest {private ExcelToolsService service;@Testpublic void testMacro() {try {String path = "C:/Users/admin.admin-PC.000/Desktop/vb/合并的模板/合同模板.xlsm";service = new ExcelToolsService();service.execMacro(path, "⽂本替换.⽣成⽂档");} catch (Exception e) {e.printStackTrace();Assert.fail();}}}import com.jacob.activeX.ActiveXComponent;import Thread;import .Dispatch;import .Variant;public class ExcelToolsService {public void execMacro(String excelPath, String macroName, Variant... params) throws Exception {ActiveXComponent excel = null;Dispatch workbooks = null;Dispatch workbook = null;long start = System.currentTimeMillis();System.out.println(start);try {ComThread.InitSTA();excel = new ActiveXComponent("Excel.Application");workbooks = excel.getProperty("Workbooks").toDispatch();workbook = Dispatch.call(workbooks, "Open", excelPath).toDispatch();if (null == params || params.length < 1) {Dispatch.call(excel, "Run", new Variant(macroName));} else {Dispatch.call(excel, "Run", new Variant(macroName), params);}Dispatch.call(workbook, "Save");} catch (Exception e) {e.printStackTrace();} finally {if (null != workbook) {// 关闭⽂档Dispatch.call(workbook, "Close", new Variant(false));}if (null != workbooks) {Dispatch.call(workbooks, "Close");}if (null != excel) {excel.invoke("Quit", new Variant[] {});}// 关闭Excel进程ComThread.Release();long end = System.currentTimeMillis();System.out.println("处理⽂件[{}]宏[{}],共耗时{}s" + excelPath + macroName + ((end - start) / 1000 + 1));}}}⾄此实现了通过Excel的宏⾃动化的⽣成基⾦的合同的操作。

JAVA中poi操作excel合并单元格的技巧,以及easypoi,注解@Excel的操作

JAVA中poi操作excel合并单元格的技巧,以及easypoi,注解@Excel的操作

JAVA中poi操作excel合并单元格的技巧,以及easypoi,注解@Excel的操作1.合并单元格,合并⾏,列合并⾏的时候,默认是把合并单元格的第⼀个单元格的内容作为合并后的内容。

所以如何想设置合并后的内容,先设置⼀下第⼀个单元格的内容,再合并就可以;XSSFSheet sheet = workbook.createSheet("表名称");CellRangeAddress cra = new CellRangeAddress(起始⾏,结束⾏ , 起始列, 结束列);sheet.addMergedRegion(cra);合并的代码就是这样,把参数写好就⾏,⾄于内部是什么原理,就不知道了。

合并列和这个也差不多,就是改⼀下参数就可以了。

2.修改单元格的长度和宽度只能整⾏整列的修改,不能中间突然长宽不⼀样的单元格。

XSSFSheet sheet = workbook.createSheet("表名称");XSSFRow row = sheet.createRow("这个是⾏号");//设置⾏⾼row.setHeightInPoints(35);//设置列宽sheet.setColumnWidth(0, 10 * 256);设置列宽的参数分别为,需要设置列的列号,表⽰第⼏列,后⾯⼀个参数是设置宽度,⾄于为什么要乘以256,是因为这个参数的单位是1/256个字符,所以乘以256之后,就代表⽐如我所⽰的就是10个字符了。

3.最后,操作完后⼀定要记得“保存”OutputStream out;out = new FileOutputStream(filePath);//⽂件保存地址workbook.write(out);out.close();也就是要write⼀下。

4.最近发现⽤注解的⽅式导出excel更加⽅便快捷官⽹教程链接地址:说⽼实话,这官⽹的教程确实好强。

javaHutool工具类之Excel的操作

javaHutool工具类之Excel的操作

javaHutool⼯具类之Excel的操作1.背景程序中上传下载excel是家常便饭,因此hutool给我们提供了⾮充强⼤的⼯具类,使⽤如下......2.使⽤官⽅地址:代码如下:package com.qianxingniwo.other;import cn.hutool.core.io.FileUtil;import cn.hutool.poi.excel.ExcelReader;import cn.hutool.poi.excel.ExcelUtil;import cn.hutool.poi.excel.ExcelWriter;import org.junit.Test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/*** Excel⼯具-ExcelUtil的使⽤*/public class HandleData {/*** 测试将数据写⼊excel*/@Testpublic void testWrite() {// 模拟写⼊的数据,实际⽣产中应该是数据库中查询出来的List<Map<String, Object>> list = new ArrayList<>();for (int i = 1; i < 100; i++) {Map map = new HashMap();map.put("id", i++);map.put("name", "李东平-" + i);map.put("age", "18");map.put("weChat", "851298348");list.add(map);}ExcelWriter writer = ExcelUtil.getWriter("F:\\test\\t1.xls");ExcelWriter write = writer.write(list);write.flush();System.out.println("写⼊数据完成");}/*** 测试读取excel中的数据*/@Testpublic void testReader() {ExcelReader reader = ExcelUtil.getReader(FileUtil.file("F:\\test\\t1.xls"));List<Map<String, Object>> list = reader.readAll();for (Map<String, Object> map : list) {System.out.println(map);}}}完美!。

Java 设置Excel自适应行高或列宽

Java 设置Excel自适应行高或列宽

Java 设置Excel自适应行高、列宽在excel中,可通过设置自适应行高或列宽自动排版,是一种比较常用的快速调整表格整体布局的方法。

设置自适应时,可考虑2种情况:1.固定数据,设置行高、列宽自适应数据(常见的设置自适应方法)2.固定列宽,缩小数据字体大小适应列宽本文将通过java程序来介绍具体的自适应设置方法。

工具:Free Spire.XLS for Java (免费版)注:可通过官网下载包,并解压将lib文件夹下的jar文件导入java程序;或者通过maven仓库下载并导入。

参考如下导入效果:Java 代码示例1. 固定数据,设置行高、列宽自适应数据(此自适应方法可对指定单元格数据或者整个工作表来设置)import com.spire.xls.*;public class AutoFit {public static void main(String[] args) {//创建一个Workbook类的对象,并加载测试文档Workbook wb = new Workbook();wb.loadFromFile("sample.xlsx");//获取工作表Worksheet sheet = wb.getWorksheets().get(0);//设置行高、列宽为自适应(应用于指定数据范围)sheet.getAllocatedRange().get("A1:E14").autoFitRows();sheet.getAllocatedRange().get("A1:E14").autoFitColumns();/*//设置行高、列宽为自适应(应用于整个工作表)sheet.getAllocatedRange().autoFitRows();sheet.getAllocatedRange().autoFitColumns();*///保存文档wb.saveToFile("result.xlsx", FileFormat.Version2010);wb.dispose();}}自适应设置效果:2. 缩小数据字体大小适应列宽import com.spire.xls.*;public class ShrinkToFit {public static void main(String[] args) {Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//获取第一张工作表Worksheet sheet = wb.getWorksheets().get(0);//指定需要自动缩小字体的单元格范围CellRange cell = (CellRange) sheet.get("A1");//设置ShrinkToFit为true,缩小数据以适应单元格cell.getStyle().setShrinkToFit(true);//保存文档wb.saveToFile("ShrinkTextToFitCell.xlsx", ExcelVersion.Version2013); wb.dispose();}}文本缩小效果:(本文完)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import jxl.write.WritableCellFeatures;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(outputFile, wb);
WritableSheet sheet0 = book.getSheet(0);
public static void main(String[] args) {
try {
// copyDateFormat(new File("c:\\a.xls"), 0, "c:\\copy of a.xls");
writeExcelUseFormat("c:\\format.xls","test");
OutputStream os = new FileOutputStream(outputFilePath);// 输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);// 创建可写工作薄
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public static void modifyDirectly2(File inputFile) throws Exception {
}
}
public static void buildNewFormTemplete(File inputFile, File outputFile) {
try {
// Excel获得文件
Workbook wb = Workbook.getWorkbook(inputFile);
// buildNewFormTemplete(new File("c:/templete.xls"),new File(
// "c:/buildNewFormTemplete.xls"));
// modifyDirectly1(new File("c:/templete.xls"));
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
WorkbookSettings setting = new WorkbookSettings();
java.util.Locale locale = new java.util.Locale("zh", "CN");
setting.setLocale(locale);
WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD);
cf = new WritableCellFormat(bold);
cell.setCellFormat(cf);
// 设置下划线
sheet.addCell(new Label(0, 0, " 第二页的测试数据 "));
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
cell = sheet.getWritableCell(0, 1);
WritableFont underline = new WritableFont(WritableFont.ARIAL,
WritableFont.DEFAULT_POINT_SIZE, WritableFont.NO_BOLD, false,
Workbook wb = Workbook.getWorkbook(file);
// 打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book = Workbook.createWorkbook(file, wb);
setting.setEncoding("ISO-8859-1");
book = Workbook.getWorkbook(inputFile, setting);
Sheet readonlySheet = book.getSheet(inputFileSheetIndex);
CellType.NUMBw2.close();
}
public static void modifyDirectly1(File file) {
try {
// Excel获得文件
Workbook w1 = Workbook.getWorkbook(inputFile);
WritableWorkbook w2 = Workbook.createWorkbook(inputFile, w1);
WritableSheet sheet = w2.getSheet(0);
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class WriteExcelTest {
static HashMap map = new HashMap();
UnderlineStyle.SINGLE);
cf = new WritableCellFormat(underline);
cell.setCellFormat(cf);
// 直截添加可以覆盖掉
setCellValueDirectly(sheet, sheet.getCell(0, 2), new Double(4),
WritableCell cell = null;
CellFormat cf = null;
// 加粗
cell = sheet.getWritableCell(0, 0);
WritableFont bold = new WritableFont(WritableFont.ARIAL,
int inputFileSheetIndex, String outputFilePath) throws Exception {
Workbook book = null;
Cell cell = null;
// 1.避免乱码的设置
sheet0.addCell(new Label(0, 1, "陈小稳"));
// 添加一个工作表
WritableSheet sheet = book.createSheet(" 第二页 ", 1);
sheet.addCell(new Label(0, 0, " 第二页的测试数据 "));
import jxl.format.VerticalAlignment;
import jxl.write.Formula;
import bel;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
WritableSheet sheet0 = book.getSheet(0);
sheet0.addCell(new Label(0, 1, "陈小稳"));
// 添加一个工作表
WritableSheet sheet = book.createSheet(" 第二页 ", 1);
WritableSheet writableSheet = wwb.createSheet(readonlySheet.getName(),
0);// 创建可写工作表
// 2.誊写不同数据格式的数据
for (int rowIndex = 0; rowIndex < readonlySheet.getRows(); rowIndex++) {
import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.Range;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Alignment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
// modifyDirectly2(new File("c:/templete.xls"));
相关文档
最新文档