当前位置: 首页 > 知识库问答 >
问题:

apache poi cellIterator跳过空白单元格,但不在第一行

邵兴文
2023-03-14
public ArrayList OpenAndReadExcel(){
    FileInputStream file = null;
    HSSFWorkbook workBook = null;
    ArrayList <String> rows = new ArrayList();

    //open the file

    try {
         file = new FileInputStream(new File("Fruity.xls"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        System.out.println("Could not open Input File");
        e.printStackTrace();
    }

    //  open the input stream as a workbook

        try {
             workBook = new HSSFWorkbook(file);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Can't Open HSSF workbook");
            e.printStackTrace();
        }

        // get the sheet
        HSSFSheet sheet = workBook.getSheetAt(0);

        // add an iterator for every row and column
        Iterator<Row> rowIter = sheet.rowIterator();

        while (rowIter.hasNext())
        {

            String rowHolder = "";
            HSSFRow row = (HSSFRow) rowIter.next();
            Iterator<Cell> cellIter = row.cellIterator();
            Boolean first =true;
            while ( cellIter.hasNext())
            {
                if (!first)
                    rowHolder = rowHolder + ",";

                HSSFCell cell = (HSSFCell) cellIter.next();

                rowHolder = rowHolder + cell.toString() ;
                first = false;
            }

            rows.add(rowHolder);

        }

    return rows;

}
public void WriteOutput(ArrayList<String> rows) {

    // TODO Auto-generated method stub
    PrintStream outFile ;
    try {


        outFile = new PrintStream("fruity.txt");
        for(String row : rows)
        {   
            outFile.println(row);
        }
        outFile.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Notice the two extra commas before the Grade column... This is because I have two blank columns there.<br/>

其余输出中缺少这些额外的逗号。

我使用的是Apache Poi-3.9-20121203.jar

共有1个答案

耿俊
2023-03-14

您应该阅读Apache POI网站上的迭代行和单元格文档。

CellIterator将只返回文件中定义的单元格,这很大程度上意味着具有值或格式的单元格。excel文件格式是稀疏的,不需要存储既没有值也没有格式的单元格。

对于您的情况,必须将格式应用到第一行,从而使它们显示出来。

 类似资料:
  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ // 写入测试数据 $filePath = $excel->f

  • 这是我的代码和所有工作,除了我无法插入数据到活动工作表的最后一个空白。大胆是我想做的,但失败了... 设置nextrow=Range(单元格(rows.count,“a”).end(xlUp).row+1)

  • 因此,在excel中,我试图去掉包含信息的单元格之间的空白单元格,使用F5找到空白单元格,然后用Ctrl+-删除它们,并向上移动单元格。但当我尝试这样做时,它告诉我“没有发现细胞”。 所以我的问题是,我怎么还能做到这一点,但这些空白单元格Excel认为不是空白的?我试着通过并只按删除空白单元格,但我有很多数据,并意识到这将花费我太长的时间。我需要找到一种方法来选择这些‘空白’单元格的数据选择。 提

  • 我一直在用POI编写一个代码来将数据输入到Excel表中。首先,我需要遍历一组行,我不确定其中有多少行,可能是10或100行。但我发现末尾有一个空白单元格。在那个空白之后,又有一组行。我不担心第二盘。我需要找到第一盘是否已经结束。 这很让人困惑。现在我有5个用户在我的工作表如下所示。在第5个用户之后有一个空白单元格。我试图打印所有的用户,如果有一个空白停止它。

  • 我目前正在尝试将放置在不同的位置,而不是视图控制器的顶部。说到这里,它试图在顶部添加标题来说明导航栏,但这不是必需的,因为我的控制器顶部没有标题。 如果我把的左上角放在我想要的单元格位置,它不会把单元格放在那里: 现在,如果我只是向上移动表格视图,使单元格位于正确的位置,我会遇到另一个问题-滚动时单元格可以向上移动(这是用我的手指在导航控制器上方): 当我放手的时候,是的-单元格将在搜索栏的正下方

  • 我正在尝试使用Java中的Apache Poi将一些结果写入excel文件。我将结果存储在String变量中,然后在data.put调用中使用这些变量,前两个可以正常工作,但第三个导致空白单元格。当我打印到system.out.println()时,它显示良好? //创建空白工作簿XSSFWorkbook workbook=new XSSFWorkbook(); 子节点名称:#text 子节点文本