无法为JExcel / jxl获取正确的编码

在使用JExcel时,我遇到了字符编码的问题。 我的应用程序从模板中创build一个excel文档,并在将数据发送给用户之前用数据库中的数据填充(填充当前和以前的会话用户input)。 在最终文档中,非模板字符FROM ,如éèà°不能正确渲染(在生成的文档中,它们在模板中正确显示),而是由 代替,而来自数据库正确编码。

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

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

  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"正如在这个问题中所build议的那样: 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) 

任何人遇到过这个问题,并知道如何解决它?

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

在创buildWritableWorkbook时发现在Android和JXL:ArrayIndexOutOfBoundException

问候