У меня есть одно 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)