当前位置: 首页 > 面试题库 >

计算Excel工作表列中的行数(提供Java代码)

陶涵育
2023-03-14
问题内容

关于我以前的问题,如何使用Java计算Excel文档的一列中的行数,我能够计算给定工作表中的总列数。现在,
由于我想计算特定列中的行数,因此尚需
完成一半的工作。可能的解决方案是使用2d数组并存储列索引和总行数或使用map等。我如何实现这一目标?这里提供了Java代码。我的演示文件计数正确(列计数)。请根据需要修改/建议更改。

(编辑):我已经用hasp映射来计算存储列索引作为键,行计数作为值,但是它没有用,可能是应用的逻辑错误。好吧,如果我想通过使用 Hash Map
完成此操作, 如何将行数存储在特定列中(同时进行迭代) 作为

Java代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

import org.apache.poi.ss.formula.functions.Column;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelRead {
    static int colrange=1000;
    public static void main(String[] args) {
        HashMap hm=new HashMap();
        int count=0;
    try {
        FileInputStream file = new FileInputStream(new File("C:/Users/vinayakp/Desktop/Demo2.xlsx"));
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = sheet.iterator();
        while(rowIterator.hasNext()) {
            Row row = rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            while(cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                switch(cell.getCellType()) {
                    case Cell.CELL_TYPE_BOOLEAN:
                        System.out.print(cell.getBooleanCellValue() + "\t\t");
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(cell.getNumericCellValue() + "\t\t");
                        break;
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(cell.getStringCellValue() + "\t\t");
                        break;
                }
            }
            System.out.println("");
        }

        for(Row r:sheet)
        {
            short minColIx=r.getFirstCellNum();
            short maxColIx=r.getLastCellNum();
            for(short colIx=minColIx;colIx<maxColIx;colIx++) {
                Cell c= r.getCell(colIx);
                if(c!=null) {
                    if(c.getCellType()== Cell.CELL_TYPE_STRING||c.getCellType() == Cell.CELL_TYPE_NUMERIC||c.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                        count++; ---// can i use hashcode in here to get the key and value pair? key=column index value=total number of rows in that column
                            } 
                    }
                    else break;
                }
            }

        System.out.println("\nTotal Number of columns are:\t"+count);
        System.out.println(hm);
        file.close();    
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException ae) {
        ae.printStackTrace();
    }
}
}

问题答案:

试试这个:

private void excelReader() {
    String data;
    try {
        InputStream is = new FileInputStream("Read.xlsx");
        Workbook wb = WorkbookFactory.create(is);
        Sheet sheet = wb.getSheetAt(0);
        Iterator rowIter = sheet.rowIterator();
        Row r = (Row)rowIter.next();
        short lastCellNum = r.getLastCellNum();
        int[] dataCount = new int[lastCellNum];
        int col = 0;
        rowIter = sheet.rowIterator();
        while(rowIter.hasNext()) {
            Iterator cellIter = ((Row)rowIter.next()).cellIterator();
            while(cellIter.hasNext()) {
                Cell cell = (Cell)cellIter.next();
                col = cell.getColumnIndex();
                dataCount[col] += 1;
                DataFormatter df = new DataFormatter();
                data = df.formatCellValue(cell);
                System.out.println("Data: " + data);
            }
        }
        is.close();
        for(int x = 0; x < dataCount.length; x++) {
            System.out.println("col " + x + ": " + dataCount[x]);
        }
    }
    catch(Exception e) {
        e.printStackTrace();
        return;
    }
}

经过测试的代码

我使用以下单元格数据创建了一个xlsx文件:

Col0    Col1    Col2    Col3    Col4
1       a       x       a       q
2       b       y       s       w
3       c       z       d       e
4       d               f       r
5       e                       t
                                y

dataCount数组的内容是这样的:

列0:6

1:6

第2列:4

col 3:5

第4列:7

右边的数字计算每列(包括标题行)中包含数据的单元格的数量。

如果要排除标题行,只需删除以下行:

rowIter = sheet.rowIterator();

在while循环之前。

这是你想要的?



 类似资料:
  • 问题内容: 我有一个Java代码,可从excel文档中获取数据。我想计算列数和行总数(在特定列中)。我该如何实现?下面提供了Java代码和所需的o / p (编辑):我应该进行哪些修改以获得所需的O / P,例如,我应该编写一个循环以获取列和行的计数,或者有一种方法可以做到这一点 所需的O / P (编辑):-在这里回答-计算Excel工作表一列中的行数(提供Java代码) 我的Java代码: 我

  • 我正在处理一个Excel工作簿,我希望工作簿为每一行新数据创建一个新工作表。下面的代码确实可以做到这一点,但问题是Excel使用每一行第一列中的文本作为新工作表的名称。我想更改它并使另一列成为新工作表名称的来源。请告知我需要更改哪一行才能完成此操作。谢谢您的帮助!

  • 我有一个静态网站的形式,我托管在netlify。使用netlify to sheets zap,当表单提交到站点上时,数据会按预期在我的工作表中显示为一行。 在插入后添加最后一行。我想做一些应用程序脚本后处理,我使用onchange事件触发它。在进行后期处理之前,我希望填写一些表单未提交的空白单元格,例如日期字段和合计字段。它将price单元格移到左边,并添加1500。 我最初想用一个公式: 把这

  • 问题内容: 新版本的Pandas使用以下界面加载Excel文件: 但是,如果我不知道可用的图纸怎么办? 例如,我正在使用以下工作表的excel文件 数据1,数据2 …,数据N,foo,bar 但我不知道先验。 有什么方法可以从Pandas的Excel文档中获取工作表列表吗? 问题答案: 您仍然可以使用ExcelFile类(和属性): 有关更多选项, 请参阅文档以进行解析…

  • 问题内容: 蟒蛇 我有一个清单清单。喜欢 我想计算每个列表在主列表中出现了多少次。 我的输出应该像 问题答案: 只需使用来自:

  • 我在Jasper Report中的excel导出时遇到问题。我的报告的输出excel文件有不需要的合并单元格,具体取决于我为每个报告使用的报告模板。我在第一个excel表中显示报告模板,在第二个excel表中显示“列标题”和“数据”。我试图做的是忽略第二个表中的合并单元格。我使用 属性创建第二张图纸。 我不允许更改模板,所以我应该找到一种方法来忽略第二张表中的合并单元格,这是我的excel文件的屏