无法获得JExcel/jxl的正确编码

Fre*_*aro 2 java excel jexcelapi

我在使用JExcel时遇到字符编码问题.我的应用程序从模板创建一个excel文档,并在将数据发送给用户之前用数据库中的数据(用当前和以前的会话用户输入填充)填充它.在最后的文件,非ASCII字符从模板如é,è,à,或°不正确呈现(所生成的文档中,它们适当地显示在模板)和由被代替替换?而来自数据库被正确编码.

我使用UTF-8进行用户输入(并输出到查看层)以及数据库存储.

我在生成文件的类中使用此代码:

    private void createFile(Arguments...)
            throws IOException, BiffException, RowsExceededException, WriteException
    {
            File XLSFile = new File(MyPath);
            WorkbookSettings XLSSettings = new WorkbookSettings()
            XLSSettings.setEncoding(Constants.TEMPLATE_ENCODING)
            // Constants.java is a class containing only app-wide constants declared as public static final
            Workbook template = Workbook.getWorkbook(
                    new File(Constants.TEMPLATE_PATH));
            WritableWorkbook userDocument =
                    Workbook.createWorkBook(XLSFile,template,XLSSettings);
            template.close();
            WritableSheet sheet = userDocument.getSheet(0);

            ...
                    Code that fills my workbook and sheet by creating new Labels and
                    adding them to my WritableSheet with sheet.add(Label)
            ...

            userDocument.write();
            userDocument.close();
    }
Run Code Online (Sandbox Code Playgroud)

Constants.TEMPLATE_ENCODING已被设置为"Cp1252"在这个问题建议:在JExcel编码的问题,而是但是无济于事.

试图改变它也"UTF-8"没有产生明显的变化.

该应用程序在每个级别都可以正常工作.我想在打开和复制模板时尝试更改此行可能是设置正确编码的问题

Workbook template = Workbook.getWorkbook(new File(Constants.TEMPLATE_PATH);

至

Workbook template = Workbook.getWorkbook(new File(Constants.TEMPLATE_PATH, XLSSettings);

但它产生ArrayOutOfBoundException在java.lang.System.arraycopy从该线传播userDocument.write();通过

    java.lang.ArrayIndexOutOfBoundsException
        java.lang.System.arraycopy(Native Method)
        jxl.biff.StringHelper.getBytes(StringHelper.java:127)
        jxl.write.biff.WriteAccessRecord.<init>(WriteAccessRecord.java:59)
        jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)
        com.mypackage.MyClass.createFile(MyClass.java:337)
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题并知道如何修复它?

小智 7

我也面临着这个问题.对我来说,解决方案非常简单.我只需要将我的WorkbookSettings放在TEMPLATE wb而不是新文件中.

//Load template workbook with settings
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");

Workbook templateWorkbook = Workbook.getWorkbook(this.context.getAssets().open("template.xls"), ws);

//Create new workbook from templateWorkbook without settings
this.workbook = Workbook.createWorkbook(new File(this.location), templateWorkbook);
Run Code Online (Sandbox Code Playgroud)

在创建WritableWorkbook时发现:Android和JXL:ArrayIndexOutOfBoundException

问候