import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.net.URLEncoder;

 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 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.HSSFDataFormat;
 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;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.util.CellRangeAddress;

 /**
  * Servlet implementation class GetSmariExcelServlet
  */
 @WebServlet("/GetSmariExcelServlet")
 public class GetSmariExcelServlet extends HttpServlet {
     private static final long serialVersionUID = 1L;

     /**
      * @see HttpServlet#HttpServlet()
      */
     public GetSmariExcelServlet() {
         super();
         // TODO Auto-generated constructor stub
     }

     /**
      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub

         String shellParam=maker+" "+jigobu+" "+div+" "+dataFlg+" "+stime+" "+etime;
         String shellName="/home/trial/AP/KIGYO_KARUTE/CGI/SUMMARY_DETAIL.SEARCH";
         GetJsonAndData get = new GetJsonAndData();
         String result = get.getDataString(shellName, shellParam);
         StringBuilder resultJson = null;
         GetSmariExcelServlet me=new GetSmariExcelServlet();
         ExcelName="サマリ";
         response.setContentType("text/json; charset=utf-8");

         HSSFWorkbook workbook = me.getExcelFile(result); //拿到 创建好并且填充好td 的workbook
         response.setContentType("application/ms-excel;charset=UTF-8");//
         response.addHeader("Content-Disposition", "attachment; filename="
               + URLEncoder.encode(ExcelName, "utf-8") + ".xls");//
         OutputStream ouputStream = response.getOutputStream();   //拿到response的输出流
         workbook.write(ouputStream);   //workbook.write(输出流--输出的方向);
         ouputStream.flush();   //提交
         ouputStream.close();   //关闭,返回页面 ,下载excel
     }

     /**
      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
        doGet(request,response);
     }

     /**
     *用字符串拼html文 --往excel中写入内容
     */
     private StringBuilder smariTable(String result,String shellParam){
         String[] resultR = result.split("\n");
         StringBuilder html=new StringBuilder();
         html.append("<html>");
         html.append("<head>");
         html.append("<style>");
         html.append("td{border:1px solid #A3C0E8;overflow:hidden;white-space:nowrap;color:black;text-align:center;}");
         html.append(".htd{background-color:#00619C;color:#FFFFFF}");
         html.append(".std{background-color:#FCE4D6;color:#413B38}");
         html.append("</style></head><body><table>");
         //....
         html.append("<tr>");
         html.append("<td class='htd' rowspan='3'>クラスター企業</td>");
          //....
         html.append("</tr>");
         String[] head=resultR[0].split(" ");
         html.append("<tr>");
         for (int i=1;i<collen-1;i++) {

           if (i<3||i==(3+2*mcount)||i==(4+4*mcount)||i==(5+4*mcount)||i==(6+6*mcount)||i==(7+6*mcount)) {
           }else{
             html.append("<td class='htd'>"+head[i+1]+"</td>");
           }
         }
         html.append("</tr>");

         for (int i=1;i<resultR.length;i++) {
           html.append("<tr>");
            //....
           html.append("</tr>");
         }
         html.append("</table></body></html>");
         return html;
     }
     /**
     *用POI的HSSFWorkbook生成excel文件
     */
     public HSSFWorkbook getExcelFile(String result) {

         HSSFWorkbook workbook = new HSSFWorkbook(); //
         HSSFSheet sheet = workbook.createSheet("サマリ"); // workbook.createSheet("excel中工作表的名字")
         sheet.createFreezePane( 2, 3, 3, 4); //冻结的列以及行
         //createFreezePane(p1要冻结的列数,p2要冻结的行数,p3右侧窗格从第几列开始显示,p4下侧窗格从第几行开始显示); 其中 p3>p1,p4>p2,否则异常
         //合并单元格 第一个和第二个参数表示开始行和结束行,第三和第四个参数表示开始列和结束列
         //sheet.addMergedRegion(new CellRangeAddress(0,0,0,8));

         sheet.addMergedRegion(new CellRangeAddress(0,0,2*m+3,4*m+4));
         //合并单元格 addMergedRegion(new CellRangeAddress(起始行,起始列,结束行,结束列));

         //表头白色字体
         HSSFFont FontWhiteBold = workbook.createFont();//创建字体样式
         FontWhiteBold.setFontHeightInPoints((short)12);//设置字体大小
         FontWhiteBold.setFontName("Meiryo UI");//设置字体
         FontWhiteBold.setColor(HSSFColor.WHITE.index);//设置默认字体颜色白色
         FontWhiteBold.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//正常字体 ,还有加粗字体等

         //表头样式
         HSSFCellStyle headStyle = (HSSFCellStyle) workbook.createCellStyle();//创建单元格样式
         headStyle.setBorderBottom((short) 1);//设置边框 -- setBorderBottom等函数的参数都为short,要强制转化int型数据为short
         headStyle.setBorderLeft((short) 1);//设置边框
         headStyle.setBorderRight((short) 1);//设置边框
         headStyle.setBorderTop((short) 1);//设置边框
         headStyle.setLeftBorderColor(HSSFColor.BLUE_GREY.index);
         headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//单元格内容居中
         headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//单元格内容垂直居中
         headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//背景
         headStyle.setFillForegroundColor(HSSFColor.ROYAL_BLUE.index);//设置背景色
         headStyle.setFont(FontWhiteBold);//字体--setFont(定义好的字体类);

         sheet.setColumnWidth(0, 8000);//设置第一列的列宽

         HSSFRow headRow0 = sheet.createRow(0); //创建第一行 tr
         HSSFCell mes_cell = (HSSFCell) headRow0.createCell(i); //第一行的第一个单元格 td
         mes_cell.setCellValue(head0[i]); //td的值
         mes_cell.setCellStyle(headStyle);    //td样式
         HSSFRow headRow1 = sheet.createRow(i);
         HSSFCell mes_cell = (HSSFCell) headRow1.createCell(j);
         mes_cell.setCellValue(head1[i]);
         mes_cell.setCellStyle(headStyle);    

         sheet.groupColumn(2, m);  //分组 -- 多列多行 点-收缩,+伸开的效果 前闭(后-1)开
         sheet.groupColumn(2+m, 2*m);
         sheet.groupColumn(2*m+3, 3*m+1);
         sheet.groupColumn(3*m+3, 4*m+1);
         sheet.groupColumn(4*m+5, 5*m+3);
         sheet.groupColumn(5*m+5, 6*m+3); 

         sheet.setColumnGroupCollapsed(2, true); //分的组 收缩起来
         sheet.setColumnGroupCollapsed(2+m, true);
         sheet.setColumnGroupCollapsed(2*m+3, true);
         sheet.setColumnGroupCollapsed(3*m+3, true);
         sheet.setColumnGroupCollapsed(4*m+5, true);
         sheet.setColumnGroupCollapsed(5*m+5, true); 

         return workbook;

     }
 }

POI-java下载excel-HSSFWorkbook的更多相关文章

  1. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  2. 【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩…… 1.inputstream序列化问题 Could not write JSON document: ...

  3. java下载Excel模板(工具类)

    一次文件下载记录 一次不成熟的文件下载操作记录,希望能对需要的人有所帮助. 1.前端代码 $("#downloadModel").click(function(){ var mod ...

  4. java 下载Excel模板

    前端: JSP: <div id="insertBtn" class="MyCssBtn leftBtn" onclick="download( ...

  5. java下载excel,excel从数据库获取数据

    <!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId&g ...

  6. poi java读取excel文件

    官网使用学习链接地址 http://poi.apache.org/components/spreadsheet/quick-guide.html

  7. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  8. java的poi技术写Excel的Sheet

    在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...

  9. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  10. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils; import java.io.File; import ja ...

随机推荐

  1. ArcGIS中合并空间有压盖关系的要素属性

    1.前言 在客户单位, 被客户问道这样一个问题“如何合并两个有压盖关系图层的属性信息?” 在工具箱里面可以使用以下工具解决: 2.处理过程 (1)在工具箱中选择Spatial Join工具,并设置相关 ...

  2. android获取https证书

    最近碰到一个问题, 有朋友问android这边能不能拿到服务器下发的证书,意思就是   自签名证书的https接口,在请求的时候,也没有添加自签名证书进信任列表,直接去发https请求,按照正常htt ...

  3. LAMP stack-5.6.22 (OpenLogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: apache2.4.20 mysql5.6.30 php5.6.22 apache application server basic softwar ...

  4. 数据类型 -- uint32_t 类型

    整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型 ...

  5. npm常用指令小记

    查看本地指定包在npm远程服务器的版本信息 方式一: npm view <packageName> versions 方式二: npm info <packageName> 查 ...

  6. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  7. openlayers 初步认识(转)

    OpenLayers是一个开源的js框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能.OpenLayers支持的地图来源 包括了WMS,GoogleMap,KaMap,MSVi ...

  8. 【51nod1705】七星剑(成环DP)

    点此看题面 大致题意: 你要把一把剑从0星升至7星,有n颗宝石供你选择,第i颗宝石的价值是c[i],用第i颗宝石将剑从k-1星升至k星的成功率是prob[k][i],而失败后会掉lose[k][i], ...

  9. 2017.12.25 Linux系统的使用

    Linux系统的使用 现在标配的系统是 Linux + Nginx + PHP + MySQL ,这样的配置越来越多的大公司在用的了说到配置不同的是一个公司的规约,比如说挂载一般分为2个盘, / 下面 ...

  10. python_39_变量补充

    #使用eval()函数计算字符串中的有效表达式,并返回结果 a='1+3' print(eval(a)) b='''{ '闵行': { '人民广场': { '炸鸡店': {}, }, } ''' pr ...