首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用JAVA、APACHE在excel中获取数据(不包括空白或空单元格)中的行数

如何使用JAVA、APACHE在excel中获取数据(不包括空白或空单元格)中的行数
EN

Stack Overflow用户
提问于 2019-11-08 06:27:34
回答 2查看 1.4K关注 0票数 1

尝试读取excel,其中需要在一列中提取行数,其中包含除空白或空单元格外的数据或值。并将单元格值存储在字符串数组中,我尝试使用sheet.getLastRowNum(),但没有对我起作用。有人能建议出路吗。

以下是我迄今所做的尝试

代码语言:javascript
运行
复制
private void readExcel() 
{
    InputStream ExcelFileToRead = new FileInputStream("C:/Users/Public/template.xlsx");
    XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead);
    XSSFWorkbook test = new XSSFWorkbook();
    XSSFSheet sheet = wb.getSheetAt(0);
    XSSFRow row=null;
    XSSFCell cell;   
    String[] strArray=null;
    int i=10;

    for(i=10;i<this.sheet.getLastRowNum();i++)
    {
        if( (getCell("G"+i)!=null) ) 
        {                
            strArray[index]= strArray[index] + getCell("G"+i).toString() ;
        }           
    }
      System.out.println(strArray);
}

private XSSFCell getCell(String cellName)
{
    Pattern r = Pattern.compile("^([A-Z]+)([0-9]+)$");
    Matcher m = r.matcher(cellName);
    if(m.matches()) 
    {
        String columnName = m.group(1);
        int rowNumber = Integer.parseInt(m.group(2));
        if(rowNumber > 0) 
        {
            return wb.getSheetAt(0).getRow(rowNumber-1).getCell(CellReference.convertColStringToIndex(columnName));
        }
    }
    return null;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-08 07:50:18

我假设您知道您有多少列,因为问题只是关于列中非空单元格的数量。

下面是一种能够提供正确结果的方法:

代码语言:javascript
运行
复制
 public static int getNumberOfNonEmptyCells(XSSFSheet sheet,int columnIndex) {
        int numberOfNonEmptyCells = 0;
        for (int i = 0; i <= sheet.getLastRowNum();i++) {
            XSSFRow row = sheet.getRow(i);
            if (row != null) {
                XSSFCell cell = row.getCell(columnIndex);
                if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                    numberOfNonEmptyCells++;
                }
            }
        }
        return numberOfNonEmptyCells;
    }
票数 1
EN

Stack Overflow用户

发布于 2019-11-08 08:26:19

比公认的答案更好的版本:

代码语言:javascript
运行
复制
public static int getNumberOfNonEmptyCells(XSSFSheet sheet, int columnIndex) {
    int numberOfNonEmptyCells = 0;
    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
        XSSFRow row = sheet.getRow(i);
        if (row != null) {
            XSSFCell cell = row.getCell(columnIndex);
            if (cell != null && cell.getCellType() != CellType.BLANK && !cell.getRawValue().trim().isEmpty()) {
                numberOfNonEmptyCells++;
            }
        }
    }
    return numberOfNonEmptyCells;
}

这种方法有两个优点:

  1. 它不使用不推荐的方法,比如apache-poi 4.0.0
  2. ,它不计算空单元格,目前接受的答案是这样做的。

由于我无法上载工作簿,下面是工作表的xml部分,它破坏了接受的方法:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
   <dimension ref="A1:A5" />
   <sheetViews>
      <sheetView tabSelected="1" workbookViewId="0">
         <selection activeCell="A3" sqref="A3" />
      </sheetView>
   </sheetViews>
   <sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25" />
   <sheetData>
      <row r="1" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A1">
            <v>1</v>
         </c>
      </row>
      <row r="2" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A2">
            <v>2</v>
         </c>
      </row>
      <row r="3" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A3">
            <v></v>
         </c>
      </row>

      <row r="4" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A4">
            <v>4</v>
         </c>
      </row>
      <row r="5" spans="1:1" x14ac:dyDescent="0.25">
         <c r="A5">
            <v>5</v>
         </c>
      </row>
   </sheetData>
   <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
</worksheet>

若要使用此方法,请执行以下操作:

  1. 创建一个空的excel文件并保存它。将其重命名为archive)
  2. Open文件(excel基本上是一个zip \xl\worksheets
  3. Replace存档并导航到\xl\worksheets
  4. Replace任何sheetX.xml文件,使用
  5. 将该文件重命名为.xlsx
  6. ,运行接受的版本,并查看输出5
  7. 运行我的版本,并查看输出4H 224H 125打开excel文件,以查看只有4个值存在H 226G 227
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58761501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档