Java Can';无法为JExcel/jxl获得正确的编码
我在使用JExcel时遇到了字符编码问题。 我的应用程序从模板创建excel文档,并在将其发送给用户之前使用数据库中的数据(填充当前和以前的会话用户输入)填充该文档。 在最终文档中,模板中的非ASCII字符,如Java Can';无法为JExcel/jxl获得正确的编码,java,excel,jexcelapi,Java,Excel,Jexcelapi,我在使用JExcel时遇到了字符编码问题。 我的应用程序从模板创建excel文档,并在将其发送给用户之前使用数据库中的数据(填充当前和以前的会话用户输入)填充该文档。 在最终文档中,模板中的非ASCII字符,如é、è、è或°没有正确呈现(在生成的文档中,它们正确地出现在模板中),而是被�而数据库中的数据已正确编码 我使用UTF-8进行用户输入(并输出到查看层)和数据库存储 我在生成文件的类中使用以下代码: private void createFile(Arguments...)
é
、è
、è
或°
没有正确呈现(在生成的文档中,它们正确地出现在模板中),而是被�
而数据库中的数据已正确编码
我使用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();
}
常量。模板编码已按此问题中的建议设置为“Cp1252”
:但无效
尝试将其更改为“UTF-8”
也没有产生可见的更改
否则,应用程序在各个级别都可以正常工作。
我想这可能是一个问题,设置正确的编码时,打开和复制模板,并试图改变这一行
Workbook template=Workbook.getWorkbook(新文件(常量.template_路径);
到
Workbook template=Workbook.getWorkbook(新文件(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.lang.ArrayIndexOutOfBoundsException
java.lang.System.arraycopy(本机方法)
jxl.biff.StringHelper.getBytes(StringHelper.java:127)
WriteAccessRecord.java:59
jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)
com.mypackage.MyClass.createFile(MyClass.java:337)
有人遇到过这个问题并知道如何解决吗?我也面临着这个问题。对我来说,解决方法非常简单。我只需将工作簿设置放在模板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);
网址:
问候