Получение исключения нулевого указателя при попытке создать xls на французском языке - PullRequest
0 голосов
/ 26 ноября 2018

Я получаю исключение нулевого указателя при создании файла .xls с использованием apache poi в java.

Тот же код работает нормально с "английским языком", но дает мне нулевой указатель при попытке сгенерировать на "французском""Language.

Некоторые столбцы имеют нулевое значение, но я обрабатываю эти нулевые данные и пустую ячейку при создании ячейки

, получая нулевой указатель при попытке записать детали

"classExcel.write (out)";

Ниже приведен метод, который я использую для генерации xls после всех данных, которые я сохранил в DTO.

    public void ExcelGenerate(
    ClassExcelDTO classExcel,
    HttpServletResponse response,
    HttpServletRequest request) throws Exception {
    request.setCharacterEncoding("iso-8859-1");
    if( classExcel != null ){
            response.reset();
            response.setContentType("application/csv");
            response.setHeader("Content-disposition","attachment;filename=\"" + classExcel.getName + ".xls\"");
            try {
                if(null!=response && null!=response.getOutputStream()){
                OutputStream out = response.getOutputStream();

                if(null!=out)
                    try {
                        classExcel.write(out);
                    } catch (Exception e) {

                        e.printStackTrace();
                    }

                out.close();
                }
            } catch (SocketException sEx) {

            } catch (IOException io) {
            } catch (Exception e) {

            }
        } else {

        // Some code
        }
}

Ниже сгенерированное исключение: 14: 43: 09,037 ОШИБКА [stderr] (http-localhost / 127.0.0.1: 8080-4) java.lang.NullPointerException

14: 43: 09,037 ОШИБКА [stderr] (http-localhost / 127.0.0.1: 8080-4) at org.apache.poi.util.StringUtil.putCompressedUnicode (StringUtil.java:193)

14: 43: 09,037 ОШИБКА [stderr] (http-localhost/127.0.0.1:8080-4) at org.apache.poi.hssf.record.BoundSheetRecord.serialize (BoundSheetRecord.java:281)

14: 43: 09,037 ОШИБКА [stderr] (http-localhost / 127.0.0.1: 8080-4) в org.apache.poi.hssf.model.Workbook.serialize(Workbook.java:732)

14: 43: 09,037 ОШИБКА [stderr] (http-localhost / 127.0.0.1: 8080-4) в org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes (HSSFWorkbook.java:786)

14: 43: 09,037 ОШИБКА [stderr] (http-localhost / 127.0.0.1: 8080-4) в org.apache.poi.hssf.usermodel.HSSFWorkbook.write (HSSFWorkbook.java: 732)

Пожалуйста, помогите мне, если у кого-нибудь есть идеи.

1 Ответ

0 голосов
/ 26 ноября 2018

Я могу устранить вышеуказанное исключение нулевого указателя.

Основная причина проблемы.

При создании каждой вкладки на французском языке я передавал keyValue имени вкладки, которое содержит более31 персонаж.но для Apache POI допустимо менее 31 символа (Исключение -------------- java.lang.IllegalArgumentException: имя листа не может быть пустым, содержать более 31 символа или содержать любой из символов * *? []) и из-за этого пустого (нулевого) имени листа возникла исключительная ситуация нулевого указателя при написании рабочей книги.

<i> [BOUNDSHEET]
     .bof             = 0
     .optionflags     = 0
     .sheetname length= 0
     .unicodeflag     = 0
     .sheetname       = null
</i>

, поэтому избегайте имени листа, имеющего менее 31 устава, и имя листа не должно содержать ни одного из /*? [] специальный символ.

...