1、简介

  Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能。

2、依赖的jar包

    <!-- excel 工具类 -->
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
</dependencies>

3、POI读取EXCEL文件

  ---->读取指定的若干列单元格数据

        /**
* description:读取xlsx文件指定的若干列单元格数据
     * args:指定的若干列的序号(列可以任意个)
*/
@SuppressWarnings({ "resource", "unused" })
public ArrayList<ArrayList<String>> xlsx_reader(String excel_url,int ... args) throws IOException {
ArrayList<ArrayList<String>> ans=new ArrayList<ArrayList<String>>();
File excelFile = null;
InputStream is = null;
try {
//读取xlsx文件
XSSFWorkbook xssfWorkbook = null;
//寻找目录读取文件
excelFile = new File(excel_url);
is = new FileInputStream(excelFile);
xssfWorkbook = new XSSFWorkbook(is);
if(xssfWorkbook==null){
System.out.println("未读取到内容,请检查路径!");
return null;
}
//遍历xlsx中的sheet
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
// 对于每个sheet,读取其中的每一行
for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow == null) continue;
ArrayList<String> curarr=new ArrayList<String>();
for(int columnNum = 0 ; columnNum<args.length ; columnNum++){
XSSFCell cell = xssfRow.getCell(args[columnNum]);
curarr.add( Trim_str( getValue(cell) ) );
}
ans.add(curarr);
}
}
}catch(Exception e) {
e.getStackTrace();
}finally {
is.close();
}
return ans;
} //判断后缀为xlsx的excel文件的数据类型
@SuppressWarnings("deprecation")
private static String getValue(XSSFCell xssfRow) {
if(xssfRow==null){
return "---";
}
if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
return String.valueOf(xssfRow.getBooleanCellValue());
} else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
double cur=xssfRow.getNumericCellValue();
long longVal = Math.round(cur);
Object inputValue = null;
if(Double.parseDouble(longVal + ".0") == cur)
inputValue = longVal;
else
inputValue = cur;
return String.valueOf(inputValue);
} else if(xssfRow.getCellType() == xssfRow.CELL_TYPE_BLANK || xssfRow.getCellType() == xssfRow.CELL_TYPE_ERROR){
return "---";
}
else {
return String.valueOf(xssfRow.getStringCellValue());
}
} //判断后缀为xls的excel文件的数据类型
@SuppressWarnings("deprecation")
private static String getValue(HSSFCell hssfCell) {
if(hssfCell==null){
return "---";
}
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
double cur=hssfCell.getNumericCellValue();
long longVal = Math.round(cur);
Object inputValue = null;
if(Double.parseDouble(longVal + ".0") == cur)
inputValue = longVal;
else
inputValue = cur;
return String.valueOf(inputValue);
} else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BLANK || hssfCell.getCellType() == hssfCell.CELL_TYPE_ERROR){
return "---";
}
else {
return String.valueOf(hssfCell.getStringCellValue());
}
} //字符串修剪 去除所有空白符号 , 问号 , 中文空格
static private String Trim_str(String str){
if(str==null)
return null;
return str.trim();//str.replaceAll("[\\s\\?]", "").replace(" ", "");
}

4、使用POI设置EXCEL文件单元格格式

---->批量修改指定列多行单元格的颜色

        /**
* description:批量修改指定sheet表中某列的多行单元格格式(颜色)
*/
public void setXLSXColor(String url,int sheetNumber,ArrayList<Integer> rowNumbers,int colNumber) throws IOException {//XLSX 的单元格填充颜色
//读取xlsx文件
InputStream is = new FileInputStream(new File(url));
XSSFWorkbook my_workbook = new XSSFWorkbook(is);
XSSFCellStyle my_style = my_workbook.createCellStyle(); // Get access to XSSFCellStyle */
my_style.setFillPattern(XSSFCellStyle.FINE_DOTS );
my_style.setFillForegroundColor(IndexedColors.BRIGHT_GREEN.getIndex());
//my_style.setFillBackgroundColor(IndexedColors.RED.getIndex());
is.close();
XSSFSheet xssfSheet = my_workbook.getSheetAt(sheetNumber); //拿取xlsx中的sheetNumber,设置单元格颜色
XSSFCell cellTarge = null;
for(int i=0;i < rowNumbers.size();i++) {
cellTarge = xssfSheet.getRow(rowNumbers.get(i)).getCell(colNumber);
cellTarge.setCellStyle(my_style);
}
FileOutputStream out = new FileOutputStream(new File(url));
my_workbook.write(out);
out.close();
}

5、参考文献

<1> https://blog.csdn.net/qq547276542/article/details/75175289

<2> https://www.oschina.net/code/snippet_12_16825

Java使用POI操作Excel文件的更多相关文章

  1. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  2. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  3. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  4. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  5. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  6. java通过poi编写excel文件

    public String writeExcel(List<MedicalWhiteList> MedicalWhiteList) { if(MedicalWhiteList == nul ...

  7. java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

    需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...

  8. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  9. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

随机推荐

  1. JAVA基础——编程练习(三)

    熟悉String方法的使用之判断文件名是否合法 学习之余,写个小练习来巩固一下String的方法应用. 任务: 1.判断用户选择要输入的内容的类型 2.如果是java文件,输出“您输入的是java文件 ...

  2. 【算法笔记】B1039 到底买不买

    1039 到底买不买 (20 分) 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子 ...

  3. Training set,Gallery set 和Probe set的区别

    这段时间看了CVPR2017的这篇论文”SphereFace:Deep Hypersphere Embedding for Face Recognition" 里面有提到Probe set, ...

  4. codeforces1073d Berland Fair 思维(暴力删除)

    题目传送门 题目大意:一圈人围起来卖糖果,标号从1-n,每个位置的糖果都有自己的价格,一个人拿着钱从q开始走,能买则买,不能买则走到下一家,问最多能买多少件物品. 思路:此题的关键是不能买则走到下一家 ...

  5. 将M个客服随机分配给N个客户

    class AllocUser { //客户多于客服 public static void Test() { var customers = new List<Customer>() { ...

  6. [转] 用Python建立最简单的web服务器

    [From] http://www.cnblogs.com/xuxn/archive/2011/02/14/build-simple-web-server-with-python.html 利用Pyt ...

  7. scraoy之日志等级处理

    一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...

  8. java中的线程(4):常用同步类 CountDownLatch、CyclicBarrier和Semaphore

    转自: http://www.cnblogs.com/dolphin0520/p/3920397.html 1.简介 CountDownLatch和CyclicBarrier都能够实现线程之间的等待, ...

  9. Java 单向链表学习

    Java 单向链表学习 链表等同于动态的数组:可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式:链表的使用可以更加便于操作. 链表的基本结构包括:链表工具类和节点类, ...

  10. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由wataloo发表在专栏wataloo的试验田 1 设计概要 1.1 设计原则和目的 英雄AI的目的主要有: 1.新手过渡局,让玩家刚 ...