问题描述
我正在尝试使用 POI Apache 从 Excel 工作表中读取数据.我遇到的问题是我想同时读取一行的所有单元格的数据并将其存储在类型类的 ArrayList 中,但输出只是一个单元格.
I am trying to read data from Excel sheets using POI Apache. The problem I am having is that I want to read the data of all cell of a row at the same time and store it in ArrayList of Type Class but the output is only cell by cell.
这里是打开excel表格并逐个单元格读取数据的类.
Here is the class that open the excel sheet and read the data cell by cell.
package testing;
import javax.swing.JFileChooser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
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.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcelDemo
{
ArrayList<Data> list = new ArrayList<>();
String path;
public ReadExcelDemo(String path)
{
this.path = path;
try
{
FileInputStream file = new FileInputStream(new File(path));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
System.out.println("");
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
switch (cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
}
}
System.out.println("");
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
数据类
package testing;
public class Data {
int ID;
String F_Name,L_Name;
public Data(int ID, String F_Name, String L_Name) {
this.ID = ID;
this.F_Name = F_Name;
this.L_Name = L_Name;
}
public int getID() {
return ID;
}
public String getF_Name() {
return F_Name;
}
public String getL_Name() {
return L_Name;
}
我想像这样一次性在Arraylist中添加单元格数据
I want to add the cell data in Arraylist like this at a single time
List.add(new Data(1,"Amit","shukla"));
但是迭代器返回的数据是一个一个的,比如先输出1,然后是amit,然后是shukla,这真的很难加到数组列表
but the data the iterator return is one by one like first it outputs 1 then amit and then shukla which is really difficult to add to arraylist
我尝试在一行中将数据添加到 ArrayList 中,但我做不到.如果你能帮我解决这个问题,那真的很有帮助.
I tried so much to add data to ArrayList at a single line but I couldn't. It would be really helpful if you guy help me solve this problem.
推荐答案
this.path = path;
this.path = path;
try
{
FileInputStream file = new FileInputStreaHashMap<K, V>ile(path));
HashMap<Integer, Data> mp= new HashMap<Integer, Data>();
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
System.out.println("");
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
//For each row, iterate through all the columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
//Check the cell type and format accordingly
int i=0;
int j=0;
switch (cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
i=Integer.parseInt(cell.getNumericCellValue());
Data d= new Data();
d.setId(cell.getNumericCellvalue());
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
if( j==0){
Data data= mp.get(i);
data.setName(cell.getStringCellValue());
mp.put(i, data);
j=j+1;
}
else
{
Data data= mp.get(i);
data.setLastName(cell.getStringCellValue());
mp.put(i, data);
j=0;
}
break;
}
}
System.out.println("");
}
List<Data> dataList= new ArrayList<Data>();
for (Data d : mp.values()) {
dataList.add(d);
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
这篇关于使用 POI Apache 从 Excel 读取数据时将数据添加到 ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!