使用JAVA流操作将Excel表中数据取出,并直接生成完整SQL语句
程序员文章站
2022-07-12 20:52:20
...
使用POI读取excel,并输出为sql语句
个人文章地址
一、准备工作
1.1.新建一个普通的Maven项目
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>
如图:
1.3.准备需要读取的excel表,并将其放入项目的resources文件夹中,如图(默认工作表名为Sheet1):
Maven项目resources文件夹:
以上为准备工作
二、编写代码(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结尾:
这时我们可以使用String的replace方法进行替换,当然按照实际情况(需要.0)用正则等随机应变。
String rpStr = newCell.replace(".0", "");
结果如下:成功!
当然,进行流操作后不要忘了关闭流
//流操作后关闭流,养成好习惯
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
当然,也可直接在官网查看
上一篇: 数据库建模-概念模型建模(E-R图)