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. Tensorflow博文列表

    tensorflow:https://wenku.baidu.com/view/489ecc9727fff705cc1755270722192e44365853.html 语义分割SegNet:htt ...

  2. GCD - Extreme (II) UVA - 11426 数学

    Given the value of N , you will have to nd the value of G . The de nition of G is given below: G = i ...

  3. Qt 学习之路 2(62):保存 XML

    Home / Qt 学习之路 2 / Qt 学习之路 2(62):保存 XML Qt 学习之路 2(62):保存 XML  豆子  2013年8月26日  Qt 学习之路 2  9条评论 前面几章我们 ...

  4. 108th LeetCode Weekly Contest Unique Email Addresses

    Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...

  5. Codeforces - 600E 树上启发式合并

    题意:求每一个子树存在最多颜色的颜色代号和(可重复) 本题是离线统计操作,因此可以直接合并重儿子已达到\(O(nlogn)\)的复杂度 PS.不知道什么是启发式合并的可以这样感受一下:进行树链剖分,分 ...

  6. UVA - 11825 状压DP

    该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 ...

  7. HDU - 3033 滚动数组有坑

    每层至少一个,滚动时要判上一层非法与否,所以每次都要memset #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<= ...

  8. 从source安装python3.5和pip

    按顺序来,先装上python3.5,source安装,命令是 ./configure --prefix="你想要的路径" make make install 然后是安装pip,但是 ...

  9. PHP foreach ($arr as &amp;$value)

    foreach ($arr as &$value) 看到一个有意思的东西: <?php $arr = ['1', '2', '3', '4']; foreach ($arr as &am ...

  10. nginx-图片资源代理

    location ~ .*\.(gif|jpg|jpeg|png|bmp|mp3)$ { root E:/xx/Uploads/; } 记得放在根目录下面