【问题标题】:Can't get proper encoding for JExcel/jxl无法为 JExcel/jxl 获得正确的编码
【发布时间】:2013-11-08 21:54:42
【问题描述】:

我在使用 JExcel 时遇到了字符编码问题。 我的应用程序从模板创建一个 excel 文档,并在将其发送给用户之前用数据库中的数据(填充当前和以前的会话用户输入)填充它。 在最终文档中,非 ASCII 字符 FROM THE TEMPLATE,例如 éèà° 未正确呈现(在生成的文档中,它们正确显示在模板中),而是由 替换,而数据库中的那些已正确编码。

我使用 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();
    }

Constants.TEMPLATE_ENCODING 已设置为 "Cp1252",正如这个问题中所建议的那样:Encoding problem in JExcel 但无济于事。

尝试将其更改为 "UTF-8" 也没有产生明显的变化。

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

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

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

但它会在 java.lang.System.arraycopy 中产生一个 ArrayOutOfBoundException 并从这一行 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)

有人遇到过这个问题并知道如何解决吗?

【问题讨论】:

    标签: java excel jexcelapi


    【解决方案1】:

    我也遇到了这个问题。对我来说,解决方案非常简单。我只需要将我的 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);
    

    发现于:Android and JXL : ArrayIndexOutOfBoundException when create WritableWorkbook

    问候

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 2016-09-05
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      相关资源
      最近更新 更多