java 中使用excl与设置单元格格式
程序员文章站
2024-03-20 22:10:40
...
1.pom依赖文件
<poi.version>3.14</poi.version>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
2读取resource目录下的excl文件
String fileName = "templates/test.xlsx";
//InputStream resourceAsStream = this.getClass().getResourceAsStream(fileName);
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
if (null == resourceAsStream) {
logger.error("文件获取为空,【{}】", fileName);
}
XSSFWorkbook wb = new XSSFWorkbook(resourceAsStream);
XSSFSheet sheet = wb.getSheetAt(0);
//可以debug row中的内容,可以查看到excl中的文件内容
XSSFRow row = sheet.getRow(1);
//TODO 行中的内容,或者列中的内容修改
3.获取列中的数据,根据类型获取列的数据,如果直接获取的话会出现数字获取异常等情况
数字类型不能赋值到string类型上面的问题
XSSFRow row = sheet.getRow(行号);
if (row == null) {
continue;
}
short lastCellNum = row.getLastCellNum();
if (lastCellNum < 0) {
continue;
}
for (int i = 0; i < lastCellNum; i++) {
XSSFCell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
int cellType = cell.getCellType();
String stringCellValue = null;
if (Cell.CELL_TYPE_NUMERIC == cellType) {
double numericCellValue = cell.getNumericCellValue();
stringCellValue = String.valueOf(numericCellValue);
} else {
stringCellValue = cell.getStringCellValue();
}
}
4.eg:
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
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.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.helpers.SubstituteLogger;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.FileOutputStream;
import java.io.InputStream;
private final static Logger logger = LoggerFactory.getLogger(ExclTest.class);
@Test
public void test1() throws Exception {
String fileName = "templates/纸片-批量.xlsx";
//InputStream resourceAsStream = this.getClass().getResourceAsStream(fileName);
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
if (null == resourceAsStream) {
logger.error("文件获取为空,【{}】", fileName);
}
XSSFWorkbook wb = new XSSFWorkbook(resourceAsStream);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row = sheet.getRow(1);
short lastCellNum = row.getLastCellNum();
for (int i = 0; i < lastCellNum; i++) {
//根据类型获取excl表格中的数据
XSSFCell cell = row.getCell(i, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
int cellType = cell.getCellType();
if(cellType == Cell.CELL_TYPE_NUMERIC){
double numericCellValue = cell.getNumericCellValue();
}
}
//在excl文件后面添加一列
row.createCell(lastCellNum).setCellValue("错误原因");
for (int i = 3; i <= 5; i++) {
row = sheet.getRow(i - 1);
row.createCell(lastCellNum).setCellValue("错误原因" + i);
}
//输出Excel文件
FileOutputStream output = new FileOutputStream("d:\\workbook-zhi.xls");
wb.write(output);
output.flush();
output.close();
wb.close();
logger.info("write ok ");
}
设置单元格格式:
参考文章:https://www.cnblogs.com/yanjie-java/p/8329276.html
package com.myjava.poi;
import java.io.FileOutputStream;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class ExcelStyle {
public static void main(String[] args) throws Exception{
Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿
Sheet sheet=wb.createSheet("第一个Sheet页"); // 创建第一个Sheet页
Row row=sheet.createRow(2); // 创建一个行
row.setHeightInPoints(30);
createCell(wb, row, (short)0, HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short)1, HSSFCellStyle.ALIGN_FILL, HSSFCellStyle.VERTICAL_CENTER);
createCell(wb, row, (short)2, HSSFCellStyle.ALIGN_LEFT, HSSFCellStyle.VERTICAL_TOP);
createCell(wb, row, (short)3, HSSFCellStyle.ALIGN_RIGHT, HSSFCellStyle.VERTICAL_TOP);
FileOutputStream fileOut=new FileOutputStream("D:\\工作簿.xls");
wb.write(fileOut);
fileOut.close();
}
/**
* 创建一个单元格并为其设定指定的对齐方式
* @param wb 工作簿
* @param row 行
* @param column 列
* @param halign 水平方向对其方式
* @param valign 垂直方向对其方式
*/
private static void createCell(Workbook wb,Row row,short column,short halign,short valign){
Cell cell=row.createCell(column); // 创建单元格
cell.setCellValue(new HSSFRichTextString("我在这")); // 设置值
CellStyle cellStyle=wb.createCellStyle(); // 创建单元格样式
cellStyle.setAlignment(halign); // 设置单元格水平方向对其方式
cellStyle.setVerticalAlignment(valign); // 设置单元格垂直方向对其方式
cell.setCellStyle(cellStyle); // 设置单元格样式 } }
定义边框格式:
package com.myjava.poi;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class Border {
public static void main(String[] args) throws Exception{
Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿
Sheet sheet=wb.createSheet("第一个Sheet页"); // 创建第一个Sheet页
Row row=sheet.createRow(1); // 创建一个行
Cell cell=row.createCell(1); // 创建一个单元格
cell.setCellValue(4);
CellStyle cellStyle=wb.createCellStyle();
cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 底部边框
cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex()); // 底部边框颜色
cellStyle.setBorderLeft(CellStyle.BORDER_THIN); // 左边边框
cellStyle.setLeftBorderColor(IndexedColors.RED.getIndex()); // 左边边框颜色
cellStyle.setBorderRight(CellStyle.BORDER_THIN); // 右边边框
cellStyle.setRightBorderColor(IndexedColors.BLUE.getIndex()); // 右边边框颜色
cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED); // 上边边框
cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex()); // 上边边框颜色
cell.setCellStyle(cellStyle);
FileOutputStream fileOut=new FileOutputStream("D:\\Border.xls");
wb.write(fileOut);
fileOut.close();
}
}
设置颜色
package com.myjava.poi;
2
3 import java.io.FileOutputStream;
4 import java.util.Calendar;
5 import java.util.Date;
6
7 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
8 import org.apache.poi.ss.usermodel.Cell;
9 import org.apache.poi.ss.usermodel.CellStyle;
10 import org.apache.poi.ss.usermodel.CreationHelper;
11 import org.apache.poi.ss.usermodel.IndexedColors;
12 import org.apache.poi.ss.usermodel.Row;
13 import org.apache.poi.ss.usermodel.Sheet;
14 import org.apache.poi.ss.usermodel.Workbook;
15
16 public class Bg {
17
18 public static void main(String[] args) throws Exception{
19 Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿
20 Sheet sheet=wb.createSheet("第一个Sheet页"); // 创建第一个Sheet页
21 Row row=sheet.createRow(1); // 创建一个行
22
23 Cell cell=row.createCell(1);
24 cell.setCellValue("看不清我");
25 CellStyle cellStyle=wb.createCellStyle();
26 cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex()); // 背景色
27 cellStyle.setFillPattern(CellStyle.BIG_SPOTS);
28 cell.setCellStyle(cellStyle);
29
30
31 Cell cell2=row.createCell(2);
32 cell2.setCellValue("我的前景色与众不同");
33 CellStyle cellStyle2=wb.createCellStyle();
34 cellStyle2.setFillForegroundColor(IndexedColors.RED.getIndex()); // 前景色
35 cellStyle2.setFillPattern(CellStyle.SOLID_FOREGROUND);
36 cell2.setCellStyle(cellStyle2);
37
38 FileOutputStream fileOut=new FileOutputStream("D:\\bg.xls");
39 wb.write(fileOut);
40 fileOut.close();
41 }
42 }
单元格合并
package com.myjava.poi;
2
3 import java.io.FileOutputStream;
4 import java.util.Calendar;
5 import java.util.Date;
6
7 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
8 import org.apache.poi.ss.usermodel.Cell;
9 import org.apache.poi.ss.usermodel.CellStyle;
10 import org.apache.poi.ss.usermodel.CreationHelper;
11 import org.apache.poi.ss.usermodel.IndexedColors;
12 import org.apache.poi.ss.usermodel.Row;
13 import org.apache.poi.ss.usermodel.Sheet;
14 import org.apache.poi.ss.usermodel.Workbook;
15 import org.apache.poi.ss.util.CellRangeAddress;
16
17 public class GetTogether {
18
19 public static void main(String[] args) throws Exception{
20 Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿
21 Sheet sheet=wb.createSheet("第一个Sheet页"); // 创建第一个Sheet页
22 Row row=sheet.createRow(1); // 创建一个行
23
24 Cell cell=row.createCell(1);
25 cell.setCellValue("我们被合并单元格啦!");
26
27 sheet.addMergedRegion(new CellRangeAddress(
28 1, // 起始行
29 2, // 结束行
30 1, // 其实列
31 2 // 结束列
32 ));
33
34
35 FileOutputStream fileOut=new FileOutputStream("D:\\Together.xls");
36 wb.write(fileOut);
37 fileOut.close();
38 }
39 }
下一篇: js使用blob导出excel,兼容IE
推荐阅读