java 中使用excl与设置单元格格式

18 篇文章 0 订阅

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 }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Diligently_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值