JAVA使用poi类读取xlxs文件内容拼接成添加数据SQL

编写工具类

bash 复制代码
package com.zxl;

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 java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class XlsxTool {
    // TODO: 2025/11/24 file是地址 ,isHeader 是否去掉表头
    public static String xlsx(String files, Boolean isHeader) throws IOException {

        // TODO: 2025/11/24 读取Excel文件:使用FileInputStream打开Excel文件,并创建HSSFWorkbook或XSSFWorkbook对象。
        FileInputStream file = new FileInputStream(new File(files));
        Workbook workbook = new XSSFWorkbook(file);
        // TODO: 2025/11/24  遍历工作表和单元格:通过工作簿对象获取工作表,然后遍历行和单元格来读取数据。
        Sheet sheet = workbook.getSheetAt(0);
        int num;
        if (isHeader) {
            num = sheet.getRow(0).getRowNum() + 1;
        } else {
            num = sheet.getRow(0).getRowNum();
        }
        String values = "insert into table values";
        for (int i = num; i <= sheet.getLastRowNum(); i++) {
            Row sheetRow = sheet.getRow(i);
            // TODO: 2025/11/24 每行最后一个单元格
            int lastCellNum = sheetRow.getLastCellNum() - 1;
            // TODO: 2025/11/24 创建SQL变量进行拼接
            String sql = "(";
            for (Cell cell : sheetRow) {
                // TODO: 2025/11/24 每个单元格的下标
                int index = cell.getColumnIndex();
                // TODO: 2025/11/24 对每个单元格的数值类型进行判断取值
                switch (cell.getCellType()) {
                    case STRING:
                        if (index < lastCellNum) {
                            sql += '"' + cell.getStringCellValue() + '"' + ',';
                        } else {
                            sql += '"' + cell.getStringCellValue() + '"';
                        }
                        break;
                    case NUMERIC:
                        if (index < lastCellNum) {
                            sql += '"' + String.valueOf(cell.getNumericCellValue()) + '"' + ',';
                        } else {
                            sql += '"' + String.valueOf(cell.getNumericCellValue()) + '"';
                        }
                        break;
                    case BOOLEAN:
                        if (index < lastCellNum) {
                            sql += '"' + "null" + '"' + ',';
                        } else {
                            sql += '"' + "null" + '"';
                        }
                        break;
                    default:
                        System.out.print(" " + "\t");
                }
            }
            // TODO: 2025/11/24 判断是否是最后一行,如果是拼接分号 
            if (i < sheet.getLastRowNum()) {
                sql += "),";
            } else {
                sql += ");";
            }
            values += sql;
        }
        System.out.println(values);
        // TODO: 2025/11/24 关闭资源:读取完数据后,关闭FileInputStream和工作簿对象以释放资源。
        workbook.close();
        file.close();
        return null;
    }
}

测试运行

bash 复制代码
package com.zxl;

import java.io.IOException;

public class DemoTest {
    public static void main(String[] args) throws IOException {
        String file="D:\\XueLiang\\SparkWorks\\SparkSqlCoreTest\\src\\main\\resources\\zhang.xlsx";
        Boolean isHeader=false;
        String xlsx = XlsxTool.xlsx(file, isHeader);
    }
}
bash 复制代码
insert into table values("姓名","年龄","地址","手机号","学校"),("张三","23.0","阿斯兰大富科技阿是","qreqwerqwe","阿斯顿发"),("历史","gsd","阿斯顿发顺丰","dsafasdfasd","沃尔沃"),("慰问费","234.0","讽德诵功合适的","对方过后","343.0");
相关推荐
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491117 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
淡海水7 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero8 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-9 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
zww89491119 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设10 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳11 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥11 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e11 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen