Java 读取多维Excel并导入数据库
我使用ApachePOI和MySQL使用以下Excel将记录插入数据库:Java 读取多维Excel并导入数据库,java,mysql,excel,arraylist,apache-poi,Java,Mysql,Excel,Arraylist,Apache Poi,我使用ApachePOI和MySQL使用以下Excel将记录插入数据库: A列B列C列D列E列 V1 V2 V3 100 200 300 Axx Bxx Cxx 1说明1 3 10 2说明2 3 12 3说明3 3 2 23 4说明4 11 31 5说明5 23 22 1 我希望将这些数据导入到DB的三个单独的表中: 第一个表:列C1、C2、C3的值作为行插入到一个表中,后续列(D、E)仅考虑前三行。我可以毫无问题地完成这项工作,并将列索引作为id字段存储在该表中。 表1:
A列B列C列D列E列
V1 V2 V3
100 200 300
Axx Bxx Cxx
1说明1 3 10
2说明2 3 12
3说明3 3 2 23
4说明4 11 31
5说明5 23 22 1
我希望将这些数据导入到DB的三个单独的表中:
第一个表:列C1、C2、C3的值作为行插入到一个表中,后续列(D、E)仅考虑前三行。我可以毫无问题地完成这项工作,并将列索引作为id字段存储在该表中。
表1:
3 V1 100 Axx
4v2100 Bxx
5 V3 300 Cxx
第二个表:我还可以将A列和B列的行以及rownum的值作为
表2:
4 1说明1
5.2说明2
6.3说明3
...
...
第三个表:这是我遇到的最低点,无法保存单元格(C列,第4行)及其值的映射。预期的结果是有一个带有值的映射表,如下所示:
表3预期:
431
4 4 3
4 5 10
我尝试了Arraylist的Map、LinkedHashMap和Arraylist的选项,但失败了,在同一次读取迭代中,我无法创建Arraylist的Arraylist,这是表3所需的输出
请告知使用HashMap、ArrayList或LinkedHashMap的合适方法
public int handleSheet(Sheet s){
...
...
//top level iterator for whole sheet
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = (Row) rowIterator.next();
int fcell=row.getPhysicalNumberOfCells();
for (int c = 0; c < fcell; c++) {
//invoke second iteration via fn call
if (cell.getColumnIndex() > 1) {
insertFirstDim(sheet, cell.getColumnIndex());
}
if (row.getRowNum > 4){
insertSecondDim(sheet, row.getRowNum());
}
insertData(row.getRowNum,cell.getColumnIndex());
}
}
....
....
return status;
}
private int insertFirstDim(Sheet s , int columnIndex) {
Iterator<Row> rowIterator = sheet.iterator();
columndata = new ArrayList<>();
columndata.add(columnIndex+"");
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if(cell.getColumnIndex() == columnIndex){// To match column index
//do stuff here insert in DB
}
}
}
private int insertSecondDim(Sheet s , int rowNum) {
Iterator<Row> rowIterator = sheet.iterator();
ArrayList<> columndata = new ArrayList<>();
columndata.add(rowNum+"");
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//do stuff here
}
}
}
private int insertData(int rowNum,int columnIndex) {
Iterator<Row> rowIterator = sheet.iterator();
columndata = new ArrayList<>();
columndata.add(columnIndex+"");
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
// using rownum and columnIndex stored earlier pick the select cell for values
if (rowNum == row.getRowNum() && columnIndex == cellgetColumnIndex()){
// pick cell values
}
}
}
}
public int手册(第s页){
...
...
//整个工作表的顶级迭代器
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext()){
行=(行)行迭代器。下一步();
int fcell=row.getPhysicalNumberOfCells();
对于(int c=0;c1){
insertFirstDim(sheet,cell.getColumnIndex());
}
如果(row.getRowNum>4){
insertSecondDim(sheet,row.getRowNum());
}
insertData(row.getRowNum,cell.getColumnIndex());
}
}
....
....
返回状态;
}
私有int insertFirstDim(表s,int列索引){
迭代器rowIterator=sheet.Iterator();
columndata=新的ArrayList();
columndata.add(columnIndex+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
如果(cell.getColumnIndex()==columnIndex){//匹配列索引
//在DB中插入这里的内容
}
}
}
专用int insertSecondDim(图纸s,int rowNum){
迭代器rowIterator=sheet.Iterator();
ArrayList columndata=新的ArrayList();
columndata.add(rowNum+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
//在这里做事
}
}
}
私有int insertData(int rowNum、int columnIndex){
迭代器rowIterator=sheet.Iterator();
columndata=新的ArrayList();
columndata.add(columnIndex+“”);
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
//使用之前存储的rownum和columnIndex,为值选择“选择”单元格
if(rowNum==row.getRowNum()&&columnIndex==cellgetColumnIndex()){
//拾取单元格值
}
}
}
}