2016-04-27 4 views
0

Я использую Aspose для чтения CSV-файла.Aspose Cells для Java: получить исходную строку CSV

Я не знаю заранее количество ячеек для каждой строки файла, но мне нужно будет знать его для дальнейшей обработки.

К сожалению, я не вижу способа узнать количество ячеек в строке CSV.

Представьте следующую строку в файле CSV. Он содержит 7 клеток, 4 из которых являются пустыми:

1,2,,4,,, 

Использование

row.iterator(); 

Aspose будет возвращать только 3 клетки, так как она игнорирует все пустые ячейки.

В качестве альтернативы, я теперь сделать следующее:

Cell lastCell = row.getLastCell(); 

    int count = 0; 
    do { 
     cell = row.getCellOrNull(count); 
     String cellValue = cell == null ? "" : cell.getStringValueWithoutFormat(); 

     //do something with the cell value... 

     count++; 
    } while (cell == null || ! lastCell.equals(cell)); 

Это работает лучше, так как она возвращает первые 4 клетки. Однако он все еще игнорирует последние 3 ячейки.

Есть ли способ получить информацию о недостающих ячейках? (было бы достаточно для меня, если Aspose может вернуть оригинальную строку в виде строки - я мог бы подсчитать количество запятых и выяснить количество клеток таким образом)

ответ

0

Вы можете использовать Worksheet.getCells() .getMaxDisplayRange() способ получить максимальный диапазон отображения.

Пожалуйста, обратите внимание на этот CSV. Если открыть его в MS-Excel и проверить последнюю ячейку, вы обнаружите, что Q2

Book1.csv

2,,,,1,,,,,,,,,,,,, 
,,3,,,, 

Aspose.Cells возвращает то же самое с помощью следующего кода.

TxtLoadOptions opts = new TxtLoadOptions(LoadFormat.CSV); 

Workbook wb = new Workbook("Book1.csv", opts); 
Worksheet ws = wb.getWorksheets().get(0); 
Range rng = ws.getCells().getMaxDisplayRange(); 

System.out.println(rng); 

Вот консольный вывод кода.

Console Output

Aspose.Cells.Range [ Sheet1!A1:Q2 ] 

Примечание: Я работаю евангелиста Developer в Aspose

+0

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

+0

Я рассмотрел эту проблему, и я подумал, что вместо использования Aspose.Cells вы можете напрямую читать строки csv с использованием Java API, а затем подсчитывать запятые внутри него. Я пробовал некоторые Java-коды, но, к сожалению, эти коды не читают пустые строки csv, но они читают те строки, у которых по крайней мере одна ячейка не пуста. Вы также можете опубликовать свою проблему на форумах Aspose.Cells, затем мы добавим новую функцию в Aspose.Cells для выполнения ваших требований. – shakeel

+0

Спасибо, я разместил это здесь: http://www.aspose.com/community/forums/showthread.aspx?PostID=719442&Subj=aspose-cells-for-java-get-original-csv-row#719442 –

Смежные вопросы