作成するExcelシートのセルに日本語データを入れてみた。
cell = sheet.getWritableCell(0, 0); Label lbl = new Label(0, 0, "あいうえお"); sheet.addCell(lbl);ダウンロードしたExcelファイルを開いてみると、ちゃんと設定した値がセルに格納されていた。
なんか簡単すぎて拍子抜けした感じ...
cell = sheet.getWritableCell(0, 0); Label lbl = new Label(0, 0, "あいうえお"); sheet.addCell(lbl);ダウンロードしたExcelファイルを開いてみると、ちゃんと設定した値がセルに格納されていた。
ByteArrayOutputStream os = new ByteArrayOutputStream(); WritableWorkbook workbook = Workbook.createWorkbook(os); WritableSheet sheet = workbook.createSheet("SheetA", 0); Label label = new Label(0, 0, "ABC"); sheet.addCell(label); workbook.write(); workbook.close();ダウンロードしたファイルをExcelで開いてみると、ちゃんと[A1]のセルに"ABC"の文字が入っている。(^^)v
Workbook.createWorkbook(new File("output.xls"));とFileオブジェクトを使用している代わりにByteArrayOutputStreamを使用しているところ。
String templatePath = servletContext.getRealPath("/template/sample.xls"); File file = new File(templatePath); Workbook template = Workbook.getWorkbook(file); ByteArrayOutputStream os = new ByteArrayOutputStream(); WritableWorkbook workbook = Workbook.createWorkbook(os, template); WritableSheet sheet = workbook.getSheet(0); WritableCell cell = sheet.getWritableCell(1, 2); if (cell.getType() == CellType.LABEL) { Label l = (Label) cell; l.setString("modified cell"); } workbook.write(); workbook.close();さっそく実行してみると
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at jxl.biff.StringHelper.getBytes(StringHelper.java:127)
at jxl.write.biff.WriteAccessRecord.<init>(WriteAccessRecord.java:59)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)
at jp.technosite.election.controller.pp.DlController.getExcelReport(DlController.java:73)
at jp.technosite.election.controller.pp.DlController.run(DlController.java:41)とArrayIndexOutOfBoundsExceptionが発生してしまった。jxl.write.biff.WriteAccessRecord.<init>(WriteAccessRecord.java:59)の部分...public WriteAccessRecord(String userName) { super(Type.WRITEACCESS); data = new byte[112]; String astring = userName == null ? (new StringBuilder()).append("Java Excel API v").append(Workbook.getVersion()).toString() : userName; StringHelper.getBytes(astring, data, 0); for(int i = astring.length(); i < data.length; i++) data[i] = 32; }"StringHelper.getBytes()"の箇所で落ちている。
jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:726)
を調べてみると、WriteAccessRecord wr = new WriteAccessRecord(settings.getWriteAccess());となっていて settings.getWriteAccess()の値が使われている。String templatePath = servletContext.getRealPath("/template/sample.xls"); File file = new File(templatePath); Workbook template = Workbook.getWorkbook(file); ByteArrayOutputStream os = new ByteArrayOutputStream(); WorkbookSettings settings = new WorkbookSettings(); settings.setWriteAccess(null); WritableWorkbook workbook = Workbook.createWorkbook(os, template, settings); WritableSheet sheet = workbook.getSheet(0); WritableCell cell = sheet.getWritableCell(1, 2); if (cell.getType() == CellType.LABEL) { Label l = (Label) cell; l.setString("modified cell"); } workbook.write(); workbook.close();実行してみると、めでたくsample.xlsがコピーされたExcelファイルがダウンロードできた。\(^o^)/
Mobylet mobylet = MobyletFactory.getInstance();を実行してみたら"NullPointerException"となってしまった。(;_;)
RequestUtils.set(request);としてみたらMobyletオブジェクトが取得できた。