首页 > 编程语言 >Java实现读取Excel文件并逐行写入到新的Excel文件中

Java实现读取Excel文件并逐行写入到新的Excel文件中

时间:2023-08-01 16:23:09浏览次数:37  
标签:case 文件 return inputCell Excel cell outputCell 逐行

在日常开发中,经常需要处理Excel文件,其中一种常见的需求是将原始Excel文件的内容逐行写入到新的Excel文件中或者写入数据中。本篇博客将介绍使用Java编程语言以及Apache POI库来实现这一功能。Apache POI是一个开源的Java库,用于处理Microsoft Office格式的文件,包括Excel。

1. 环境准备 Apache POI库的依赖添加

 <!--使用 Apache POI 库来读取 Excel 文件-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

2. 读取Excel文件逐行写入新的Excel文件

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

/**
 * Java实现读取Excel文件并逐行写入到新的Excel文件中
 */
public class ExcelReaderAndWriter {

    public static void main(String[] args) {
        String inputFilePath = "src/main/resources/data/excel/读取测试.xlsx";
        String outputFilePath = "src/main/resources/data/excel/写入测试.xlsx";

        try (FileInputStream inputFileStream = new FileInputStream(inputFilePath);
             Workbook inputWorkbook = new XSSFWorkbook(inputFileStream);
             Workbook outputWorkbook = new XSSFWorkbook()) {

            Sheet inputSheet = inputWorkbook.getSheetAt(0);
            Sheet outputSheet = outputWorkbook.createSheet("Output Sheet");

            // 设置日期格式
            CellStyle dateCellStyle = outputWorkbook.createCellStyle();
            dateCellStyle.setDataFormat(outputWorkbook.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd"));

            // 遍历每一行并写入新的 Excel 文件
            //使用 Iterator<Row> 来遍历输入工作表的每一行,并对每一行进行处理
            Iterator<Row> rowIterator = inputSheet.iterator();
            while (rowIterator.hasNext()) {
                Row inputRow = rowIterator.next();
                // 创建新的一行并获取输入单元格的迭代器
                Row outputRow = outputSheet.createRow(inputRow.getRowNum());

                // 遍历每一列
                Iterator<Cell> cellIterator = inputRow.cellIterator();
                while (cellIterator.hasNext()) {
                    Cell inputCell = cellIterator.next();
                    Cell outputCell = outputRow.createCell(inputCell.getColumnIndex());

                    // 获取单元格的值并写入新的工作表中
                    switch (inputCell.getCellType()) {
                        case STRING:
                            outputCell.setCellValue(inputCell.getStringCellValue());
                            break;
                        case NUMERIC:
                            if (DateUtil.isCellDateFormatted(inputCell)) {
                                // 设置日期单元格的值和格式
                                outputCell.setCellValue(inputCell.getDateCellValue());
                                outputCell.setCellStyle(dateCellStyle);
                            } else {
                                outputCell.setCellValue(inputCell.getNumericCellValue());
                            }
                            break;
                        case BOOLEAN:
                            outputCell.setCellValue(inputCell.getBooleanCellValue());
                            break;
                        case FORMULA:
                            outputCell.setCellFormula(inputCell.getCellFormula());
                            break;
                        case BLANK:
                            outputCell.setCellValue("");
                            break;
                        default:
                            break;
                    }
                }

                // 输出每一行的数据
                System.out.println("Row " + (inputRow.getRowNum() + 1) + ": " + rowToString(inputRow));
            }

            // 保存新的 Excel 文件
            try (FileOutputStream outputFileStream = new FileOutputStream(outputFilePath)) {
                outputWorkbook.write(outputFileStream);
            }

            System.out.println("Data has been written to the new Excel file successfully.");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String rowToString(Row row) {
        StringBuilder stringBuilder = new StringBuilder();
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            // 遍历每个单元格的数据
            //System.out.println(cell);
            if (stringBuilder.length() > 0) {
                stringBuilder.append("\t");
            }
            stringBuilder.append(cellToString(cell));
        }
        return stringBuilder.toString();
    }

    private static String cellToString(Cell cell) {
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            case BLANK:
                return "";
            default:
                return "";
        }
    }
}

3. 测试结果

 

标签:case,文件,return,inputCell,Excel,cell,outputCell,逐行
From: https://www.cnblogs.com/zyt-bg/p/17596837.html

相关文章

  • 文件操作
    1.文件基本操作1.1文件的概述文件是数据的抽象和集合,是数据存储的一种形式。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。文件是操作系统提供给用户操作硬盘的一种虚拟的概念。用来承接指令和数据。文件拥有文本文件和二进制文件两种......
  • Java导入、导出excel
    Excel是由四个元素组成的分别是:WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格),其中包含关系是从左至右,一个WorkBook可以包含多个Sheet,一个Sheet又是由多个Row组成,一个Row是由多个Cell组成。1.1创建Excel的元素1)创建WokrBookWorkbook workbook = new XSSFWorkboo......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台出现报错“缺失dll文件”的问题解决方案
    LntonGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,既能作为业务平台使用,也能作为能力层平台调用。技术人员在用户服务器部署LntonGBS平台,提示缺失某个dll文......
  • python怎么把json文件夹转成Excel表?
    1、python怎么把json文件夹转成Excel表?2、Python代码json数据再别的目录下怎么调用?3、【Python】浅谈python中的json4、python的json怎么用5、如何使用Python处理JSON数据python怎么把json文件夹转成Excel表?可以用pandas来读取json文件,再to_excel保存为Excel文件。可......
  • 登录认证装饰器,flask配置文件,路由系统
    0登录认证装饰器#0装饰器的本质原理 -#类装饰器:1装饰类的装饰器2类作为装饰器#1装饰器使用位置,顺序#3flask路由下加装饰器,一定要加endpoint -如果不指定endpoint,反向解析的名字都是函数名,不加装饰器没有问题,就是正常函数index,detail-如果加了装饰器---》in......
  • 记一次XML文件 批量添加属性
    publicstaticvoidmain(String[]age){try{List<Path>collect=Files.walk(Paths.get("D:\\modelform")).filter(Files::isRegularFile).collect(Collectors.toList());SAXReaderreader=newSAXReader();......
  • pycharm远程调试忽略文件
     pycharm远程调试忽略文件https://zhuanlan.zhihu.com/p/511270615如果要忽略指定文件夹,可以在settings->build,execution,Deployment->deployment->options->Excludeitemsbyname中设置。 ......
  • 关于安装python包执行setup.py文件报错类似提示line 155 warnings.warn(f'Cannot copy
    首先可以确定世python语法问题,一般来说python3.6以后字符串使用f是没有问题的,后来发现问题所在,原来我安装好python以后,没有将python命令软连接到python3,导致python命令其实一直是使用的python2,所以才会有这样的问题。所以,当python3安装好以后,一定要重新指向软连接,还有pip3,也要指向......
  • 如何在Excel中实现表关联取值
    需求: 员工表:编号,姓名工资表:编号,工资现要在Excel中在工资表后加一列把员工表中的姓名取过来。解决: 可以通过Vlookup实现,在新的列中添加函数  =VLOOKUP(@D:D,A2:B5,2,FALSE)参数一:关联列(即工资表的编号字段)(选中编号列即可)参数二:查询区域(选中查询区域,及员工表数据区域,......
  • [转]Linux密码保存文件及各位置参数含义
    原文地址:linux哪个目录存放密码-睿象云平台“/etc”目录用来存放系统主要的配置文件,例如用户的账号密码等文件,有两个存放密码的文件:1、shadow文件,用于存储系统中用户的密码信息;2、gshadow文件,用于存储系统中组用户的密码信息。本教程操作环境:linux5.9.8系统、DellG3电脑。lin......