我是Apache POI的新手,但我想做的是通过Excel文件(.xls)读取并将其放入ArrayList进行存储,以便稍后进行操作。我可以得到整张纸,但我的问题就在于:我得到整张纸(约54183行)。
我想跳过空白的单元格,类型为3.由于某种原因,当我在system.out.print中找到ArrayList时,它会包含所有空白单元格。
有没有办法跳过这些并且不将它们添加到我正在尝试创建的ArrayList中?
我有以下代码:
public ArrayList readExcelFile(String filePath) throws IOException {
ArrayList cellVectorHolder = new ArrayList();
try {
FileInputStream inputFile = new FileInputStream(filePath);
POIFSFileSystem myFileSystem = new POIFSFileSystem(inputFile);
HSSFWorkbook wkbk = new HSSFWorkbook(myFileSystem);
wb = wkbk;
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
HSSFSheet wkSheet = wkbk.getSheetAt(i);
for (Row row : wkSheet) {
ArrayList cellVector = new ArrayList();
for (Cell cell : row) {
if(cell.getCellType() != 3){
cellVector.add(cell);
}
}
cellVectorHolder.add(cellVector);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return cellVectorHolder;
}
不介意ArrayList名称......我一直在使用向量,直到我终于发现它们自1.2以来已经被折旧了。
答案 0 :(得分:4)
在将单元格添加到List之前,您可以检查单元格值。类似的东西:
if (cell.getStringCellValue() != null && cell.getStringCellValue().length() != 0) {
cellVector.add(cell);
}
如果有某些内容,则只添加单元格。
答案 1 :(得分:1)
我认为你应该迭代行和单元格,这样POI甚至不会给你空单元格。
签出HSSFSheet.iterator()
,它遍历工作表中的所有行。
然后Row.cellIterator()
迭代该行中的单元格。
你基本完成了。
如果您打算保留旧的结果变量,则两个内部循环变为:
for (Iterator<Row> rit = wkSheet.iterator();rit.hasNext();) {
ArrayList cellVector = new ArrayList();
for(Iterator<Cell> cit = rit.next().cellIterator(); cit.hasNext(); ) {
cellVector.add(cit.next());
}
cellVectorHolder.add(cellVector);
}
答案 2 :(得分:0)
试试这个
List cellDataList = new ArrayList
HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
HSSFSheet hssfSheet = workBook.getSheetAt(0);
Iterator rowIterator = hssfSheet.rowIterator();
int lineNumber = 0;
while (rowIterator.hasNext())
{
HSSFRow hssfRow = (HSSFRow) rowIterator.next();
lineNumber++;
if(lineNumber==1){continue;}
Iterator iterator = hssfRow.cellIterator();
List cellTempList = new ArrayList();
int current = 0, next = 1;
while (iterator.hasNext())
{
HSSFCell hssfCell = (HSSFCell) iterator.next();
current = hssfCell.getColumnIndex();
if(current<next){
}
else{
int loop = current-next;
for(int k=0;k<loop+1;k++){
cellTempList.add(null);
next = next + 1;
}
}
cellTempList.add(hssfCell);
next = next + 1;
}
cellDataList.add(cellTempList);
}
答案 3 :(得分:0)
Try the following code with excel as
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.XSSFWorkbook;
public class excelDataReader {
public static void main(String[] args) {
List<Info> infoList = extractInfo();
for (Info info : infoList) {
System.out.println(info);
}
}
public static List<Info> extractInfo() {
List<Info> infoList = new ArrayList<Info>();
Workbook wb = null;
try {
wb = new XSSFWorkbook(new FileInputStream(new
File("C:\\Users\\rrr\\Downloads\\contacts.xlsx")));
Sheet sheet = wb.getSheetAt(0);
boolean skipHeader = true;
for (Row row : sheet) {
if (skipHeader) {
skipHeader = false;
continue;
}
List<Cell> cells = new ArrayList<Cell>();
int lastColumn = Math.max(row.getLastCellNum(), 5);// because my
// excel
// sheet has
// max 5
// columns,
// in case
// last
// column is
// empty
// then
// row.getLastCellNum()
// will
// return 4
for (int cn = 0; cn < lastColumn; cn++) {
Cell c = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
cells.add(c);
}
Info info = extractInfoFromCell(cells);
infoList.add(info);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (wb != null) {
try {
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return infoList;
}
private static Info extractInfoFromCell(List<Cell> cells) {
Info info = new Info();
Cell nameCell = cells.get(0);
if (nameCell != null) {
nameCell.setCellType(Cell.CELL_TYPE_STRING);
info.setName(nameCell.getStringCellValue());
}
Cell mobileCell = cells.get(1);
if (mobileCell != null) {
mobileCell.setCellType(Cell.CELL_TYPE_STRING);
info.setMobile(mobileCell.getStringCellValue());
}
Cell phoneCell = cells.get(2);
if (phoneCell != null) {
phoneCell.setCellType(Cell.CELL_TYPE_STRING);
info.setPhone(phoneCell.getStringCellValue());
}
Cell permAddressCell = cells.get(3);
if (permAddressCell != null) {
permAddressCell.setCellType(Cell.CELL_TYPE_STRING);
info.setPermAddress(permAddressCell.getStringCellValue());
}
Cell commAddressCell = cells.get(4);
if (commAddressCell != null) {
commAddressCell.setCellType(Cell.CELL_TYPE_STRING);
info.setCommAddress(commAddressCell.getStringCellValue());
}
return info;
}
} 软件包cmprocesser.cmprocesser;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Comment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class Info {
private String name;
private String mobile;
private String phone;
private String permAddress;
private String commAddress;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPermAddress() {
return permAddress;
}
public void setPermAddress(String permAddress) {
this.permAddress = permAddress;
}
public String getCommAddress() {
return commAddress;
}
public void setCommAddress(String commAddress) {
this.commAddress = commAddress;
}
@Override
public String toString() {
return "Info [Name=" + name + ", Mobile=" + mobile + ", Phone=" + phone + ", Permanent Address=" + permAddress
+ ", Communication Address=" + commAddress + "]";
}
}