0

このコードを使用して、ODF のシートから最大行数を取得しています

public int getRowCount(String sheetName) throws XPathExpressionException, Exception

{

//reset rowCount to zero

        rowCount=0;

//xpath to reach Nodes of cell in first row

        int parameterCount=getColumnCount(sheetName);
        //System.out.println("Debug:ParameterCount="+parameterCount);
        for (int i=1;i<=parameterCount;i++)
        {
            String xpathStr="//table:table[@table:name='"+sheetName+"']/table:table-row/table:table-cell["+i+"][@office:value-type='void']";
            DTMNodeList nodeList = (DTMNodeList) xpath.evaluate(xpathStr, spreadSheet.getContentDom(), XPathConstants.NODESET);
            //System.out.println("Debug:RowsFoundWithData="+nodeList.getLength());
            System.out.println(nodeList.getLength());
            for(int j=0 ; j<nodeList.getLength();j++)
            {
                System.out.println("Debug:RowValue="+nodeList.item(j).getTextContent());
            }
            if(nodeList.getLength()-1>rowCount)
            {
                rowCount=nodeList.getLength()-1;
            }

    }

return rowCount;

    }

しかし、このコードは非整数値カウントのみを返します。シート内の列の行に整数値が含まれている場合、それはスキップされ、この関数によって返される行カウントは無効です

英数字の値の行のみをカウントします

正しい行数を取得する方法はありますか

odfdom-java-0.8.7-jar-with-dependencies を使用した JAR

4

1 に答える 1

1

あなたは自分で答えを見つけたと思いますが、私は同様の問題に苦しんでいました。この優れたツールの適切な例を入手するのは困難です。これは、スプレッドシートで期待されるものです。

OdfSpreadsheetDocument ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable table = SpreadsheetHandling.setNewTable(ods, "names");
System.out.println("Number of rows: " + table.getRowCount());

残念ながら、状況はもう少し複雑です。スプレッドシートでワークシートに行を追加するコードを実行すると、このメソッドは正確な行数を返します。ただし、ドキュメントをロードしてから行数を読み取ると、可能な最大行数、つまり 1048576 が返されます。

ただし、テーブルが持つ行タイプのノードの数を使用することは可能です。

OdfSpreadsheetDocument ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable table = SpreadsheetHandling.setNewTable(ods, "rowCount");
TableTableElement tte = table.getOdfElement();
NodeList nl = tte.getElementsByTagName("table:table-row");
System.out.println("Number of nodeelements: " + nl.getLength());

よろしくお願いいたします。

ルック

于 2012-08-13T22:28:34.830 に答える