GAEにはホワイトリストがありますの、このリスト以外のクラスがサポートされていません、例えばApache POIはExcel作成によく使われるんですが、GAE環境にはなかなか使えません。(多分Apache POIがJava低レベルAPIを使っているかもしれません)いろいろ調べると、jexcelapiが見つかりました、これを利用して問題なくExcelファイルが作成でき、ダウンロードすることもできるようになりました。このサンプルを作成しましたので、ご覧ください。
public class GaesampleServlet extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
try
{
// Get Excel Data
ByteArrayOutputStream bytes = generateExcelReport();
// Initialize Http Response Headers
resp.setHeader("Content-disposition", "attachment; filename=exportUsers.xls");
resp.setContentType("application/vnd.ms-excel");
// Write data on response output stream
if (bytes != null)
{
resp.getOutputStream().write(bytes.toByteArray());
}
}
catch (WriteException e)
{
resp.setContentType("text/plain");
resp.getWriter().print("An error as occured");
}
}
public ByteArrayOutputStream generateExcelReport() throws IOException, WriteException
{
// Stream containing excel data
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// Create Excel WorkBook and Sheet
WritableWorkbook workBook = Workbook.createWorkbook(outputStream);
WritableSheet sheet = workBook.createSheet("User List", 0);
// Generates Headers Cells
WritableFont headerFont = new WritableFont(WritableFont.TAHOMA, 12, WritableFont.BOLD);
WritableCellFormat headerCellFormat = new WritableCellFormat(headerFont);
headerCellFormat.setBackground(Colour.PALE_BLUE);
sheet.addCell(new Label(1, 1, "LastName", headerCellFormat));
sheet.addCell(new Label(2, 1, "FirstName", headerCellFormat));
// Generates Data Cells
WritableFont dataFont = new WritableFont(WritableFont.TAHOMA, 12);
WritableCellFormat dataCellFormat = new WritableCellFormat(dataFont);
int currentRow = 2;
sheet.addCell(new Label(1, currentRow, "aaaaa", dataCellFormat));
sheet.addCell(new Label(2, currentRow, "bbbbb", dataCellFormat));
// Write & Close Excel WorkBook
workBook.write();
workBook.close();
return outputStream;
}
}
0 件のコメント:
コメントを投稿