JXLS чтения Excel с неизвестным количеством строк - PullRequest
4 голосов
/ 26 августа 2011

Как мне настроить jxls API для чтения листа Excel, где я не буду знать количество строк во время компиляции.

что будет условием прерывания цикла.

Не могу jxls выяснитьсколько строк в листе Excel содержат действительные данные и до них считывают.

Какие есть альтернативы?

ссылка [http://jxls.sourceforge.net/reference/reader.html][1]

Ответы [ 2 ]

2 голосов
/ 30 августа 2016

Вы можете указать пустое значение в качестве условия разрыва цикла

<loopbreakcondition>
    <rowcheck offset="0">
        <cellcheck offset="0"></cellcheck>
    </rowcheck>
</loopbreakcondition>

Это будет выполняться до тех пор, пока не будет найдена пустая ячейка в качестве первой ячейки (offset=0 на cellcheck) в следующей строке (offset=0 на rowcheck) после последнего действительного прохода. Вы можете использовать атрибуты offset, чтобы изменить ячейку или строку, которые не могут быть пустыми.

Элемент

A rowcheck может содержать любое количество элементов cellcheck. В моем случае ни одна из ячеек во входном Excel не была обязательной, поэтому я указал пустой элемент cellcheck для каждой ячейки в строке.

Пример (при условии, что в строке 3 ячейки)

 <loopbreakcondition>
    <rowcheck offset="0">
        <cellcheck offset="0"></cellcheck>
        <cellcheck offset="1"></cellcheck>
        <cellcheck offset="2"></cellcheck>
    </rowcheck>
</loopbreakcondition>

Значение:

Прекратить зацикливание, если все ячеек в следующем ряду пусты.

В случае, если некоторые ячейки должны быть незаполненными, вы можете упростить вышеуказанное условие разрыва, включив только необходимые ячейки.

Пример (при условии, что в строке 3 ячейки, а последняя является обязательной)

 <loopbreakcondition>
    <rowcheck offset="0">
        <cellcheck offset="2"></cellcheck>
    </rowcheck>
</loopbreakcondition>

Значение:

Прекратить зацикливание, если третья ячейка в следующей строке пуста.

0 голосов
/ 07 марта 2012

Используйте эту ссылку http://www.mail-archive.com/jxls-user@lists.sourceforge.net/msg00094.html

В основном вы должны определить только начальную позицию курсора..

 <loop startRow="7" endRow="7" items="department.staff" var="employee"  varType="net.sf.jxls.sample.model.Employee">
            <section startRow="7" endRow="7">
                <mapping row="7" col="0">employee.name</mapping>
                <mapping row="7" col="1">employee.age</mapping>
                <mapping row="7" col="3">employee.payment</mapping>
                <mapping row="7" col="4">employee.bonus</mapping>
            </section>
            <loopbreakcondition>
                <rowcheck offset="0">
                    <cellcheck offset="0">Employee Payment Totals:</cellcheck>
                </rowcheck>
            </loopbreakcondition>
        </loop>

Это будет считывать все записи из строки 7 до тех пор, пока не будет достигнуто условие разрыва цикла. Значение endRow немного сбивает с толку, но разрыв цикла определяется условием разрыва цикла, а не значением endRow.

...