解析xlsx,并生成新的表格

复制代码
import com.google.common.collect.Lists;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.*;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@Service
public class TestExcel2 {


    public void getExict() {
        try {
            //excel文件路径
            String excelPath = "D:\\ex\\处理的文档20210705.xlsx";
            String excelPath2 = null;
            Workbook wb = null;
            Workbook wb2 = null;
            File excel = new File(excelPath);

            if (excel.isFile() && excel.exists()) {
                String[] split = excel.getName().split("\\.");  //.是特殊字符,需要转义!!!!!

                if ("xls".equals(split[1])) {
                    FileInputStream fis = new FileInputStream(excel);   //文件流对象
                    wb = new HSSFWorkbook(fis);
                } else if ("xlsx".equals(split[1])) {
                    excelPath2 = "D:\\ex\\" + split[0] + "-2." + split[1];
                    wb = new XSSFWorkbook(excel);

                    wb2 = new XSSFWorkbook();
                } else {
                    System.out.println("文件类型错误!");
                    return;
                }
                //解析  //读取sheet 0
                Sheet sheet = wb.getSheetAt(0);
                String sheetName = sheet.getSheetName();
                //Sheet sheet1 = wb2.createSheet("sheet22222");
                Sheet sheet1 = wb2.createSheet(sheetName);
                //第一行
                int firstRowIndex = sheet.getFirstRowNum();
                int lastRowIndex = sheet.getLastRowNum();
                System.out.println("firstRowIndex: " + firstRowIndex);
                System.out.println("lastRowIndex: " + lastRowIndex);

                for (int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {   //遍历行
                    System.out.println("rIndex: " + rIndex);
                    Row row = sheet.getRow(rIndex);
                    if (row != null) {
                        int firstCellIndex = row.getFirstCellNum();
                        int lastCellIndex = row.getLastCellNum();
                        // 指定行
                        Row row2 = sheet1.createRow(rIndex);
                        //遍历列
                        for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) {
                            Cell cell = row.getCell(cIndex);
                            if (cell != null) {
                                System.out.println(cell.toString());
                            }
                            if (Objects.equals(cell.toString(), "")) {
                                continue;
                            }
                            Cell cell2 = row2.createCell(cIndex);  //指定列
                            if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                                cell2.setCellValue(Math.round(cell.getNumericCellValue()));
                            } else {
                                cell2.setCellValue(cell.toString());
                            }
                        }
                    }
                }
                wb.close();
                OutputStream stream = new FileOutputStream(excelPath2);
                wb2.write(stream);
                wb2.close();
                stream.close();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
复制代码

 

posted @   a菜搬砖  阅读(163)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示