Java开发小技巧:使用Apache POI读取Excel

【JAVA实战】如何使用 Apache POI 在 Java 中写入 Excel 文件 大家好!🌟 在这篇文章中,我们将带你深入学习如何使用 Apache POI 在 Java 中编写 Excel 文件的技巧!📊📚 如果你是 Java 开发者,或者正在探索如何处理 Excel 文件的数据,那么这篇文章绝对不容错过!🚀在这里,我们不仅仅是介绍基础的 Excel 文件写入方法,还会通过详细的步骤和代码示例,帮助你快速上手。✨ 通过本篇文章,你将掌握如何创建 Excel 文件、如何插入数据以及如何使用 Apache POI 简单而高效地操作 Excel 文件!📑💻。 阅读详情

前言

在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel、csv、xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的,比如各种各样的报表文件,往往是一些复杂的表格结构,其中不仅有我们需要的数据,还有一些冗余的、无价值的数据,这时我们就无法直接用一般数据加载工具直接读取入库了。也许你会想,数据源导出文件前先处理好数据就行了。然而,实际开发中数据源往往是多个的,而且涉及到不同的部门甚至公司,这其间难免会出现各种麻烦,甚至有些数据文件还是纯手工处理的,不一定能给到你满意的数据格式。所以我们不讨论谁该负责转换的问题,这里主要介绍如何使用Apache POI来从Excel数据文件中读取我们想要的数据,以及用Bean Validation对数据内容按照预定的规则进行校验。

文章要点:

  • Apache POI是什么
  • 如何使用Apache POI读取Excel文件
  • 使用Bean Validation进行数据校验
  • Excel读取工具类
  • 使用实例

Apache POI是什么

Apache POI是用Java编写的免费开源的跨平台的Java API,提供API给Java程式对Microsoft Office格式档案进行读和写的操作。


如何使用Apache POI处理Excel文件

1、导入Maven依赖

<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi</artifactId>
 <version>3.17</version>
</dependency>
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-ooxml</artifactId>
 <version>3.17</version>
</dependency>
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-ooxml-schemas</artifactId>
 <version>3.17</version>
</dependency>
<dependency>
 <groupId>org.apache.poi</groupId>
 <artifactId>poi-scratchpad</artifactId>
 <version>3.17</version>
</dependency>

2、创建Workbook实例

这里需要注意的是Excel文档的版本问题,Excel2003及以前版本的文档使用HSSFWorkbook对象,Excel2007及之后版本使用HSSFWorkbook对象

// Excel2003及以前版本
Workbook workbook = new XSSFWorkbook(new FileInputStream(path));
// Excel2007及之后版本
Workbook workbook = new HSSFWorkbook(new FileInputStream(path));

3、获取Sheet表格页对象

Sheet是Excel文档中的工作簿即表格页面,读取前要先找到数据所在页面,可以通过标签名或者索引的方式获取指定Sheet对象

// 按索引获取
Sheet sheet = workbook.getSheetAt(index);
// 按标签名获取
Sheet sheet = workbook.getSheet(label);

4、获取Cell单元格对象

// 行索引row和列索引col都是以 0 起始
Cell cell = sheet.getRow(row).getCell(col);

5、获取单元格内容

获取单元格的值之前首先要获知单元格内容的类型,在Excel中单元格有6种类型:

  1. CELL_TYPE_BLANK :空值
  2. CELL_TYPE_BOOLEAN :布尔型
  3. CELL_TYPE_ERROR : 错误
  4. CELL_TYPE_FORMULA :公式型
  5. CELL_TYPE_STRING:字符串型
  6. CELL_TYPE_NUMERIC:数值型

各种类型的内容还需要进一步判断其数据格式,例如单元格的Type为CELL_TYPE_NUMERIC时,它有可能是Date类型,在Excel中的Date类型是以Double类型的数字存储的,不同类型的值要调用cell对象相应的方法去获取,具体情况具体分析

public Object getCellValue(Cell cell) {
 if(cell == null) {
 return null;
 }
 switch (cell.getCellType()) {
 case Cell.CELL_TYPE_STRING:
 return cell.getRichStringCellValue().getString();
 case Cell.CELL_TYPE_NUMERIC:
 if (DateUtil.isCellDateFormatted(cell)) {
 return cell.getDateCellValue();
 } else {
 return cell.getNumericCellValue();
 }
 case Cell.CELL_TYPE_BOOLEAN:
 return cell.getBooleanCellValue();
 case Cell.CELL_TYPE_FORMULA:
 return formula.evaluate(cell).getNumberValue();
 default:
 return null;
 }
}

6、关闭Workbook对象

workbook.close();

使用Bean Validation进行数据校验

当你要处理一个业务逻辑时,数据校验是你不得不考虑和面对的事情,程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的或者符合预定义的格式,一个Java程序一般是分层设计的,而不同的层可能是不同的开发人员来完成,这样就很容易出现不同的层重复进行数据验证逻辑,导致代码冗余等问题。为了避免这样的情况发生,最好是将验证逻辑与相应的模型进行绑定。

Bean Validation 规范的目标就是避免多层验证的重复性,它提供了对 Java EE 和 Java SE 中的 Java Bean 进行验证的方式。该规范主要使用注解的方式来实现对 Java Bean 的验证功能,从而使验证逻辑从业务代码中分离出来。

Hibernate Validator 是 Bean Validation 规范的参考实现,我们可以用它来实现数据验证逻辑,其Maven依赖如下:

<dependency>
 <groupId>org.hibernate</groupId>
 <artifactId>hibernate-validator</artifactId>
 <version>5.1.3.Final</version>
</dependency>
<dependency>
 <groupId>javax.el</groupId>
 <artifactId>javax.el-api</artifactId>
 <version>2.2.4</version>
</dependency>

关于Bean Validation的详细介绍可参考以下文章:

JSR 303 - Bean Validation 介绍及最佳实践

Bean Validation 技术规范特性概述


Excel读取工具类

我们要达到的效果是,模拟游标的方式构建一个Excel读取工具类ExcelReadHelper,然后加载Excel文件流来创建工具类实例,通过这个实例我们可以像游标一样设置当前的行和列,定好位置之后读取出单元格的值并进行校验,完成对Excel文件的读取校验操作。既然是读取还有校验数据,异常处理和提示当然是至关重要的,所以还要有人性化的异常处理方式,方便程序使用者发现Excel中格式或内容有误的地方,具体到哪一行哪一项,出现的问题是什么。

ExcelReadHelper工具类主体

public class ExcelReadHelper {
 private static ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
 //文件绝对路径
 private String excelUrl;
 private Workbook workbook;
 private Sheet sheet;
 //Sheet总数
 private int sheetCount;
 //当前行
 private Row row;
 private Validator validator;
 
 public ExcelReadHelper(File excelFile) throws ExcelException {
 validator = factory.getValidator();
 excelUrl = excelFile.getAbsolutePath();
 //判断工作簿版本
 String fileName = excelFile.getName();
 String suffix = fileName.substring(fileName.lastIndexOf("."));
 try {
 if(suffix.equals(".xlsx")) {
 workbook = new XSSFWorkbook(new FileInputStream(excelFile));
 } else if(suffix.equals(".xls")) {
 workbook = new HSSFWorkbook(new FileInputStream(excelFile));
 } else {
 throw new ExcelException("Malformed excel file");
 }
 } catch(Exception e) {
 throw new ExcelException(excelUrl, e);
 }
 sheetCount = workbook.getNumberOfSheets();
 }
 
 /**
 * 关闭工作簿
 * @throws ExcelException 
 * @throws IOException
 */
 public void close() throws ExcelException {
 if (workbook != null) {
 try {
 workbook.close();
 } catch (IOException e) {
 throw new ExcelException(excelUrl, e);
 }
 }
 }
 
 /**
 * 获取单元格真实位置
 * @param row 行索引
 * @param col 列索引
 * @return [行,列]
 */
 public String getCellLoc(Integer row, Integer col) {
 return String.format("[%s,%s]", row + 1, CellReference.convertNumToColString(col)); 
 }
 
 /**
 * 根据标签设置Sheet
 * @param labels
 * @throws ExcelException
 */
 public void setSheetByLabel(String... labels) throws ExcelException {
 Sheet sheet = null;
 for(String label : labels) {
 sheet = workbook.getSheet(label);
 if(sheet != null) {
 break;
 }
 }
 if(sheet == null) {
 StringBuilder sheetStr = new StringBuilder();
 for (String label : labels) {
 sheetStr.append(label).append(",");
 }
 sheetStr.deleteCharAt(sheetStr.lastIndexOf(","));
 throw new ExcelException(excelUrl, sheetStr.toString(), "Sheet does not exist");
 }
 this.sheet = sheet;
 }
 
 /**
 * 根据索引设置Sheet
 * @param index
 * @throws ExcelException 
 */
 public void setSheetAt(Integer index) throws ExcelException {
 Sheet sheet = workbook.getSheetAt(index);
 if(sheet == null) {
 throw new ExcelException(excelUrl, index + "", "Sheet does not exist");
 }
 this.sheet = sheet;
 }
 /**
 * 获取单元格内容并转为String类型
 * @param row 行索引
 * @param col 列索引
 * @return
 */
 @SuppressWarnings("deprecation")
 public String getValueAt(Integer row, Integer col) {
 Cell cell = sheet.getRow(row).getCell(col);
 String value = null;
 if (cell != null) {
 switch (cell.getCellType()) {
 case Cell.CELL_TYPE_STRING:
 value = cell.getStringCellValue() + "";
 break;
 case Cell.CELL_TYPE_NUMERIC:
 if (DateUtil.isCellDateFormatted(cell)) {
 value = cell.getDateCellValue().getTime() + "";
 } else {
 double num = cell.getNumericCellValue();
 if(num % 1 == 0) {
 value = Double.valueOf(num).intValue() + "";
 } else {
 value = num + "";
 }
 }
 break;
 case Cell.CELL_TYPE_FORMULA:
 value = cell.getNumericCellValue() + "";
 break;
 case Cell.CELL_TYPE_BOOLEAN:
 value = String.valueOf(cell.getBooleanCellValue()) + "";
 break;
 }
 }
 return (value == null || value.isEmpty()) ? null : value.trim();
 }
 
 /**
 * 获取当前行指定列内容
 * @param col 列索引
 * @return
 */
 public String getValue(Integer col) {
 return getValueAt(row.getRowNum(), col);
 }
 
 /**
 * 获取Sheet名称
 * @return
 */
 public String getSheetLabel() {
 String label = null;
 if(sheet != null) {
 label = sheet.getSheetName();
 }
 return label;
 }
 
 /**
 * 行偏移
 * @param offset 偏移量
 * @return
 */
 public Boolean offsetRow(Integer offset) {
 Boolean state = true;
 if(row == null) {
 row = sheet.getRow(offset-1);
 } else {
 row = sheet.getRow(row.getRowNum() + offset);
 if(row == null) {
 state = false;
 }
 }
 return state;
 }
 
 /**
 * 设置行
 * @param index 索引
 * @return
 */
 public Boolean setRow(Integer index) {
 row = sheet.getRow(index);
 return row != null;
 }
 
 /**
 * 偏移一行
 * @return
 */
 public Boolean nextRow() {
 return offsetRow(1);
 }
 
 /**
 * 偏移到下一个Sheet
 * @return
 */
 public Boolean nextSheet() {
 Boolean state = true;
 if(sheet == null) {
 sheet = workbook.getSheetAt(0);
 } else {
 int index = workbook.getSheetIndex(sheet) + 1;
 if(index >= sheetCount) {
 sheet = null;
 } else {
 sheet = workbook.getSheetAt(index);
 }
 
 if(sheet == null) {
 state = false;
 }
 }
 row = null;
 return state;
 }
 
 /**
 * 数据校验
 * @param obj 校验对象
 * @throws ExcelException
 */
 public <T> void validate(T obj) throws ExcelException {
 Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);
 if(constraintViolations.size() > 0) {
 Iterator<ConstraintViolation<T>> iterable = constraintViolations.iterator();
 ConstraintViolation<T> cv = iterable.next();
 throw new ExcelException(excelUrl, sheet.getSheetName(), row.getRowNum() + 1 + "", 
 String.format("%s=%s:%s", cv.getPropertyPath(), cv.getInvalidValue(), cv.getMessage()));
 }
 }
 /**
 * 抛出当前Sheet指定行异常
 * @param row 异常发生行索引
 * @param message 异常信息
 * @return
 */
 public ExcelException excelRowException(Integer row, String message) {
 return new ExcelException(excelUrl, sheet.getSheetName(), row + 1 + "", message);
 }
 /**
 * 抛出当前行异常
 * @param message 异常信息
 * @return
 */
 public ExcelException excelCurRowException(String message) {
 return new ExcelException(excelUrl, sheet.getSheetName(), row.getRowNum() + 1 + "", message);
 }
 /**
 * 抛出自定义异常
 * @param message 异常信息
 * @return
 */
 public ExcelException excelException(String message) {
 return new ExcelException(excelUrl, message);
 }
}

ExcelException异常类

public class ExcelException extends Exception {
 public ExcelException() {
 super();
 }
 public ExcelException(String message) {
 super(message);
 }
 public ExcelException(String url, String message) {
 super(String.format("EXCEL[%s]:%s", url, message));
 }
 
 public ExcelException(String url, String sheet, String message) {
 super(String.format("EXCEL[%s],SHEET[%s]:%s", url, sheet, message));
 }
 
 public ExcelException(String url, String sheet, String row, String message) {
 super(String.format("EXCEL[%s],SHEET[%s],ROW[%s]:%s", url, sheet, row, message));
 }
 
 public ExcelException(String url, Throwable cause) {
 super(String.format("EXCEL[%s]", url), cause);
 }
 
}

使用实例

// 使用Excel文件对象初始化ExcelReadHelper
ExcelReadHelper excel = new ExcelReadHelper(file);
 
// 第一页
excel.setSheetAt(0);
 
// “Sheet1”页
excel.setSheetByLabel("Sheet1");
 
// 下一页
excel.nextSheet();
 
// 第一行(以 0 起始)
excel.setRow(0);
 
// 下一行
excel.nextRow();
 
// 偏移两行
excel.offsetRow(2);
 
// 当前行第一列的值
String value1 = excel.getValue(0);
 
// 第一行第一列的值
String value2 = excel.getValueAt(0,0);
 
// 获取单元格真实位置(如索引都为0时结果为[1,A])
String location = excel.getCellLoc(0,0);
 
// 当前页标题(如“Sheet1”)
String label = excel.getSheetLabel();
 
// 校验读取的数据
try {
 excel.validate(obj);
} catch (ExcelException e) {
 // 错误信息中包含具体错误位置以及原因
 e.printStackTrace();
}
//抛出异常,结果自动包含出现异常的Excel路径
throw excel.excelException(message);
//抛出指定行异常,结果自动包含出现错误的Excel路径、当前页位置
throw excel.excelRowException(0, message);
//抛出当前行异常,结果自动包含出现错误的Excel路径、当前页、当前行位置
throw excel.excelCurRowException(message);
//关闭工作簿Workbook对象
excel.close();

欢迎工作一到八年的Java工程师朋友们加入Java高级交流群:854630135

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有直播平台和讲师直接交流噢

哦对了,喜欢就别忘了关注一下哦~

java 采用apache poi处理excel文件兼容2003及2007 需要引入的jar包  poi-3.13.jar、poi-ooxml-3.13.jar、poi-ooxml-schemas-3.13.jar、xmlbeans-2.6.0.jar 。 maven工程引入方式 org.apache.poi poi 3.12 org.apache.poi poi-ooxml 3.12 阅读详情

相关推荐

Java使用Apache POI读取Excel文件实战教程

本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Java编程中如何利用Apache POI库读取Excel文件,包括支持的文件格式、所需jar包及其功能,以及读取操作的基本步骤。通过实例代码展示了如何读取.xlsx文件,并对数据进行遍历和处理。同时,强调了在处理大型文件时进行性能优化的重要性。 1. Apache POI库介绍 Apache POI 是一...

weixin_35749796的博客 2202

POI 5.2.2 版本 excel 转json,json转excel 工具类

POI 5.2.2 版本 excel 转json,json转excel 工具类

qq_21736839的博客 1845

poi-5.2.2 版本整体工具类

没太多时间整理,有朋友需要就先贴出来了,缺失留言 包含word、段落、页眉、页脚、图片、表格等常用工具方法

poi 升级到 5.2.2 修改内容:

poi从3.6 升级为新版本5.2.2,导致 原先的代码 报错,替换方案_xssfcellstyle.border_thin_耷腊呜呜的博客-优快云博客POI版本升级,从POI3.11升级到POI4.1.0_poi最新版本_秋装什么的博客-优快云博客

QQ2856639881的专栏 4497

poi-5.2.2.jar

pdfbox-tools-2.0.26.jar

poi-ooxml-schemas.zip

Apache poi 的poi-ooxml-schemas的jar包 这包不太好下载,好不容易找到的给大家分享下。 poi-ooxml-schemas-3.9.jar 和poi-ooxml-schemas-3.17.jar

POI的基本使用

在开发中,我们难免会遇到一些关于EXCEL、WORD的操作,这是我们可以使用阿帕奇的POI,当然你也可以使用阿里的EasyPOI,看个人爱好,下面我将介绍阿帕奇的POI 了解一下,两个版本,一个是03版本,后缀是.xls,最多65535行,耗时时间短,07版本,后缀是.xlsx,最多无限制行,耗时间较长 首先是进行写表操作,如果表不存在,会自动创建表。 03版本 /** * @Auther: luo * @Date: 2020/8/16 14:01 * @Description: */ publi

罗罗的1024 1105

使用poi读取、写入复杂excel工具类(包含样式)

使用poi读取写入复杂excel内容包括样式,工具类

POI导出EXCEL时,设置单元格格式有效性验证helper.createDateConstraint()

POI在操作excel导出的时候,有时候想要设置单元格样式,再次编辑的时候只允许输入特定格式的内容。POI中提供了多种格式的有效性验证方式,下面将自己用到的验证方式以及使用方法列出: 1.日期格式的验证 //创建数据验证类 DataValidationHelper helper = sheet.getDataValidationHelper(); //设置验证生效的范围 CellRangeA...

【折翼天使不孤单】的博客 8313

新四化浪潮下,中年整车诊断工程师的黄金突围路

摘要 本文探讨了汽车电子诊断工程师在当前行业变革中的独特优势与发展路径。作者作为从业者指出,整车诊断岗位在汽车"新四化"浪潮中呈现"逆生长"特性:技术壁垒高、经验复利强、市场需求持续增长。中年工程师凭借丰富的案例积累和实战经验成为行业稀缺人才,薪资水平显著高于同龄段其他技术岗位。文章分析了四条职业发展路径(技术专家、技术管理、细分深耕、横向拓展),并警示了三大职业风险(执行层局限、技术停滞、成果沉淀不足)。最后提出具体建议,强调掌握UDS高阶、DoIP以太网诊断等核心技术的重要性,为中年技术人提供了清晰的职

Soly_kun的博客 309

黑群晖断电后存储池‘已损毁’?别慌,SSH里这几条命令能救急

本文详细解析黑群晖断电后存储池显示‘已损毁’的紧急修复方法。通过SSH命令行工具,提供从诊断到修复的完整流程,包括RAID阵列重新组装、设备重建等关键步骤,帮助用户恢复数据访问。适用于因意外断电导致的存储池异常情况。

weixin_42651748的博客 377

Java开发小技巧(六):使用Apache POI读取Excel

在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel、csv、xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的,比如各种各样的报表文件,往往是一些复杂的表格结构,其中不仅有我们需要的数据,还有一些冗余的、无价值的数据,这时我们就无法直接用一般数据加载工具直接读取入库了。

kMacro的博客 497

HFSS初学笔记(二)——75Ω带状线设计

本文利用HFSS软件设计并优化了一条75Ω的带状线结构,通过调整几何参数和介质材料,实现了精确的阻抗控制。仿真结果显示,该带状线在高频信号传输中的表现优越,具有良好的S参数、低插入损耗和极小的信号反射损耗。

2401_87464239的博客 4553

Apache POI使用详解

一 :简介开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等

人不风流枉少年 13万+

关于示波器测485串口波特率的使用方法总结

之前没有用过示波器,更不知道怎么来测试串口的波特率,结果遇到一客户说我们产品的波特率达不到9600,只有9100,为了验证这一说法,我们只能自己测试一下。说明:产品通过485接电脑,用串口调试助手接收都是没有问题的,用客户的设备接收就有问题。 下面说一下示波器测波特率的方法步骤: 显示高低跳变的情况: 1.先把示波器表笔的地线(夹子)夹485B,表笔夹485A。 2.往串口发送数据:如发送

lianxue1986的专栏 3万+

半监督的医学分割数据集(LA, Pancreas, ACDC和PROMISE12)分享

这篇文章提供了四个常用的半监督医学分割数据集,所有数据集都已经被处理成了.h5文件。下载之后就可以直接使用

qq_45691955的博客 4182

使用Java通过POI读取EXCEL中的数据

这里有个Excel,怎么使用java读取excel中的数据呢? 首先引入poi的jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependen..

此人很懒,什么也没有留下~ 1万+

避开模板匹配的坑:OpenCVSharp中边缘梯度算法的优化实践

本文深入探讨了OpenCVSharp中边缘梯度算法在模板匹配中的优化实践,解决了传统方法在尺度变化、角度旋转和光照差异下的局限性。通过Sobel算子提取边缘梯度特征,结合轮廓检测和多尺度匹配策略,显著提升了匹配的鲁棒性和准确性。文章还分享了并行计算、内存访问优化等实战技巧,适用于工业检测和自动化识别场景。

http9protocoller的博客 199

Java使用POI读取Excel

需要的jar包 poi-ooxml-3.8.jar poi-ooxml-schemas-3.8.jar poi-scratchpad-3.8.jar dom4j-1.6.1.jar xmlbeans-2.3.0.jar 读取excel import java.io.FileInputStream; import java.io.FileNotFoundException; i...

leyili_s的博客 1万+

蓝桥杯历年真题分类汇总(史上最全版本,一定不要错过)

天再高又怎样,踮起脚尖就更接近阳光。 满满的 题型总结​ 历年真题​ 视频讲解​ 比赛技巧 题型总结 2021 2020 2019 2018 2017 2016 2015 2014 2013 ...

m0_58367586的博客 11万+

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

java poi读取excel数据_java 使用POI读取excel数据

原文:http://doc.okbase.net/0201zcr/archive/161440.html一、定义Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。二、所需jar包:三、简单的一个读取excel的demo1、读取文件方法/*** 读取出filePath中的所有数据信息* @param f...

weixin_33716616的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JAVA 使用POI读取文档

前言:工作时总会用到一个Excel工具类来完成对EXCEL的导入和导出,傻瓜式的强大工具类让我潦草地使用API调用,但实际上POI对Excel是如何操作的并不明白,换个项目或者架构就不知道如何用POI读取EXCEL了,又或者复杂的EXCEL表样式不会导出,因此决定学习记录一下。 POI是什么? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。

Clawww的学习笔记 5654

假人有限元模型

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java使用Apache POI实现Excel的导出下载与读取功能

如果你需要处理复杂的Excel文件并且数据量适中,Apache POI是一个更好的选择

Good good study,day day up 2800

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java读取Excel数据:基于Apache POI

Java本身不支持直接读取微软的Excel表格数据。第三方的Apache提供了一个库POI用以支持Java读写Excel表格数据。 首先需要到Apache官网下载POI的库,下载链接地址:https://poi.apache.org/download.html 本文使用的poi-3.9-20121203 假设现在有有一个名为1.xls的Excel文件,1.xls的表数据内容是这...

一个标题 2476
上一篇: “网红架构师”解决你的Ceph 运维难题
下一篇: JAVA程序员你该思考一下自己的未来
javaQQ群 866865133
博客等级 码龄8年 59粉丝 309原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值