[size=large][color=red][b]1.HSSF 2003版Excel导出[/b][/color][/size]

package com.hwt.glmf.common;

import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;

import javax.servlet.http.HttpServletResponse;

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.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.CellRangeAddress;import org.apache.poi.hssf.util.HSSFColor;

/** * 导出Excel公共方法 * @version 1.0 *  * @author wangcp * */public class ExportExcel extends BaseAction {

 //显示的导出表的标题   private String title; //导出表的列名  private String[] rowName ;

  private List<Object[]>  dataList = new ArrayList<Object[]>();

  HttpServletResponse  response;

  //构造方法,传入要导出的数据    public ExportExcel(String title,String[] rowName,List<Object[]>  dataList){     this.dataList = dataList;        this.rowName = rowName;      this.title = title;  }

   /*     * 导出数据    * */ public void export() throws Exception{        try{          HSSFWorkbook workbook = new HSSFWorkbook();                        // 创建工作簿对象            HSSFSheet sheet = workbook.createSheet(title);                 // 创建工作表

            // 产生表格标题行            HSSFRow rowm = sheet.createRow(0);           HSSFCell cellTiltle = rowm.createCell(0);

          //sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面  - 可扩展】           HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);//获取列头样式对象           HSSFCellStyle style = this.getStyle(workbook);                 //单元格样式对象

           sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)));             cellTiltle.setCellStyle(columnTopStyle);          cellTiltle.setCellValue(title);

         // 定义所需列数         int columnNum = rowName.length;          HSSFRow rowRowName = sheet.createRow(2);               // 在索引2的位置创建行(最顶端的行开始的第二行)

          // 将列头设置到sheet的单元格中           for(int n=0;n<columnNum;n++){               HSSFCell  cellRowName = rowRowName.createCell(n);              //创建列头对应个数的单元格                cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);             //设置列头单元格的数据类型                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);                cellRowName.setCellValue(text);                                 //设置列头单元格的值               cellRowName.setCellStyle(columnTopStyle);                       //设置列头单元格样式           }

           //将查询出的数据设置到sheet对应的单元格中          for(int i=0;i<dataList.size();i++){

               Object[] obj = dataList.get(i);//遍历每个对象              HSSFRow row = sheet.createRow(i+3);//创建所需的行数

              for(int j=0; j<obj.length; j++){                    HSSFCell  cell = null;   //设置单元格的数据类型                    if(j == 0){                     cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);                     cell.setCellValue(i+1);                      }else{                        cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);                      if(!"".equals(obj[j]) && obj[j] != null){                          cell.setCellValue(obj[j].toString());                       //设置单元格的值                     }                 }                 cell.setCellStyle(style);                                   //设置单元格样式             }         }         //让列宽随着导出的列长自动适应          for (int colNum = 0; colNum < columnNum; colNum++) {                int columnWidth = sheet.getColumnWidth(colNum) / 256;                for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {                    HSSFRow currentRow;                   //当前行未被使用过                    if (sheet.getRow(rowNum) == null) {                     currentRow = sheet.createRow(rowNum);                    } else {                      currentRow = sheet.getRow(rowNum);                   }                 if (currentRow.getCell(colNum) != null) {                        HSSFCell currentCell = currentRow.getCell(colNum);                       if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {                           int length = currentCell.getStringCellValue().getBytes().length;                         if (columnWidth < length) {                                columnWidth = length;                            }                     }                 }             }             if(colNum == 0){                    sheet.setColumnWidth(colNum, (columnWidth-2) * 256);              }else{                    sheet.setColumnWidth(colNum, (columnWidth+4) * 256);             }         }

           if(workbook !=null){             try               {                 String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";                 String headStr = "attachment; filename=\"" + fileName + "\"";                   response = getResponse();                    response.setContentType("APPLICATION/OCTET-STREAM");                    response.setHeader("Content-Disposition", headStr);                 OutputStream out = response.getOutputStream();                   workbook.write(out);              }             catch (IOException e)             {                 e.printStackTrace();              }         }

       }catch(Exception e){          e.printStackTrace();      }

   }

   /*     * 列头单元格样式     */       public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

           // 设置字体       HSSFFont font = workbook.createFont();       //设置字体大小          font.setFontHeightInPoints((short)11);        //字体加粗        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         //设置字体名字          font.setFontName("Courier New");        //设置样式;           HSSFCellStyle style = workbook.createCellStyle();        //设置底边框;          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         //设置底边框颜色;            style.setBottomBorderColor(HSSFColor.BLACK.index);        //设置左边框;          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);       //设置左边框颜色;        style.setLeftBorderColor(HSSFColor.BLACK.index);          //设置右边框;          style.setBorderRight(HSSFCellStyle.BORDER_THIN);          //设置右边框颜色;        style.setRightBorderColor(HSSFColor.BLACK.index);         //设置顶边框;          style.setBorderTop(HSSFCellStyle.BORDER_THIN);        //设置顶边框颜色;            style.setTopBorderColor(HSSFColor.BLACK.index);       //在样式用应用设置的字体;            style.setFont(font);          //设置自动换行;         style.setWrapText(false);         //设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);       //设置垂直对齐的样式为居中对齐;         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

          return style;

     }

   /*     * 列数据信息单元格样式  */       public HSSFCellStyle getStyle(HSSFWorkbook workbook) {          // 设置字体       HSSFFont font = workbook.createFont();       //设置字体大小          //font.setFontHeightInPoints((short)10);          //字体加粗        //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);       //设置字体名字          font.setFontName("Courier New");        //设置样式;           HSSFCellStyle style = workbook.createCellStyle();        //设置底边框;          style.setBorderBottom(HSSFCellStyle.BORDER_THIN);         //设置底边框颜色;            style.setBottomBorderColor(HSSFColor.BLACK.index);        //设置左边框;          style.setBorderLeft(HSSFCellStyle.BORDER_THIN);       //设置左边框颜色;        style.setLeftBorderColor(HSSFColor.BLACK.index);          //设置右边框;          style.setBorderRight(HSSFCellStyle.BORDER_THIN);          //设置右边框颜色;        style.setRightBorderColor(HSSFColor.BLACK.index);         //设置顶边框;          style.setBorderTop(HSSFCellStyle.BORDER_THIN);        //设置顶边框颜色;            style.setTopBorderColor(HSSFColor.BLACK.index);       //在样式用应用设置的字体;            style.setFont(font);          //设置自动换行;         style.setWrapText(false);         //设置水平对齐的样式为居中对齐;         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);       //设置垂直对齐的样式为居中对齐;         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

          return style;

     }}

[size=large][color=red][b]2.XSSF 2007版Excel导出[/b][/color][/size]

package com.nfky.dmt.common.excel;

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

import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.IndexedColors;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.apache.poi.xssf.usermodel.XSSFRichTextString;

/** * excel导出公共类 *  * @author lanwx * @time 2017年8月24日上午9:07:14 */public class ExcelUtils {

   private ExcelUtils(){}

  public static void exportExcel(String sheetTitle, Map<String, String> headerMap, List<Map<String, Object>> dataset, OutputStream out) {     export(sheetTitle,headerMap,dataset,out); }

   /**    * excel导出     *     * @param sheetTitle  * @param headerMap  key 是英文名  value是中文名  * @param dataset  key对应dataset中Map的key   * @param out     */   private static void export(String sheetTitle, Map<String, String> headerMap, List<Map<String, Object>> dataset, OutputStream out){      SXSSFWorkbook wb = new SXSSFWorkbook(-1);        // 使用gzip压缩       wb.setCompressTempFiles(true);

      CellStyle style1 = wb.createCellStyle();     style1.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex());      style1.setFillPattern(CellStyle.SOLID_FOREGROUND);        // 水平居中       style1.setAlignment((short) 2);       //垂直居中        style1.setVerticalAlignment(CellStyle.VERTICAL_CENTER);       style1.setBorderBottom(CellStyle.BORDER_THIN);        style1.setBorderRight(CellStyle.BORDER_THIN);

       CellStyle style2 = wb.createCellStyle();     style2.setAlignment((short) 2);       style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER);       style2.setBorderBottom(CellStyle.BORDER_THIN);        style2.setBorderRight(CellStyle.BORDER_THIN);

     CellStyle style3 = wb.createCellStyle();     // 左对齐        style3.setAlignment((short) 1);       style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER);       style3.setBorderBottom(CellStyle.BORDER_THIN);        style3.setBorderRight(CellStyle.BORDER_THIN);

       Sheet sh = wb.createSheet(sheetTitle);       // 设置表头       int index = 0;       Row row = sh.createRow(index++);       row.setHeight((short) (25 * 20));     Cell cell = row.createCell(0);       // 设置风格       cell.setCellStyle(style1);        XSSFRichTextString text = new XSSFRichTextString("业务数据");      cell.setCellValue(text);      // 因为有多列合并 所以需要对每一列都进行设置style     for(int i=1,n=headerMap.size();i<n;i++){           cell = row.createCell(i);            cell.setCellStyle(style1);        }     // 设置宽度       sh.addMergedRegion(new CellRangeAddress(0, 0, 0, headerMap.size() - 1));      // 第二行开始导入数据      row = sh.createRow(index++);       row.setHeight((short) (25 * 20));     int c = 0 ;      for (Entry<String, String> entry:headerMap.entrySet()) {            // 设置每列的宽度            sh.setColumnWidth(c, 40 * 256);           Cell cellHeader = row.createCell(c++);         cellHeader.setCellStyle(style2);          text = new XSSFRichTextString(entry.getValue());         cellHeader.setCellValue(text);        }     Cell rowCell = null;     for (int i = 0, n = dataset.size(); i < n; i++) {          row = sh.createRow(index++);           c=0;         for (Entry<String, String> entry:headerMap.entrySet()) {                rowCell = row.createCell(c++);             rowCell.setCellStyle(style3);             rowCell.setCellValue((String) dataset.get(i).get(entry.getKey()));            }     }     try {         wb.write(out);            out.close();          wb.dispose();     } catch (IOException e) {         e.printStackTrace();      } }}

java POI操作Excel代码收藏 (包括标题垂直水平居中)相关推荐

  1. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

  2. Java poi操作Excel单元格样式

    Java poi设置Excel单元格格式设置 XSSFWorkbook xwb = new XSSFWorkbook();或者 XSSFWorkbook xwb = new XSSFWorkbook( ...

  3. java poi 操作 excel 读取本地Excel / 保存excel到本地 / url下载excel

    pom.xml 配置poi版本 <dependency><groupId>org.apache.poi</groupId><artifactId>poi ...

  4. java poi操作excel 添加 锁定单元格保护

    Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类 ...

  5. java poi 操作Excel 删除行内容和直接删除行

    一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是: void removeRow(Row row)//Remove a row fro ...

  6. Java POI操作Excel记录

    1.在excel中新增行和单元格 首先在excel中指定行之后新增单元格,如果后面还有行数据的话,则需要先执行sheet.shiftRows()操作,将后面的数据往下移动需要新增行的行数.然后再执行s ...

  7. 利用java poi对excel表的读写操作

    2019独角兽企业重金招聘Python工程师标准>>> 利用java poi对excel表的读写操作 POI简介: Apache POI是一种流行的API,它允许程序员使用Java程 ...

  8. java apache.poi_Java利用apache的POI操作Excel

    最近在写一些报表的活,顺便总结下...第一篇博文,希望多多指教. 项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法. ...

  9. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

最新文章

  1. 扭矩大好还是马力大好_发动机的马力重要还是扭矩重要?加速到底看哪个?
  2. pycharm解决Inconsistent indentation:mix of tabs and spaces
  3. 大项目之网上书城(八)——数据库大改添加图书
  4. jquery批量删除
  5. 玩转oracle 11g(18):数据库相关日志文件位置
  6. 纽曼皮尔逊准则Matlab实现,纽曼-皮尔逊准则,Neyman Pearson Criterion,在线英语词典,英文翻译,专业英语...
  7. 2012禁用ip隧道 win_IMCP协议的魅力——IMCP隧道
  8. 分子动力学模拟AMBER参数意义
  9. 联想硬盘保护系统 安装详解
  10. 上传身份证照片js_小程序上传身份证图片的实现方法
  11. better-scroll基本使用
  12. 【数据库设计-2】权限设计-系统登录用户权限设计
  13. 【论文笔记】Resolution Adaptive Networks for Efficient Inference (CVPR2020)
  14. java值面向对象2
  15. Android Rooting for Programmers
  16. Error: Registry key ‘Software\JavaSoft\Java Runtime Environment’\CurrentVersion’
  17. linux temp文件夹在哪_手机文件夹是英文不敢乱删?找出这5个文件夹,手机瞬间轻松6个G...
  18. 坦克大战 —— 韩顺平
  19. microsoft office visio 2007 安装过程中出错的解决(直接看后面)
  20. QPaintEvent 与 画家QPainter

热门文章

  1. 关于MySQL自增id不连续问题
  2. pytorch各个版本下载地址大全
  3. linux 网卡配置目录,Linux目录结构以及网卡配置
  4. 一套webshell提权教程
  5. 专业的数据分析报告应该这么写!
  6. java undertow_Undertow 作为简单的web文件服务器使用
  7. 基于Linux服务器的JAVA开发环境搭建
  8. 天刀服务器维护时间,10月20日服务器例行维护公告(已完成)
  9. 用GNS3模拟器做链路聚合实验
  10. 半年后继续捡起,,,