使用Java获取给定excel中特定行的列数
我想要excel中特定行的列数。这怎么可能?我使用了POI API 但我只能将列计数为7使用Java获取给定excel中特定行的列数,java,excel,apache-poi,Java,Excel,Apache Poi,我想要excel中特定行的列数。这怎么可能?我使用了POI API 但我只能将列计数为7 try { fileInputStream = new FileInputStream(file); workbook = new HSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheet("0");
try
{
fileInputStream = new FileInputStream(file);
workbook = new HSSFWorkbook(fileInputStream);
Sheet sheet = workbook.getSheet("0");
int numberOfCells = 0;
Iterator rowIterator = sheet.rowIterator();
/**
* Escape the header row *
*/
if (rowIterator.hasNext())
{
Row headerRow = (Row) rowIterator.next();
//get the number of cells in the header row
numberOfCells = headerRow.getPhysicalNumberOfCells();
}
System.out.println("number of cells "+numberOfCells);
}
我想要特定行号的列数,比如说10。
excel列不同您可以做两件事 使用 或 他们之间有细微的差别
/**计算图纸行中非空单元格的最大数量*/
私有int getColumnsCount(XSSFSheet XSSFSheet){
int结果=0;
迭代器rowIterator=xssfSheet.Iterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
列表单元格=新的ArrayList();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
cells.add(cellIterator.next());
}
对于(int i=cells.size();i>=0;i--){
Cell=cells.get(i-1);
if(cell.toString().trim().isEmpty()){
细胞。移除(i-1);
}否则{
结果=cells.size()>结果?cells.size():结果;
打破
}
}
}
返回结果;
}
有时使用row.getLastCellNum()
会给您一个比文件中实际填充的值更高的值。我使用下面的方法获取包含实际值的最后一列索引
private int getLastFilledCellPosition(Row row) {
int columnIndex = -1;
for (int i = row.getLastCellNum() - 1; i >= 0; i--) {
Cell cell = row.getCell(i);
if (cell == null || CellType.BLANK.equals(cell.getCellType()) || StringUtils.isBlank(cell.getStringCellValue())) {
continue;
} else {
columnIndex = cell.getColumnIndex();
break;
}
}
return columnIndex;
}
根据,已经添加了一个,所以您不应该自己添加一个。由于解释性名称,我也喜欢后者。
int noOfColumns = sh.getRow(0).getLastCellNum();
/** Count max number of nonempty cells in sheet rows */
private int getColumnsCount(XSSFSheet xssfSheet) {
int result = 0;
Iterator<Row> rowIterator = xssfSheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
List<Cell> cells = new ArrayList<>();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cells.add(cellIterator.next());
}
for (int i = cells.size(); i >= 0; i--) {
Cell cell = cells.get(i-1);
if (cell.toString().trim().isEmpty()) {
cells.remove(i-1);
} else {
result = cells.size() > result ? cells.size() : result;
break;
}
}
}
return result;
}
private int getLastFilledCellPosition(Row row) {
int columnIndex = -1;
for (int i = row.getLastCellNum() - 1; i >= 0; i--) {
Cell cell = row.getCell(i);
if (cell == null || CellType.BLANK.equals(cell.getCellType()) || StringUtils.isBlank(cell.getStringCellValue())) {
continue;
} else {
columnIndex = cell.getColumnIndex();
break;
}
}
return columnIndex;
}