我在excel工作表中遇到单元格迭代器和空白单元格类型的问题。如何动态处理空白单元格和空白列 < > >代码> java >代码>,如何动态处理Excel表和空白列中的空白单元格。
我在单元格迭代器和空白单元格类型方面面临问题 当我为我在excel工作表中遇到单元格迭代器和空白单元格类型的问题。如何动态处理空白单元格和空白列 < > >代码> java >代码>,如何动态处理Excel表和空白列中的空白单元格。,java,excel,Java,Excel,我在单元格迭代器和空白单元格类型方面面临问题 当我为postgresql db创建动态查询时,在插入查询时,由于excel中的空格,我得到异常。我正在尝试使用poi在空白情况下获取异常 试试看{ DataFormatter DataFormatter=新的DataFormatter(); 工作簿=WorkbookFactory.create(Excel文件); 迭代器sheetIterator=工作簿.sheetIterator(); 列表页=新的ArrayList(); while(shee
postgresql db
创建动态查询时,在插入查询时,由于excel中的空格,我得到异常。我正在尝试使用poi
在空白情况下获取异常
试试看{
DataFormatter DataFormatter=新的DataFormatter();
工作簿=WorkbookFactory.create(Excel文件);
迭代器sheetIterator=工作簿.sheetIterator();
列表页=新的ArrayList();
while(sheetIterator.hasNext()){
List sheetList=new ArrayList();
Sheet Sheet=sheetIterator.next();
logger.info(“--sheet name--”+sheet.getSheetName());
if(sheetNames!=null){
用于(字符串sheetName:sheetNames){
如果(sheet.getSheetName().equals(sheetName)){
迭代器rowIterator=sheet.rowIterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
列表行=新建ArrayList();
//现在让我们遍历当前行的列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
CellType类型=cell.getCellType();
if(type==CellType.BLANK){
整数intsample=0;
cell.setCellValue(intsample);
//添加(dataFormatter.formatCellValue(单元格));
行。添加(单元格);
}
else if(type==CellType.STRING){
添加(cell.getRichStringCellValue().toString());
}else if(type==CellType.NUMERIC){
if(HSSFDateUtil.isCellDateFormatted(单元格)){
添加(cell.getDateCellValue());
}else if(dataFormatter.formatCellValue(cell.contains)(“.”){
试一试{
add(Double.parseDouble(dataFormatter.formatCellValue(cell));
}捕获(例外e){
添加(cell.getRichStringCellValue().toString());
}
}否则{
试一试{
add(Long.parseLong(dataFormatter.formatCellValue(cell));
}捕获(例外e){
添加(dataFormatter.formatCellValue(单元格));
}
}
}else if(type==CellType.BOOLEAN){
添加(cell.getBooleanCellValue());
}否则{
添加(dataFormatter.formatCellValue(单元格));
}
}
添加(行);
}
添加(图纸列表);
}
}
}
}
workbook.close();
报税表;
}捕获(例外e){
e、 printStackTrace();
}
CellIterator在迭代一行中的单元格时跳过空单元格。您可以通过使用for循环而不是迭代器来解决此问题:
Row-Row=roweiterator.next();
...
int lastCellIndex=8;//(9-1个单元格)
对于(int i=0;i我尝试使用celliterator、rowiterator、sheetiterator,但再次跳过单元格。。。
这是我的密码
试一试{
DataFormatter DataFormatter=新的DataFormatter();
工作簿=WorkbookFactory.create(文件);
列表页=新的ArrayList();
对于(int sh=0;shtry {
DataFormatter dataFormatter = new DataFormatter();
Workbook workbook = WorkbookFactory.create(excelFile);
Iterator<Sheet> sheetIterator = workbook.sheetIterator();
List<List<List<Object>>> sheets = new ArrayList<>();
while (sheetIterator.hasNext()) {
List<List<Object>> sheetList = new ArrayList<>();
Sheet sheet = sheetIterator.next();
logger.info(" ---sheet name ---" + sheet.getSheetName());
if (sheetNames != null) {
for (String sheetName : sheetNames) {
if (sheet.getSheetName().equals(sheetName)) {
Iterator<Row> rowIterator = sheet.rowIterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
List<Object> rows = new ArrayList<>();
// Now let's iterate over the columns of the current row
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
CellType type = cell.getCellType();
if (type == CellType.BLANK) {
Integer intsample = 0;
cell.setCellValue(intsample);
// rows.add(dataFormatter.formatCellValue(cell));
rows.add(cell);
}
else if (type == CellType.STRING) {
rows.add(cell.getRichStringCellValue().toString());
} else if (type == CellType.NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
rows.add(cell.getDateCellValue());
} else if (dataFormatter.formatCellValue(cell).contains(".")) {
try {
rows.add(Double.parseDouble(dataFormatter.formatCellValue(cell)));
} catch (Exception e) {
rows.add(cell.getRichStringCellValue().toString());
}
} else {
try {
rows.add(Long.parseLong(dataFormatter.formatCellValue(cell)));
} catch (Exception e) {
rows.add(dataFormatter.formatCellValue(cell));
}
}
} else if (type == CellType.BOOLEAN) {
rows.add(cell.getBooleanCellValue());
} else {
rows.add(dataFormatter.formatCellValue(cell));
}
}
sheetList.add(rows);
}
sheets.add(sheetList);
}
}
}
}
workbook.close();
return sheets;
} catch (Exception e) {
e.printStackTrace();
}
I am trying like with out using celliterator,rowiterator,sheetiterator.but again skipping cell is happen ...
here is my code
try {
DataFormatter dataFormatter = new DataFormatter();
Workbook workbook = WorkbookFactory.create(file);
List<List<List<Object>>> sheets = new ArrayList<List<List<Object>>>();
for (int sh = 0; sh < workbook.getNumberOfSheets(); sh++) {
Sheet sheet = workbook.getSheetAt(sh);
List<List<Object>> sheetList = new ArrayList<List<Object>>();
for (int i = 0; i < sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
List<Object> rows = new ArrayList<Object>();
for (int j = 0; j < row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
CellType type = cell.getCellType();
// System.out.println(type+ " -----type -------");
if (type == CellType.STRING) {
rows.add(cell.getRichStringCellValue().toString());
} else if (type == CellType.NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
rows.add(cell.getDateCellValue());
} else if (dataFormatter.formatCellValue(cell).contains(".")) {
try {
rows.add(Double.parseDouble(dataFormatter.formatCellValue(cell)));
} catch (Exception e) {
rows.add(cell.getRichStringCellValue().toString());
}
} else {
try {
rows.add(Long.parseLong(dataFormatter.formatCellValue(cell)));
} catch (Exception e) {
rows.add(dataFormatter.formatCellValue(cell));
}
}
} else if (type == CellType.BOOLEAN) {
rows.add(cell.getBooleanCellValue());
} else if (type == CellType.BLANK) {
cell.setCellValue("NA");
//System.out.println(cell);
//Cell cell = row.getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
Integer intsample = 0;
//cell.setCellValue(intsample);
// rows.add(dataFormatter.formatCellValue(cell));
rows.add(cell);
} else {
rows.add(dataFormatter.formatCellValue(cell));
}
}
sheetList.add(rows);
System.out.println(rows);
}
sheets.add(sheetList);
// System.out.println(sheets+"\n");
}
workbook.close();
return sheets;
} catch (Exception e) {
e.printStackTrace();
}