java导出excel--------自己学习使用

 

package com.sais.inkaNet.reportStatistics.operationBeanavior.service;

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.PrintSetup;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;

import com.sais.inkaNet.base.db.VOpbDateResult;
import com.sais.inkaNet.base.db.VOpbMonthResult;
import com.sais.inkaNet.base.db.VOpbWeekResult;
import com.sais.inkaNet.base.db.VOpbYearResult;

public class SummaryHSSF {  
//这个是创建和书写excel文档的代码。
public void outExcel(String sheetP,String[] titles,List list,int width,String address,String type,HttpServletResponse response) throws IOException {  
 
    //创建Workbook对象(这一个对象代表着对应的一个Excel文件)  
                 //HSSFWorkbook表示以xls为后缀名的文件  
    Workbook wb = new HSSFWorkbook(); 
    Map<String, CellStyle> styles = createStyles(wb);
    //获得CreationHelper对象,这个应该是一个帮助类  
    CreationHelper helper = wb.getCreationHelper();  
    //创建Sheet并给名字(表示Excel的一个Sheet)
      Sheet sheet = wb.createSheet(sheetP);
      PrintSetup printSetup = sheet.getPrintSetup();
      printSetup.setLandscape(true);
      sheet.setFitToPage(true);
      sheet.setHorizontallyCenter(true);
      sheet.setDefaultColumnWidth(width);
      Row titleRow = sheet.createRow(0);
      titleRow.setHeightInPoints(45);
      Cell titleCell = titleRow.createCell(0);
      titleCell.setCellValue(sheetP);
      titleCell.setCellStyle(styles.get("title"));
      sheet.addMergedRegion(CellRangeAddress.valueOf(address));
     

      //header row
      Row headerRow = sheet.createRow(1);
      headerRow.setHeightInPoints(60);
      Cell headerCell;
      for (int i = 0; i < titles.length; i++) {
       headerCell = headerRow.createCell(i);
       headerCell.setCellValue(titles[i]);
          headerCell.setCellStyle(styles.get("header"));
      }
     
      VOpbYearResult vOpbYearResult=new VOpbYearResult();
      VOpbWeekResult vOpbWeekResult=new VOpbWeekResult();
      VOpbDateResult vOpbDateResult=new VOpbDateResult();
      VOpbMonthResult vOpbMonthResult=new VOpbMonthResult();
    
   
     
      //表头的设置以及J列和K列的设置
      int rownum = 2;
      for (int i = 0; i < list.size(); i++) {
          Row row = sheet.createRow(rownum++);
          for (int j = 0; j < titles.length; j++) {
              Cell cell = row.createCell(j);

                  cell.setCellStyle(styles.get("cell"));
                  if("1".equals(type)){
                   vOpbYearResult=(VOpbYearResult) list.get(i);
                 
                   if(j==0){
                    cell.setCellValue(vOpbYearResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbYearResult.getObTotleNumber());
                   }
                  }else if("2".equals(type)){
                   vOpbMonthResult=(VOpbMonthResult) list.get(i);
                     
                   if(j==0){
                    cell.setCellValue(vOpbMonthResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbMonthResult.getObTotleNumber());
                   }
                  }else if("3".equals(type)){
                   vOpbWeekResult=(VOpbWeekResult) list.get(i);
                     
                   if(j==0){
                    cell.setCellValue(vOpbWeekResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbWeekResult.getObTotleNumber());
                   }
                  }else if("4".equals(type)){
                   vOpbDateResult=(VOpbDateResult) list.get(i);
                     
                   if(j==0){
                    cell.setCellValue(vOpbDateResult.getObName());
                   }
                   if(j==1){
                    cell.setCellValue(vOpbDateResult.getObTotleNumber());
                   }
                  }
     
          }


      }
      //输出  
      response.setHeader("Content-disposition",  "attachment;  filename=test.xls");//设定输出文件头
      response.setContentType("application/vnd.ms-excel");//定义输出类型
      OutputStream os = response.getOutputStream();
     
    
      wb.write(os);
      os.close();
    
//      response.flushBuffer();
      //response.reset();
     
//      response.resetBuffer();
    //  response.getWriter().close();
  }  
  /** 
   * 边框 
   * @param wb 
   * @return 
   */ 
  public static CellStyle createStyleCell(Workbook wb){  
      CellStyle cellStyle = wb.createCellStyle();  
      //设置一个单元格边框颜色
      //BORDER_SLANTED_DASH_DOT加粗虚线
      //BORDER_DASH_DOT虚线
      cellStyle.setBorderBottom(CellStyle.BORDER_DASH_DOT_DOT);  
      cellStyle.setBorderTop(CellStyle.BORDER_DASH_DOT_DOT);  
      cellStyle.setBorderLeft(CellStyle.BORDER_DASH_DOT_DOT);  
      cellStyle.setBorderRight(CellStyle.BORDER_DASH_DOT_DOT);  
      //设置一个单元格边框颜色  
      cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());  
      cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());  
      cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());  
      cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());          
      return cellStyle;  
  }  
  /** 
   * 设置文字在单元格里面的位置 
   * CellStyle.ALIGN_CENTER 
   * CellStyle.VERTICAL_CENTER 
     * @param cellStyle 
     * @param halign 
     * @param valign 
     * @return 
     */ 
    public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){  
        //设置上下  
        cellStyle.setAlignment(CellStyle.ALIGN_CENTER);  
        //设置左右  
        cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);  
        return cellStyle;  
    }  
    /** 
     * 格式化单元格 
     * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找 
     * @param cellStyle 
     * @param fmt 
     * @return 
     */ 
    public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){  
        //还可以用其它方法创建format  
        cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));  
        return cellStyle;  
    }  
    /** 
     * 前景和背景填充的着色 
     * @param cellStyle 
     * @param bg IndexedColors.ORANGE.getIndex(); 
     * @param fg IndexedColors.ORANGE.getIndex(); 
     * @param fp CellStyle.SOLID_FOREGROUND 
     * @return 
     */ 
    public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){  
        //cellStyle.setFillBackgroundColor(bg);  
        cellStyle.setFillForegroundColor(fg);  
        cellStyle.setFillPattern(fp);  
        return cellStyle;  
    }  
    /** 
     * 设置字体 
     * @param wb 
     * @return 
     */ 
    public static Font createFonts(Workbook wb){  
        //创建Font对象  
        Font font = wb.createFont();  
        //设置字体  
        font.setFontName("黑体");  
        //着色  
        font.setColor(HSSFColor.BLUE.index);  
        //斜体  
        font.setItalic(true);  
        //字体大小  
        font.setFontHeight((short)300);  
        return font;  
    }
   
    private static Map<String, CellStyle> createStyles(Workbook wb){
        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
        CellStyle style;
        Font titleFont = wb.createFont();
        titleFont.setFontHeightInPoints((short)18);
        titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setFont(titleFont);
        styles.put("title", style);

        Font monthFont = wb.createFont();
        monthFont.setFontHeightInPoints((short)11);
        monthFont.setColor(IndexedColors.WHITE.getIndex());
        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
        style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        style.setFont(monthFont);
        style.setWrapText(true);
        styles.put("header", style);

        style = wb.createCellStyle();
        style.setAlignment(CellStyle.ALIGN_CENTER);
        style.setWrapText(true);
        style.setBorderRight(CellStyle.BORDER_THIN);
        style.setRightBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderLeft(CellStyle.BORDER_THIN);
        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderTop(CellStyle.BORDER_THIN);
        style.setTopBorderColor(IndexedColors.BLACK.getIndex());
        style.setBorderBottom(CellStyle.BORDER_THIN);
        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        styles.put("cell", style);

        return styles;
    }

 

需要的jar包:easypoi-0.1.3.jar           poi-3.7-20101029

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
poi-tl是一个基于POI的模板引擎,可以用于动态生成Excel文档。下面是使用poi-tl动态导出Excel的步骤: 1. 导入poi-tl的依赖包。 2. 创建Excel模板文件,可以使用Microsoft Excel软件创建一个模板文件,然后在模板中使用poi-tl的标签进行动态生成。 3. 在Java代码中,使用poi-tl的API读取模板文件,并进行数据填充。 4. 将填充好数据的Excel文件保存到指定路径。 下面是一个使用poi-tl动态导出Excel的示例代码: ```java import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; public class ExcelExportUtil { public static void main(String[] args) { try { // 读取模板文件 InputStream is = new FileInputStream("template.xlsx"); Workbook workbook = new XSSFWorkbook(is); // 获取模板中的Sheet Sheet sheet = workbook.getSheetAt(0); // 定义数据 List<Map<String, Object>> dataList = getDataList(); // 填充数据 int rowIndex = 1; // 从第二行开始填充数据 for (Map<String, Object> data : dataList) { Row row = sheet.createRow(rowIndex++); int cellIndex = 0; for (String key : data.keySet()) { Cell cell = row.createCell(cellIndex++); cell.setCellValue(data.get(key).toString()); } } // 保存文件 OutputStream os = new FileOutputStream("output.xlsx"); workbook.write(os); os.close(); System.out.println("Excel导出成功!"); } catch (Exception e) { e.printStackTrace(); } } private static List<Map<String, Object>> getDataList() { // 模拟数据 List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> data1 = new HashMap<>(); data1.put("name", "张三"); data1.put("age", 20); data1.put("gender", "男"); dataList.add(data1); Map<String, Object> data2 = new HashMap<>(); data2.put("name", "李四"); data2.put("age", 25); data2.put("gender", "女"); dataList.add(data2); return dataList; } } ``` 请注意,上述代码中的"template.xlsx"是模板文件的路径,"output.xlsx"是导出Excel文件的路径。你需要根据实际情况修改这两个路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值