• Poi使用HSSFWorkbook方式导出Excel工具类


    /**
    *

    • 功能描述:
    • @Package: com.utils.excel.poiexcel
      */
      package com.utils.excel.poiexcel;

    import java.io.IOException;
    import java.util.Date;
    import java.util.List;

    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;

    /**
    *

    • @ClassName: PoiExcelUtil.java
    • @Description: 导出Excel采用HSSFWorkbook实现方式 excel为03以前的版本,只支持.xls格式 提供了单sheet页,多个sheet页方法
    • @deprecated 不建议使用此方法了,建议使用下边的PoiSXSSFWorkbookExcel.java工具类

    */
    public class PoiExcelUtil {

    /**
     * 
     * 导出Excel 简单导出 单个sheet页 数据量不大的可以使用
     * 
     * @param sheetName
     *            sheet名称
     * @param title
     *            标题
     * @param content
     *            内容
     * @return wb
     *            HSSFWorkbook对象
     * 
     */
    
    public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] content) {
    
    	// 第一步 创建一个HSSFWorkbook, 对应一个Excel文件
    	HSSFWorkbook wb = new HSSFWorkbook();
    	// 声明一个工作薄
    	// wb.createInformationProperties();
    	// wb.getDocumentSummaryInformation().setCompany("*****公司");
    	// SummaryInformation si = wb.getSummaryInformation();
    	// si.setAuthor("JACK"); //填加xls文件作者信息
    	// si.setApplicationName("导出程序"); //填加xls文件创建程序信息
    	// si.setLastAuthor("最后保存者信息"); //填加xls文件最后保存者信息
    	// si.setComments("JACK is a programmer!"); //填加xls文件作者信息
    	// si.setTitle("POI导出Excel"); //填加xls文件标题信息
    	// si.setSubject("POI导出Excel");//填加文件主题信息
    	// si.setCreateDateTime(new Date());
    
    	// 第二步, 在workbook中添加一个sheet,对应excel文件中的sheet
    	HSSFSheet sheet = wb.createSheet(sheetName);
    	// sheet.setColumnWidth(2, 100);//设置某一个下标的列宽
    	// sheet.setDefaultColumnStyle(column, style);//设置某一列的默认样式
    	// sheet.setDefaultColumnWidth(20);//设置所有列的列宽
    	// sheet.setColumnHidden(columnIndex, hidden);//设置某一列是否隐藏
    	// sheet.setDefaultRowHeight((short)(30*20));//设置行高60
    	// sheet.setDefaultRowHeightInPoints(30);//设置行高30
    
    	// 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
    	// CellRangeAddress region1=new CellRangeAddress(0, 0, 0, 2);
    	// CellRangeAddress region2=new CellRangeAddress(1, 1, 0, 2);
    	// sheet.addMergedRegion(region1);
    	// sheet.addMergedRegion(region2);
    
    	// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制,参数为行索引(excel的行),可以是0~65535之间的任何一个
    	int rownum = 0;
    	HSSFRow row = sheet.createRow(rownum);
    
    	// 第四步,创建单元格,并设置表头 设置表头居中
    	// 给表还是单元格还是列可以自己设置并获取到需要的样式titlestyle cellstyle
    	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
    	
    	// 声明列对象,参数为列索引,可以是0~255之间的任何一个
    	HSSFCell cell;
    	// 创建标题,此时row=0,即第一行
    	for (int i = 0; i < title.length; i++) {
    		cell = row.createCell(i);
    		cell.setCellValue(title[i]);
    		cell.setCellStyle(titlestyle);
    	}
    	// 第二行
    	rownum++;
    	HSSFRow row02 = sheet.createRow(rownum);
    	HSSFCell cell_row02 = row02.createCell(0);
    	cell_row02.setCellValue("总数:" + (content.length) + ",导出时间:" + new Date().toLocaleString());
    	// 设置小标题样式
    	cell_row02.setCellStyle(titlestyle);
    
    	// 创建内容 第三行
    	for (int i = 0; i < content.length; i++) {
    		String str = ",";
    		row = sheet.createRow(i + 2);
    		for (int j = 0; j < content[i].length; j++) {
    			// 将内容按照顺序赋给对应的列对象
    			row.createCell(j).setCellValue(String.valueOf(content[i][j]));
    		}
    	}
    	return wb;
    }
    
    /**
     * 
     * 导出Excel 多个sheet页   每个sheet页表头内容不同
     * 
     * @param sheetNum
     *            sheet页
     * @param sheetTitle
     *            sheet页名称
     * @param title
     *            标题
     * @param List<List<String>> result
     *            导出数据内容
     * @return wb
     *            HSSFWorkbook对象
     * @throws IOException
     * 
     */
    
    public static HSSFWorkbook getsheetsHSSFWorkbook(HSSFWorkbook wb, int sheetNum, String sheetTitle, String[] title,
    		List<List<String>> result) {
    
    	HSSFSheet sheet = wb.createSheet();
    	wb.setSheetName(sheetNum, sheetTitle);
    	int rownum = 0;
    	HSSFRow row = sheet.createRow(rownum);
    	// 设置并获取到需要的样式
    	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
    	// 声明列对象,参数为列索引,可以是0~255之间的任何一个
    	HSSFCell cell;
    	// 创建标题,此时row=0,即第一行
    	for (int i = 0; i < title.length; i++) {
    		cell = row.createCell(i);
    		cell.setCellValue(title[i]);
    		cell.setCellStyle(titlestyle);
    	}
    	/*// 第二行
    	rownum++;
    	HSSFRow row02 = sheet.createRow(rownum);
    	HSSFCell cell_row02 = row02.createCell(0);
    	cell_row02.setCellValue("总数:" + (result.size()) + ",导出时间:" + new Date().toLocaleString());
    	// 设置小标题样式
    	cell_row02.setCellStyle(titlestyle);*/
    
    	// 创建内容 第三行
    	// 遍历集合数据,产生数据行
    	if (result != null) {
    		int index = 1;
    		for (List<String> m : result) {
    			row = sheet.createRow(index);
    			int cellIndex = 0;
    			for (String str : m) {
    				row.createCell((short) cellIndex).setCellValue(str);
    				cellIndex++;
    			}
    			index++;
    		}
    	}
    	return wb;
    }
    
    /**
     * 
     * 导出Excel 数据量过多的话放入多个sheet页中
     * 每个sheet页目前设置为60000
     * 
     * @param title
     *            标题
     * @param List<List<String>> result
     *            导出数据内容
     * @return wb
     *            HSSFWorkbook对象
     * @throws IOException
     * 
     */
    
    public static HSSFWorkbook getManySheets(String[] title, List<List<String>> result) {
    	HSSFWorkbook wb = new HSSFWorkbook();
    	// sheet名
    	String sheetTitle = "业务清单";
    	int sheetNum = 0;// 记录额外创建的sheet数量
    	HSSFSheet sheet = wb.createSheet(sheetTitle + sheetNum);
    	// wb.setSheetName(sheetNum, sheetTitle+sheetNum);
    	int rownum = 0;
    	HSSFRow row = sheet.createRow(rownum);
    	
    	// 设置并获取到需要的样式
    	HSSFCellStyle titlestyle = getAndSetHSSFCellStyleHeader(wb);
    	
    	HSSFCell cell;
    	// 创建标题,此时row=0,即第一行
    	for (int j = 0; j < title.length; j++) {
    		cell = row.createCell(j);
    		cell.setCellValue(title[j]);
    		cell.setCellStyle(titlestyle);
    	}
    
    	// 遍历集合数据,创建excel内容,产生数据行
    	if (result != null) {
    		List<String> m = null;
    		for (int i = 0; i < result.size(); i++) {
    			if ((i + 1) % 60000 == 0) {
    				sheetNum++;
    				sheet = wb.createSheet(sheetTitle + sheetNum);
    				row = sheet.createRow(0);
    				// 声明列对象,参数为列索引,可以是0~255之间的任何一个
    				// 创建标题,此时row=0,即第一行
    				for (int j = 0; j < title.length; j++) {
    					cell = row.createCell(j);
    					cell.setCellValue(title[j]);
    					cell.setCellStyle(titlestyle);
    				}
    				
    			}
    			row = sheet.createRow((i + 1) - (sheetNum * 60000)+sheetNum);
    			int cellIndex = 0;
    			m = result.get(i);
    			for (String str : m) {
    				row.createCell((short) cellIndex).setCellValue(str);
    				cellIndex++;
    			}
    			
    
    		}
    	}
    
    	return wb;
    }
    
    
    /**
     * 获取并设置header样式
     */
    private static HSSFCellStyle getAndSetHSSFCellStyleHeader(HSSFWorkbook wb) {
    	HSSFCellStyle hssfCellStyle = wb.createCellStyle();
    	// 创建一个居中格式
    	hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    	// 设置字体
    	HSSFFont font = wb.createFont();
    	font.setFontName("楷体");
    	font.setFontHeightInPoints((short) 12);
    	font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    	hssfCellStyle.setFont(font);
    	// 创建边框对象
    	HSSFCellStyle setBorder = wb.createCellStyle();
    	// 设置自动换行
    	setBorder.setWrapText(true);
        return hssfCellStyle;
    }
    

    }

  • 相关阅读:
    jQuery之五:CheckBox控制
    WinServer2003 设置之:xp风格
    ASP.net: cookie
    ASP.NET之:URL重写(转载)
    jQuery 之二:Ajax加载Json数据
    jQuery 之一:对象插件
    Asp.net:Form
    jQuery之四:Table过滤
    jQuery之三:Tab控制
    Opera 9.01 Build 8543
  • 原文地址:https://www.cnblogs.com/jianzhixuan/p/13921620.html
Copyright © 2020-2023  润新知