欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句

程序员文章站 2022-07-12 20:52:20
...


个人文章地址

一、准备工作

1.1.新建一个普通的Maven项目
使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
1.2.使用Maven导入POI依赖

POI包提供了大量的方法,可以使Java对Microsoft Office格式文档进行读/写的操作

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
    </dependencies>

如图:
使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
1.3.准备需要读取的excel表,并将其放入项目的resources文件夹中,如图(默认工作表名为Sheet1):

使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
Maven项目resources文件夹:

使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
以上为准备工作

二、编写代码(Transform.java)

2.1.首先需要获得输入流

        //建立输入流获取excle文件对象
        FileInputStream fileInputStream = new  FileInputStream("src/main/resources/student.xlsx");
        //获取excel文件的工作簿对象
        XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
        //获取工作簿中的工作表对象
        sheet = sheets.getSheet("Sheet1");

2.2.打印sql头语句

System.out.println("insert into student (id, name, sex, age) values ");

2.3.遍历整个excel表,并且做字符串拼接,由于字符串不长,可直接使用String,如果数据较多,可使用StringBuilder

        //获取行数
        rows = sheet.getPhysicalNumberOfRows();
        //因为excel中第一行通常为各个列的名字,故舍去,从第二行开始,索引为1
        for (int i = 1; i < rows; i++) {
            newCell = "";
            //得到Excel工作表的行
            row = sheet.getRow(i);
            //的得到列数
            columns = row.getPhysicalNumberOfCells();
            //循环遍历一行中的每一列数据
            for (int j = 0; j < columns; j++) {
                //获取一列的数据
                String cell = row.getCell(j).toString();
                //为了符合sql规范,第一列数据前不需要加”,“,故作判断
                if (j == 0) {
                    newCell = newCell + cell;
                } else {
                    newCell = newCell + "," + cell;
                }
            }
            //一行数据读取结束,为了符合sql规范,最后一行结尾应该用”;“表示,故作判断
            if (i == rows - 1) {
                newCell = "(" + newCell + ");";

                System.out.println(newCell);
            } else {
                newCell = "(" + newCell + "),";

                System.out.println(newCell);
            }
        }

运行后发现结果如下图所示,数字显示为.0结尾:
使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
这时我们可以使用String的replace方法进行替换,当然按照实际情况(需要.0)用正则等随机应变。

String rpStr = newCell.replace(".0", "");

结果如下:成功!
使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句

当然,进行流操作后不要忘了关闭流

        //流操作后关闭流,养成好习惯
        fileInputStream.close();
        sheets.close();

三、完整代码

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

public class Transform {
    public static void main(String[] args) throws IOException {
        //声明XSSFSheet对象
        XSSFSheet sheet = null;
        String newCell = "";//用作生成符合sql规范的字符串
        XSSFRow row = null;//excel表中的行
        int rows = 0;//excel表中的行数
        int columns = 0;//excel表中的列数

        //System.out.println(System.getProperty("user.dir"));查看当前文件夹路径,方便下方输入文件位置
        //建立输入流获取excle文件对象
        FileInputStream fileInputStream = new FileInputStream("src/main/resources/student.xlsx");
        //获取excel文件的工作簿对象
        XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
        //获取工作簿中的工作表对象
        sheet = sheets.getSheet("Sheet1");

        //以下生成sql语句
        //直接写出sql头语句,可根据实际情况修改
        System.out.println("insert into student (id, name, sex, age) values ");
        //获取行数
        rows = sheet.getPhysicalNumberOfRows();
        //因为excel中第一行通常为各个列的名字,故舍去,从第二行开始,索引为1
        for (int i = 1; i < rows; i++) {
            newCell = "";
            //得到Excel工作表的行
            row = sheet.getRow(i);
            //的得到列数
            columns = row.getPhysicalNumberOfCells();
            //循环遍历一行中的每一列数据
            for (int j = 0; j < columns; j++) {
                //获取一列的数据
                String cell = row.getCell(j).toString();
                //为了符合sql规范,第一列数据前不需要加”,“,故作判断
                if (j == 0) {
                    newCell = newCell + cell;
                } else {
                    newCell = newCell + "," + cell;
                }
            }
            //一行数据读取结束,为了符合sql规范,最后一行结尾应该用”;“表示,故作判断
            if (i == rows - 1) {
                newCell = "(" + newCell + ");";
                //除去数字中的”.0“
                String rpStr = newCell.replace(".0", "");
                System.out.println(rpStr);
            } else {
                newCell = "(" + newCell + "),";
                //除去数字中的”.0“
                String rpStr = newCell.replace(".0", "");
                System.out.println(rpStr);
            }
        }
        //流操作后关闭流,养成好习惯
        fileInputStream.close();
        sheets.close();
    }
}

四、POI所有常用方法参考

https://www.iteye.com/blog/lilinhui-1163040
当然,也可直接在官网查看