使用基于POI事件的API将Excel转换为CSV - 跳过标题行(Excel中的第一行)

时间:2013-11-26 19:19:34

标签: apache-poi

我正在尝试使用

将Excel(.xls,.xlsx)文件转换为CSV

对于xlsx到CSV

https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java

对于xls到CSV

http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/hssf/eventusermodel/examples/XLS2CSVmra.java

一切都很好,但我不希望Excel中的标题行写入CSV。 有人可以帮助我如何跳过Excel中的标题行吗?至少我怎样才能获得将回调事件发送给处理程序的行号?我对此有如此苛刻的帮助。

2 个答案:

答案 0 :(得分:2)

经过这么多的挖掘后,我遇到了一个类XSSFSheetXMLHandler,它按以下方式获取行号。所以我用它来知道行号。它是startElement方法的Attributes参数的一部分。

 else if("row".equals(name)) {
                int rowNum = Integer.parseInt(attributes.getValue("r")) - 1; //This gets the row number. Then based on this value i Set a boolean variable part of the class member variable.
                if(rowNum == 0) {
                    headerRow = true;
                }
                startRow(rowNum);
            }

答案 1 :(得分:1)

工作方式是主类正在读取和解析电子表格,并使用“处理程序”类进行任何转换或输出:它是名为MyXSSFSheetHandler的内部类。

查看此类的endElement()方法。您将看到它将单元格值写入“output”,如果它是“row”元素的末尾,也会写入缺失值。

您可以向此内部类添加变量(例如“int myRowCount = 0”)。

然后,在endElement()期间,每次写入“output”时都会包装一个if语句

if (myRowCount > 0)
{
  output.print... etc..
}

最后,在endElement里面,它检查“row”是否已经结束,增加行数。