开发中经常需要读取excel文件进行数据的导入或者其他处理,本文通过POI直接对excel文件直接进行操作
首先是导入相关的jar包,如下图。最下面的3个jar包是读取excel时依赖的包

读取excel文件
public Workbook getExcel(String path) {
Workbook workbook = null;
File file = new File(path);
if (!file.exists()) {
System.err.println("文件不存在");
} else {
// 获取文件后缀
String fileType = path.substring(path.lastIndexOf("."));
try {
InputStream is = new FileInputStream(file);
// 根据后缀生成workbook实例
if (".xlsx".equals(fileType)) {
workbook = new XSSFWorkbook(is);
} else if (".xls".equals(fileType)) {
workbook = new HSSFWorkbook(is);
} else {
System.err.println("格式有误");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return workbook;
}
解析对应excel的内容
try {
String filePath = "test.xlsx";
Workbook wb = io.getExcel(filePath);
if (wb != null) {
// 读取对应的Sheet
Sheet sheet = wb.getSheetAt(0);
// 获取最后一行的行数
int rowNum = sheet.getLastRowNum();
// 这里要用 <=
for (int index = 1; index <= rowNum; index++) {
Row row = sheet.getRow(index);
int colNum = row.getLastCellNum();//获取最后一列
String rowSql = sql;
String valueSql = "" + id;
for (int indexC = 0; indexC < colNum; indexC++) {
Cell cell = row.getCell(indexC);
if (cell == null) {
} else {
// 这里强制讲Cell设置为字符串,否则数字读取出来会变成科学计数法或浮点数 0会变成0.0
cell.setCellType(CellType.STRING);
rowSql = rowSql + ", " + tableCol[indexC];
String value = cell.toString();
if (indexC == 8) {
value = "0.0".equals(value) ? "0" : "1";
}
valueSql = valueSql + ", " + "'" + cell.toString() + "'";
}
}
rowSql = rowSql + ") values (" + valueSql + ");";
System.out.println(rowSql);
id++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
这里是用来生成入库的SQL的,所以ID手动往上自增
完整代码如下:
package fileIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
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;
public class IOTEST {
/**
* @Title: main
* @Description: TODO(描述这个方法的作用)
* @param: @param args
* @return: void
* @throws
*/
public static void main(String[] args) {
IOTEST io = new IOTEST();
String[] tableCol = {"VERSION", "NAME", "CATALOG1", "CATALOG2", "CATALOG3", "CATALOG4", "SORTED", "CONTENT", "IMG"};
String sql = "insert into MANUAL_SEARCH_T(ID";
int id = 1;
try {
String filePath = "test.xlsx";
Workbook wb = io.getExcel(filePath);
if (wb != null) {
Sheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum();
for (int index = 1; index <= rowNum; index++) {
Row row = sheet.getRow(index);
int colNum = row.getLastCellNum();
String rowSql = sql;
String valueSql = "" + id;
for (int indexC = 0; indexC < colNum; indexC++) {
Cell cell = row.getCell(indexC);
if (cell == null) {
} else {
cell.setCellType(CellType.STRING);
rowSql = rowSql + ", " + tableCol[indexC];
String value = cell.toString();
if (indexC == 8) {
value = "0.0".equals(value) ? "0" : "1";
}
valueSql = valueSql + ", " + "'" + cell.toString() + "'";
}
}
rowSql = rowSql + ") values (" + valueSql + ");";
System.out.println(rowSql);
id++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public Workbook getExcel(String path) {
Workbook workbook = null;
File file = new File(path);
if (!file.exists()) {
System.err.println("文件不存在");
} else {
// 获取文件后缀
String fileType = path.substring(path.lastIndexOf("."));
try {
InputStream is = new FileInputStream(file);
// 根据后缀生成workbook实例
if (".xlsx".equals(fileType)) {
workbook = new XSSFWorkbook(is);
} else if (".xls".equals(fileType)) {
workbook = new HSSFWorkbook(is);
} else {
System.err.println("格式有误");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return workbook;
}
}
处理的EXCEL如下:

最终结果:
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (1, '广东人教版', '语文', '第一卷', '第一章', '我是1.1', '1', '我也不知道我是什么,我是1.1的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (2, '广东人教版', '语文', '第一卷', '第一章', '我是1.2', '2', '我也不知道我是什么,我是1.2的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (3, '广东人教版', '语文', '第一卷', '第一章', '我是1.3', '3', '我也不知道我是什么,我是1.3的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (4, '广东人教版', '语文', '第一卷', '第一章', '我是1.4', '4', '我也不知道我是什么,我是1.4的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (5, '广东人教版', '语文', '第一卷', '第一章', '我是1.5', '5', '我也不知道我是什么,我是1.5的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (6, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.1', '6', '你知道这是什么吗?这是2.1.1,我有图片', '1');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (7, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.2', '7', '你知道这是什么吗?这是2.1.2', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (8, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.3', '8', '你知道这是什么吗?这是2.1.3', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (9, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.4', '9', '你知道这是什么吗?这是2.1.4', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (10, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.5', '10', '你知道这是什么吗?这是2.1.5', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (11, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.6', '11', '你知道这是什么吗?这是2.1.6', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (12, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.1', '12', '第二卷的1.1,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (13, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.2', '13', '第二卷的1.2,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (14, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.3', '14', '第二卷的1.3,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (15, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.4', '15', '第二卷的1.4,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (16, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.5', '16', '第二卷的1.5,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (17, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.6', '17', '第二卷的1.6,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (18, '广东人教版', '语文', '第二卷', '第二章', '18', '这里只有第二章,我是第二卷的第二章1', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (19, '广东人教版', '语文', '第二卷', '第二章', '19', '这里只有第二章,我是第二卷的第二章2', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (20, '广东人教版', '语文', '第二卷', '第二章', '20', '这里只有第二章,我是第二卷的第二章3', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (21, '广东人教版', '语文', '第二卷', '第二章', '21', '这里只有第二章,我是第二卷的第二章4', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (22, '广东人教版', '语文', '第二卷', '第二章', '22', '这里只有第二章,我是第二卷的第二章5', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (23, '广东人教版', '语文', '第二卷', '第二章', '23001000', '这里只有第二章,我是第二卷的第二章6', '0');

2523

被折叠的 条评论
为什么被折叠?



