java poi excel_Java使用POI操作Excel

本文详细介绍了如何使用Java的POI库进行Excel的读取和生成。内容包括添加依赖,读取Excel文件,遍历并打印单元格数据,以及生成新的Excel文件,包括设置单元格样式、数据校验和保护工作簿等操作。
摘要由CSDN通过智能技术生成

1. POI操作Excel

1.1. 依赖

org.apache.poi

poi

4.1.0

org.apache.poi

poi-ooxml

4.1.0

org.apache.poi

poi-ooxml-schemas

4.1.0

1.2. 读取Excel

1.2.1. Excel文件内容

a698556453182ebd0f4ab3e02b67387a.png

1.2.2. 代码

/**

* 读取excel

*/

public static void readExcel() {

InputStream inputStream = null;

XSSFWorkbook xssfWorkbook = null;

try {

String past = "/操作excel.xlsx";

inputStream = new FileInputStream(past);

xssfWorkbook = new XSSFWorkbook(inputStream);

//获取sheet的个数

int numberOfSheets = xssfWorkbook.getNumberOfSheets();

//获取指定的sheet

System.out.println(numberOfSheets);

//通过指定名称获取

XSSFSheet sheet = xssfWorkbook.getSheet("笔记本");

//通过下标获取

XSSFSheet sheetAt = xssfWorkbook.getSheetAt(1);

if (sheetAt != null) {

//最后一行有数据的

int lastRowNum = sheetAt.getLastRowNum();

XSSFRow row;

short lastCellNum;

XSSFCell cell;

for (int i = 0; i <= lastRowNum; i++) {

//获取指定行

row = sheetAt.getRow(i);

if (row == null) {

continue;

}

//最后一列有数据的

lastCellNum = row.getLastCellNum();

for (int j = 0; j <= lastCellNum; j++) {

cell = row.getCell(j);

if (cell == null) {

continue;

}

//数据类型

CellType cellType = cell.getCellType();

//字符串

if (CellType.STRING == cellType) {

System.out.println(cell.toString());

}

//数字

else if (CellType.NUMERIC == cellType) {

try {

System.out.println(cell.getDateCellValue());

} catch (Exception e) {

System.out.println(cell.toString());

}

}

//……

else {

System.out.println(cell.toString());

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

1.2.3. 控制台输出结果

2

便签名称

便签分类

创建时间

创建人

拥有人

小明的便签

学习便签

Tue Sep 03 00:00:00 CST 2019

小明

小明

小明的个人便签

个人便签

Sun Sep 08 00:00:00 CST 2019

小明

小明

1.3. 生成excel

1.3.1. 代码

/**

* 生成excel

*/

public static void creatExcel() {

XSSFWorkbook xssfWorkbook = new XSSFWorkbook();

//创建一个sheet

XSSFSheet sheet1 = xssfWorkbook.createSheet("第一个新建的sheet");

//设置高度和宽度,也可以每行每列单独分开设置

//参数为字符个数

sheet1.setDefaultColumnWidth(20);

sheet1.setDefaultRowHeight((short) (33 * 20));

//第二个参数为字符宽度的1/256

sheet1.setColumnWidth(5, 30 * 256);

//设置单元格样式

XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();

// 字体样式

Font fontStyle = xssfWorkbook.createFont();

fontStyle.setBold(true);

// 字体

fontStyle.setFontName("等线");

// 大小

fontStyle.setFontHeightInPoints((short) 11);

// 将字体样式添加到单元格样式中

cellStyle.setFont(fontStyle);

//水平居中

cellStyle.setAlignment(HorizontalAlignment.CENTER);

//垂直居中

cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

//设置 单元格填充色

DefaultIndexedColorMap defaultIndexedColorMap = new DefaultIndexedColorMap();

XSSFColor clr = new XSSFColor(defaultIndexedColorMap);

byte[] bytes = {

(byte) 217,

(byte) 217,

(byte) 217

};

clr.setRGB(bytes);

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

cellStyle.setFillForegroundColor(clr);

//设置单元格不为锁定,可编辑,反是用了这个样式的都可编辑

cellStyle.setLocked(false);

//锁定整个sheet不可编辑

sheet1.protectSheet("1231312");

//创建一行数据

XSSFRow row;

XSSFCell cell;

row = sheet1.createRow(0);

cell = row.createCell(0);

//设值

cell.setCellValue("2");

//合并单元格

CellRangeAddress cra = new CellRangeAddress(1, 1, 0, 3); // 起始行, 终止行, 起始列, 终止列

sheet1.addMergedRegion(cra);

//设置合并单元格的样式

// 使用RegionUtil类为合并后的单元格添加边框

// 下边框

RegionUtil.setBorderBottom(BorderStyle.MEDIUM_DASHED, cra, sheet1);

// 左边框

RegionUtil.setBorderLeft(BorderStyle.MEDIUM_DASHED, cra, sheet1);

row = sheet1.getRow(1);

//设置合并单元格内的文本样式

//但这个单元格的边框样式会覆盖上面设置的合并单元格的样式

CellUtil.getCell(row, 0).setCellStyle(cellStyle);

//设置单个单元格的样式

row = sheet1.createRow(2);

cell = row.createCell(0);

cell.setCellStyle(cellStyle);

//设置数据校验

//序列校验

String[] strArray = {

"星期一",

"星期二",

"星期三"

};

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet1);

XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(strArray);

CellRangeAddressList addressList = new CellRangeAddressList(3, 3, 0, 2);

XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);

//显示报错提示框

validation.setShowErrorBox(true);

validation.createErrorBox("错误提示", "只能选择指定的内容!");

//设置单元格右侧显示剪头符号,显示可用的选项,默认为true

validation.setSuppressDropDownArrow(true);

//显示提示信息

validation.setShowPromptBox(true);

validation.createPromptBox("提示信息", "请选择星期填入!");

sheet1.addValidationData(validation);

//保护工作薄不可被修改

xssfWorkbook.lockStructure();

//这个不知道有啥用

xssfWorkbook.lockRevision();

//锁定excel的窗口大小,不能无限制的横向,纵向拉伸。

xssfWorkbook.lockWindows();

xssfWorkbook.createSheet("第二个人sheet");

OutputStream outputStream = null;

try {

outputStream = new FileOutputStream("/创建excel.xlsx");

xssfWorkbook.write(outputStream);

outputStream.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

1.3.2. 生成excel文件内容

549341ca3818c77ce16110b793cb34f8.png

655b95181d8bb1c6cca930fb0cf1ba1a.png

1.4. 参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值