如何仅使用行和固定数量的列进行 for 循环?

Posted

技术标签:

【中文标题】如何仅使用行和固定数量的列进行 for 循环?【英文标题】:How to do a for loop only with rows and a fixed number of columns? 【发布时间】:2017-09-13 01:25:56 【问题描述】:

我在 android 中有一个从 Excel 读取的应用程序。我想替换while循环并放入for循环。我只有 3 列,所以我认为还有另一种方法可以做到这一点。你能告诉我如何使用仅使用行和 3 列的 for 循环来执行此 while 循环吗?

private void readExcelFile() 

        try


            String inFileName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/"+"ola.xlsx";

            File file = new File(inFileName);
            Workbook workBook = WorkbookFactory.create(file);
            Sheet sheet  = workBook.getSheetAt(0);


            Iterator<Row> rowIter = sheet.rowIterator();
//this is the loop I talked about
            while(rowIter.hasNext())


                Row myRow =rowIter.next();
                Iterator<Cell> cellIter = myRow.cellIterator();


                while(cellIter.hasNext())
                    Cell myCell = cellIter.next();





                    Toast.makeText(getApplicationContext(), "cell Value: " + myCell.toString(), Toast.LENGTH_SHORT).show();
                
            
        catch (Exception e)e.printStackTrace(); 

        return;
    

【问题讨论】:

How to do cell iteration of excel in java的可能重复 这是 ***.com/q/16215750/2296441 的副本,并且在 apache POI 网站上也有回答 poi.apache.org/spreadsheet/quick-guide.html#Iterator 这并没有解决问题,因为我的 Cell 类没有 getCell 方法。我需要使用这种精确的形式。所以我需要一个不同的逻辑,使用那里存在的相同变量 这没有任何意义。你在使用 POI 吗?上面提到的答案就是 POI 中的 Cell 类是如何工作的。 “我的 Cell 课程”是什么意思。您是否编写了自己的 Cell 类而不是使用 Apache POI 提供的类?如果是这样,请将其包含在此处。 【参考方案1】:

嗯,它比安卓更多的是算法,如果你有行和列大小,你可以循环遍历单元格:

int totalCount = rowSize * columnSize;
Iterator<Cell> rowIter = sheet.rowIterator();
Iterator<Cell> cellIter;

for(int i = 0 ; i < totalCount ; i++)
    if(i % rowSize == 0)
        //Move to the Next Row
        myRow = rowIter.next();
        cellIter = myRow.cellIterator();
    

    Cell myCell = cellIter.next();

虽然它可能有一两个错误,但我认为它会像你想要的那样工作。

【讨论】:

【参考方案2】:
String FilePath = "E://airline.xls";
FileInputStream fs = new FileInputStream(FilePath);
Workbook wb = Workbook.getWorkbook(fs);
Sheet sh = wb.getSheet("Sheet2");
for(int row = 0; row < sh.getRows(); row++)
    for(int column = 0; column < sh.getColumns(); column++)
        System.out.print(sh.getCell(column, row).getContents() + "   ");
    

我已经使用 JExcel 库的工作簿类完成了这项工作。请查看 [博客] 上的文档:http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/Workbook.html/"JExcel 文档"。

这里要注意的是 getCell 如何接受行和列参数。如果我们以其他方式传递这些参数,我们将得到 Exception。

【讨论】:

【参考方案3】:
// ... alternate looping logic using for loops
Sheet sheet  = workBook.getSheetAt(0);

for (int row = 0; row < sheet.getColumns(); row++) 
      for (int column = 0; column < sheet.getRows(); column++) 
        Cell cell = sheet.getCell(column, row);
        Toast.makeText(getApplicationContext(), "cellValue: " + cell.toString(), Toast.LENGTH_SHORT).show();
      
 

我查看了 JExcel 库,它具有返回编号的 getRows 和 getColumns 方法。分别为行和列。因此,我能够使用 for 循环而不是使用迭代器进行迭代。

【讨论】:

虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。 请注意,这仅在没有空单元格或行的情况下才有效

以上是关于如何仅使用行和固定数量的列进行 for 循环?的主要内容,如果未能解决你的问题,请参考以下文章

具有固定数量数字的列

Javascript For循环克隆thead的时间

for循环每次展示固定条数的数据的写法。

在 MySQL 中仅检索固定数量的行

如何使用 UHD 从 USRP 流式传输固定数量的样本

仅使用加法,除法和乘法以固定数量的步骤达到数字的算法