gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:12:48 25 4
gpt4 key购买 nike

我在使用 JExcel 时遇到字符编码问题。我的应用程序从模板创建一个 Excel 文档,并用数据库中的数据(填充当前和以前的 session 用户输入)填充它,然后将其发送给用户。在最终文档中,非 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.getWorkbook(new File(Constants.TEMPLATE_PATH);

工作簿模板 = 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)

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

最佳答案

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

问候

关于java - 无法获得 JExcel/jxl 的正确编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19663387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com