java操作Excel(POI)
1.读取Excel
static void read() throws IOException, InvalidFormatException {
//声明读取的文件
File file = new File("D:\\hello.xlsx");
//创建工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook(file);
//获取第一个工作表
XSSFSheet sheetAt = workbook.getSheetAt(0);
//遍历行
for (Row cells : sheetAt) {
//遍历列
for (Cell cell : cells) {
//设置列属性 String
cell.setCellType(CellType.STRING);
//以字符串方式但因
System.out.print(cell.getStringCellValue()+"\t");
}
System.out.println();
}
workbook.close();//关闭
}
2.写出Excle
public static void witer() throws IOException {
//设置写入的文件位置
File file = new File("D:/xx.xlsx");
//创建工作簿
XSSFWorkbook sheets = new XSSFWorkbook();
//创建工作表
XSSFSheet sheet = sheets.createSheet("测试java");
//创建行
XSSFRow row = sheet.createRow(0);
//创建列并且设置值
row.createCell(0).setCellValue("哈哈哈");
row.createCell(1).setCellValue("嘻嘻嘻");
row.createCell(2).setCellValue("嘿嘿嘿");
XSSFRow row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("哈哈哈");
row1.createCell(1).setCellValue("嘻嘻嘻");
row1.createCell(2).setCellValue("嘿嘿嘿");
//创建输出流对象
FileOutputStream out = new FileOutputStream(file);
//写入
sheets.write(out);
out.flush();
sheets.close();
out.close();
System.out.println("写完收工");
}
3.合并单元格
1.给工作表添加合并规则
//创建工作表
XSSFSheet sheet = sheets.createSheet("测试java");
//指定合并开始行、合并结束行 合并开始列、合并结束列
CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, 2);
//添加要合并地址到表格
sheet.addMergedRegion(rangeAddress);
//创建行
XSSFRow row = sheet.createRow(0);
//创建列并且设置值
row.createCell(0).setCellValue("哈哈哈");
row.createCell(1).setCellValue("嘻嘻嘻");
row.createCell(2).setCellValue("嘿嘿嘿");
sheet.addMergedRegion(new CellRangeAddress(0,0,3,5));
XSSFCell cell = row.createCell(3);
cell.setCellStyle(cellStyle);
cell.setCellValue("sss");
//指定合并开始行、合并结束行 合并开始列、合并结束列
CellRangeAddress rangeAddress1 = new CellRangeAddress(1, 1, 0, 2);
//添加要合并地址到表格
sheet.addMergedRegion(rangeAddress1);
XSSFRow row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("哈哈哈");
row1.createCell(3).setCellValue("嘻嘻嘻");
row1.createCell(4).setCellValue("嘿嘿嘿");
以上代码效果
黄色背景的样式如下
//创建单元格样式
XSSFCellStyle cellStyle = sheets.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//设置样式对齐方式:水平\垂直居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
2.进阶合并单元格(代码里的3 :就是3个格子3个格子划分传入)写几就几个格式划分
for (int i = 0; i <15 ; i++) {
sheet.addMergedRegion(new CellRangeAddress(0,0,i*3,i*3+3-1));
ExcleUtils.createCell(row,i*3,"2010-2-1",null);
System.out.println("写入成功"+i*3);
}
例如:
4.列的类型说明
CellType.STRING 字符串
CellType._NONE 未知类型,仅限内部使用
CellType.BLANK 空单元格-没值,但有单元格样式
CellType.BOOLEAN 布尔值
CellType.ERROR 错误单元格
CellType.FORMULA 公式
CellType.NUMERIC 数值类型,整数,小数,日期
5.Excle工具类
package com.zyd.util;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* excle工具类
* 作者:page
* version:1.0
*/
public class ExcleUtils {
/**
*获取带样式的工作表对象
* @param workbook 工作簿对象
* @param sheetName 工作表名称
* @param cellRangeAddress 合并单元格的规则对象 不使用传Null即可
* @return 返回工作表对象
*/
public static Sheet getSheet(XSSFWorkbook workbook, String sheetName, CellRangeAddress cellRangeAddress){
XSSFSheet sheet = workbook.createSheet(sheetName);
if(null != cellRangeAddress)
sheet.addMergedRegion(cellRangeAddress);
return sheet;
}
/**
*获取工作表对象
* @param workbook 工作簿对象
* @param sheetName 工作表名称
*
* @return 返回工作表对象
*/
public static XSSFSheet getSheet(XSSFWorkbook workbook,String sheetName){
XSSFSheet sheet = workbook.createSheet(sheetName);
return sheet;
}
/**
* 创建列并值
* @param row 指定那一行要创建列与值
* @param cellIndex 创建列的下标
* @param cellValue 创建列下标的值
* @param cellType 创建列的类型默认字符串 CellType.STRING
*/
public static void createCell(XSSFRow row, int cellIndex, String cellValue, CellType cellType){
XSSFCell cell = row.createCell(cellIndex);
if(null != cellType){
cell.setCellType(cellType);
}else
cell.setCellType(CellType.STRING);
cell.setCellValue(cellValue);
}
/**
* 关闭XSSFWorkbook
* @param workbook 工作簿对象
*/
public static void excleClose(XSSFWorkbook workbook){
File file = new File("D:/zz.xlsx");
FileOutputStream out = null;
try{
out = new FileOutputStream(file);
workbook.write(out);
out.flush();
//关闭流
out.close();
workbook.close();
}catch (IOException e){
e.printStackTrace();
}
}
/**
* 创建一个工作簿
* @param path
* @return
*/
public static XSSFWorkbook createXSSFWorkbook(String path){
File file = new File(path);
XSSFWorkbook workbook = null;
try {
if(StringUtils.isEmpty(path))
workbook=new XSSFWorkbook();
else
workbook= new XSSFWorkbook(file);
}catch (IOException | InvalidFormatException e){
e.printStackTrace();
}
return workbook;
}
}