栏目:Java Web(<--点此查看更多)Java Web 开发相关技术及框架,JSP|Servlet|Javabean|SSH|EJB|HTML|CSS|JavaScript等
  • 将数据库数据导出到 Excel(基于模板)

  • Fri Jun 14 06:38:48 CST 2013 编程者 我要收藏(...) 评论 ...
  • 基于模板将数据库记录导出到 Excel,适合于有固定格式的导出,固定行数和列数。
  • 基于模板将数据库记录导出到 Excel:

    导入
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.List;
    import java.util.Map;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    日志
    private static Log logger = LogFactory.getLog(ExcelUtil.class);

        /**
         * 执行导出操作
         *
         * @param lists 要绑定到 Excel 中的数据 List+Map
         * @param colomnNames 数据里面有哪些列要绑定到 Excel
         * @param rowOffset 行浮动,跳过多少行开始绑定
         * @param columnOffset 列浮动,跳过多少列开始绑定
         * @param tmpPath Excel 模板文件的绝对路径
         * @param os Excel 要输出到的输出流
         * @throws IOException
         */
        public static void execute(Object[] lists, String[] colomnNames
                ,int rowOffset,int columnOffset, String tmpPath,
                OutputStream os) throws IOException {

            FileInputStream in = null;
            try {
                // 读取模板文件
                in = new FileInputStream(new File(tmpPath));
                logger.info("Template path is:" + tmpPath);

                // 创建Excel的工作书册 Workbook,对应到一个excel文档
                HSSFWorkbook workbook = new HSSFWorkbook(in);
                for (int s = 0;s < lists.length; s++) {
                    List<Map<String,Object>> data = (List<Map<String,Object>>)lists[s];
                    HSSFSheet sheet = workbook.getSheetAt(s);
                    logger.info("Sheet name is:"+sheet.getSheetName());
                    HSSFRow row = null;
                    HSSFCell cell = null;
       
                    for (int i = rowOffset; i < data.size() + rowOffset; i++) {
                        row = sheet.getRow(i);
                        if (row != null){
                            Map<String, Object> rowData = data.get(i - rowOffset);
                            for (int j = columnOffset;j < colomnNames.length + columnOffset;j++) {
                                cell = row.getCell(j);
                                String valueKey = colomnNames[j - columnOffset];
                                double cellValue = 0;
                                if (rowData.get(valueKey) != null && cell != null) {
                                    cellValue = Double.valueOf(rowData.get(valueKey).toString());
                                    cell.setCellValue(cellValue);
                                }
                            }
                        }
                    }
                }
                logger.info("Excel cell has created! exporting ... ");
                workbook.write(os);
            } catch (NumberFormatException e) {
                logger.error(e.getMessage());
                throw e;
            } catch (IOException e) {
                logger.error(e.getMessage());
                throw e;
            } finally {
                if (in != null) {
                    in.close();
                }
                if (os != null) {
                    os.close();
                }
            }
        }

    适合于有固定格式的导出,固定行数和列数。
  • 信息来源:http://www.bianchengzhe.com (举报这篇文章)
  • 好评(...) 中评(...) 差评(...)