Пытаюсь парсить две таблицы одна в файле .xls вторая в .xlsx при помощи Apache POI.
С таблицей в .xls
никаких проблем нет. А вот при работе со второй таблицей получаю:
ConcurrentModificationException
Вот пример кода обоих методов:
public static void Xls(String name) {
InputStream in = null;
HSSFWorkbook wb = null;
try {
in = new FileInputStream(name);
wb = new HSSFWorkbook(in);
} catch (IOException e) {
e.printStackTrace();
}
//Таблица для чтения
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> it = sheet.iterator();
Processing proc = new Processing();
//Сдвигаем строки вверх
sheet.shiftRows(11, sheet.getLastRowNum(), -11);
int rowID = 0;
while (it.hasNext()) {
int cellID = 0;
Row row = it.next();
//Таблица для записи
Row newRow = sheet1.createRow(rowID);
sheet1.setColumnWidth(0, 15000); //ширина столбца
Iterator<Cell> cells = row.iterator();
while (cells.hasNext()) {
Cell cell = cells.next();
Cell newCell = newRow.createCell(cellID);
//Выбираем какие имено столбцы парсить
if (cell.getColumnIndex() >= 2 && cell.getColumnIndex() <= 4) {
switch (cell.getCellTypeEnum()) {
case STRING:
newCell.setCellValue(cell.getStringCellValue());
cellID++;
break;
case NUMERIC:
double tmp = cell.getNumericCellValue();
newCell.setCellValue(tmp);
cellID++;
newCell = newRow.createCell(cellID);
newCell.setCellValue(proc.processing_opt(tmp));
cellID++;
newCell = newRow.createCell(cellID);
newCell.setCellValue(proc.processing_rozn(tmp));
cellID++;
break;
case FORMULA:
break;
default:
break;
}
}
}
rowID++;
}
}
//Метод для создания прайса от AllSpare
public static void Xlsx(String name, double currency) {
InputStream inx = null;
XSSFWorkbook wbx = null;
try {
inx = new FileInputStream(name);
wbx = new XSSFWorkbook(inx);
} catch (IOException e) {
e.printStackTrace();
}
//Таблица для чтения
Sheet sheet = wbx.getSheetAt(0);
Iterator<Row> it = sheet.iterator();
Processing proc = new Processing();
//Сдвигаем строки вверх
sheet.shiftRows(11, sheet.getLastRowNum(), -11);
int rowID = 0;
while (it.hasNext()) {
int cellID = 0;
Row row = it.next(); **//Здесь ConcurrentModificationException**
//Таблица для записи
Row newRow = sheet2.createRow(rowID);
sheet2.setColumnWidth(0, 15000); //ширина столбца
Iterator<Cell> cells = row.iterator();
while (cells.hasNext()) {
Cell cell = cells.next();
Cell newCell = newRow.createCell(cellID);
//Выбираем какие имено столбцы парсить
if (cell.getColumnIndex() == 2 | cell.getColumnIndex() == 4) {
switch (cell.getCellTypeEnum()) {
case STRING:
newCell.setCellValue(cell.getStringCellValue());
cellID++;
break;
case NUMERIC:
double tmp = cell.getNumericCellValue() / currency;
newCell.setCellValue(tmp);
cellID++;
newCell = newRow.createCell(cellID);
newCell.setCellValue(proc.processing_opt(tmp));
cellID++;
newCell = newRow.createCell(cellID);
newCell.setCellValue(proc.processing_rozn(tmp));
cellID++;
break;
case FORMULA:
break;
default:
break;
}
}
}
rowID++;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я использую spring + jpa + hibernate и мне нужно чтобы у объекта родителя (пользователь) было много потомков (заметок), следовательно я должен использовать...
В каждом tableRow находится 2 TextViewКак можно сделать промежуток между самым длинным первым TextView и вторым TextView
Хотел сделать Ридер книжек с форматом fb2 на планшет с четвёртым андроидом, и упёрся в проблему: а как прочитать этот формат? Можете подсказать...
только на третий-четвертый раз срабатывает действие, которое работает при нажатии на определенный маркер в Google MapsВ связи с чем такое происходит?...