【问题标题】:customizing excel file from java从java自定义excel文件
【发布时间】:2012-06-01 12:08:42
【问题描述】:

我有一个 jsp 页面,其中填充了来自数据库的表。我必须把这张表的数据扔进去 excel 文件。我还必须 自定义 excel 文件,如边框颜色、字体合并单元格 单元格颜色 等以及数据。我该怎么做?是否有任何 java 脚本 工作?或者是否有任何用于此任务的开源工具?

我找到了一个类似 dataTables jquery 包,但它没有自定义 excel 文件 只将数据扔给 excel。 还是我必须使用 java 库??

【问题讨论】:

  • 在 Java 中执行,而不是使用 Javascript。
  • @nischal 你可以用 JavaScript 来做,但只能在 Internet Explorer 中使用。

标签: java jsp


【解决方案1】:

您可以为此使用Apache POI

供参考 -

public class xyzExcelExportView extends AbstractExcelView {

    private static final xyzService xyzService = ApplicationContextProvider.getxyzServiceImpl();

    @SuppressWarnings({ "unchecked" })
    protected void buildExcelDocument(Map model, HSSFWorkbook workbook,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        CurrencyService currencyService = ApplicationContextProvider.getCurrencyService();
        Currency currency = null;
        //set Response
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "Attachment;Filename=\""+"ExcelExport"+"."+"xls" + "\"");
        // Create Sheet.
        HSSFSheet sheet = workbook.createSheet("Software Contract Database");
        // Create Style for sheet.
        HSSFCellStyle headerStyle = workbook.createCellStyle();
        HSSFCellStyle dateStyle = workbook.createCellStyle();       
        HSSFCellStyle datePatternStyle = workbook.createCellStyle();
        HSSFDataFormat format1 = workbook.createDataFormat();
        HSSFCellStyle dataStyle = workbook.createCellStyle();
        HSSFCellStyle numberStyle = workbook.createCellStyle();     
        dateStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
        dataStyle.setWrapText(true);
        datePatternStyle.setDataFormat(HSSFDataFormat
                .getBuiltinFormat("d-mmm-yy"));
        numberStyle.setDataFormat(format1.getFormat("#,##0"));
        // Font setting for sheet.
        HSSFFont font = workbook.createFont();
        HSSFPalette palette = workbook.getCustomPalette();
        palette.setColorAtIndex(HSSFColor.LAVENDER.index,
                (byte) 204,  
                (byte) 204,    
                (byte) 255);
        font.setBoldweight((short) 700);
        sheet.setDefaultColumnWidth((short) 30);
        List<Type> dataList = // YOur Data list     
        int currentRow = 0;
        // WRITE ROW FOR HEADER
        HSSFCell header = null;
        for (short i = 0; i < getHeader().size(); i++) {
            header = getCell(sheet, currentRow, i);
            headerStyle.setFillForegroundColor(HSSFColor.LAVENDER.index);
            headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            headerStyle.setFont(font);
            header.setCellStyle(headerStyle);
            setText(header, getxyzHeader().get(i));
        }       

        HSSFRow row = null;
        HSSFCell cellNumber = null;
        HSSFCell cellString = null;
        HSSFCell cellNumberWitnComma = null;
        HSSFCell cellDate = null;

        for(Type xyz : dataList){
                currentRow++;
                short i = 0;
                row = sheet.createRow(currentRow);
                cellNumber = row.createCell(i);
                cellNumber = fillxyzExcelExportCell(xyz.getId() == null ? 0 : xyz.getId(), 1 , cellNumber);
                cellNumber.setCellStyle(dataStyle);

                cellString = row.createCell(++i);
                cellString = fillxyzExcelExportCell(xyz.getStatus() == null ? "" : xyz.getStatus() , 3 , cellString);   
                cellString.setCellStyle(dataStyle); 

                cellString = row.createCell(++i);
                cellString = fillxyzExcelExportCell(xyz.getxyzStatus() , 3 , cellString);   
                cellString.setCellStyle(dataStyle);

                cellString = row.createCell(++i);
                cellString = fillxyzExcelExportCell(xyz.getName() == null ? "" : xyz.getName(), 3 , cellString);
                cellString.setCellStyle(dataStyle);     
            }
        }   
        workbook.write(response.getOutputStream());
    }

【讨论】:

    【解决方案2】:

    Apache POI 非常适合这项任务——它是一个 Java 库,并且有很好的 excel 支持。它是免费和开源的。

    【讨论】:

      【解决方案3】:

      JExcelApi 是一个开源库,允许您读取、编写和自定义 Excel 表格。它可能会满足您的要求。

      【讨论】:

        【解决方案4】:

        以下答案可能会有所帮助:

        您还可以通过更改 JSP 中的 Content-TypeContent-Disposition 将 HTML 文件导出到 Excel。从 Excel 2003 开始​​,您可以打开 HTML 文件。我最喜欢的方式是用于 XLS 或 XLSX 的 Apache POI。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-29
          • 1970-01-01
          • 2021-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多