JExcelApi вызывает ArrayIndexOutOfBoundsException - PullRequest
0 голосов
/ 19 января 2020

У меня есть одно Android приложение, которое создает исключения, заполненные пользовательским вводом. Если документ с таким именем уже существует, он берет этот документ и копирует старый контент в новый документ и сохраняет его с тем же именем.

Проблема в том, что иногда (не каждый раз, я бы сказал, даже 1 из 25 или более ) он каким-то образом повреждает Excel и не сможет больше его открывать, а также дает исключение ArrayIndexOutOfBounds. Когда я нахожу это устройство в устройстве, оно говорит, что оно повреждено.

Я читал, что форматирование ячеек может вызвать его? Но эта ошибка появляется так случайно, так почему это должно быть из-за форматирования ячеек, не должно ли оно быть повреждено в этом случае каждый раз, когда я создаю Excel?

Итак, может ли это быть проблемой форматирования или это иногда просто приводит к повреждению преуспеть при написании этого? Любые идеи, как этого избежать?

Вот как я проверяю, существует ли Excel:

    String excelLocation;

    File tempFile = new File(FirstData.this.getExternalFilesDir(null).toString() + "/" + (String)objectName.getText().toString() + ".xls");

    Boolean fileExists = tempFile.exists();

    if(fileExists) {
        excelLocation = FirstData.this.getExternalFilesDir(null).toString() + "/" + (String)objectName.getText().toString() + ".xls";
    } else {
        excelLocation = FirstData.this.getExternalFilesDir(null).toString();
    }

    WritableWorkbook myFirstWbook = null;

    Workbook existingWorkBook = null;

Вторая строка здесь вызывает ошибку (существующиеWorkbook = workbook.getWorkbook (новый файл (excelLocation)):

        if(fileExists) {
            existingWorkBook = Workbook.getWorkbook(new File(excelLocation));
            myFirstWbook = Workbook.createWorkbook(new File(excelLocation), existingWorkBook);

            testFilePath = excelLocation;
        } else {
            myFirstWbook = Workbook.createWorkbook(new File(excelLocation, fileName));

            testFilePath = excelLocation + "/" + fileName;
        }

Это мои форматы ячеек:

        WritableCellFormat cellFormat = new WritableCellFormat();
        cellFormat.setBackground(Colour.LIME);

        WritableCellFormat dataCellsFormat = new WritableCellFormat();
        dataCellsFormat.setBackground(Colour.GRAY_25);

Ошибка:

01-19 12:41:45.445 14071-14071/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.admin.windowm, PID: 14071
    java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
        at jxl.read.biff.BOFRecord.<init>(BOFRecord.java:81)
        at jxl.read.biff.WorkbookParser.parse(WorkbookParser.java:548)
        at jxl.Workbook.getWorkbook(Workbook.java:237)
        at jxl.Workbook.getWorkbook(Workbook.java:198)
        at com.example.admin.windowm.FirstData.creatExcel(FirstData.java:706)
        at com.example.admin.windowm.FirstData.access$000(FirstData.java:61)
        at com.example.admin.windowm.FirstData$9.onClick(FirstData.java:426)
        at android.view.View.performClick(View.java:4652)
        at android.view.View$PerformClick.run(View.java:19455)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5653)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
        at dalvik.system.NativeStart.main(Native Method)
...