Я использую JexcelAPI в java для управления файлами excel. Мне нужно сделать 2 экземпляра объекта Workbook, один для WritableWorkbook для дальнейших манипуляций, а один просто скопировать из оригинальной книги и затем сохранить его, так что, если что-то случится с исходным объектом и его копией, доступной для записи, у меня будет резервное копирование. Это работает долгое время, пока я не начал получать исключение ArrayIndexOutOfBOunds. Трассировка стека выглядит следующим образом:Метод Workbook.createWorkbook метод в JexcelAPI throwing indexoutofbounds exception
Исключение в потоке "основного" java.lang.IndexOutOfBoundsException: Индекс: 62, Размер: 54 в java.util.ArrayList.rangeCheck (ArrayList.java:604) на Java. util.ArrayList.get (ArrayList.java:382) at jxl.biff.FormattingRecords.getXFRecord (FormattingRecords.java:338) at jxl.read.biff.CellValue.getCellFormat (CellValue.java:144) at jxl. напишите.biff.CellValue. (CellValue.java:129) на jxl.write.biff.LabelRecord. (LabelRecord.java:116) на jxl.write.Label. (Label.java:79) на jxl.write .biff.SheetCopier.shallowCopyCell (SheetCopier.java:808) at jxl.write.biff.SheetCopi er.shallowCopyCells (SheetCopier.java:934) на jxl.write.biff.SheetCopier.copySheet (SheetCopier.java:219) на jxl.write.biff.WritableSheetImpl.copy (WritableSheetImpl.java:1584) на JXL. write.biff.WritableWorkbookImpl.copyWorkbook (WritableWorkbookImpl.java:971) на jxl.write.biff.WritableWorkbookImpl. (WritableWorkbookImpl.java:343) в jxl.Workbook.createWorkbook (Workbook.java:339) в jxl.Workbook .createWorkbook (Workbook.java:320) в musicpred.musicpreddebugtest.main (musicpreddebugtest.java:17) Java Результат: 1
Я сводились проблему в следующем фрагменте кода:
package musicpred;
import java.io.File;
import jxl.Workbook;
import jxl.write.WritableWorkbook;
import java.io.*;
import jxl.read.biff.BiffException;
import jxl.write.*;
public class musicpreddebugtest{
public static void main(String[] args) throws IOException, BiffException,
WriteException{
Workbook workbook = Workbook.getWorkbook(new File ("NBSCOMBINED.xls"));
WritableWorkbook backup = Workbook.createWorkbook(new File("BACKUP.xls"),workbook);
backup.write();
backup.close();
WritableWorkbook writableWorkbook = Workbook.createWorkbook(new
File("NBSCOMBINEDW.xls"), workbook);
}
}
Я заметил, что я могу создать как WritableWorkbooks в то же время, и я даже могу написать() второй (под названием «writableWorkbook»), но по какой-то причине, когда я пытаюсь написать() вторую («backup»), он выдает ошибку. Я также должен отметить, что я не вижу никакого особого значения для наружных индексов: у меня нет ничего с размером 54 в моей книге (строках, столбцах или листах), и я не пытаюсь заменить что-либо массивом длина 62.
Есть ли какие-либо идеи, почему это может внезапно начаться? У меня такое чувство, что у меня есть смущающий легкий ответ, но я не могу понять это, поэтому любая помощь будет принята с благодарностью!
Какая версия JXL? Является ли книга не нулевой, когда она передается createWorkbook() для создания резервной копии? Открывает ли NBSCOMBINED.xls в Excel без каких-либо сообщений? –
Darius X, да, мой файл NBSCOMBINED.xls открывается без предупреждений. У меня действительно есть проблемы с поиском точной версии (где я смотрю?) ... но я скачал ее около 5 месяцев назад. И я не обновлял версию до начала проблемы. Я также нашел более старый код, который, как я уверен, работал раньше, и попробовал его на другом компьютере, но он выдает такое же предупреждение. Поэтому я не думаю, что это мой код. Может ли это быть ошибкой в JExcelAPI? Я не вижу, как это внезапно начнет делать это на разных компьютерах с разными копиями JExcel. мысли? – Paul
Ваш код отлично подходит для меня, так что это должно быть что-то о вашей электронной таблице. Я предполагаю, что если вы создадите простую единую таблицу с помощью Excel и назовете ее NBSCOMBINED.xls, тогда ваш код будет работать нормально. если да, возможно, вы можете начать удалять части своей таблицы, и, возможно, в какой-то момент ошибка исчезнет. Это даст вам ключ. –