一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

2022-02-15 15:39ZWZhangYu Java教程

我們?cè)谌粘>幊踢^(guò)程中,總是會(huì)碰見(jiàn)導(dǎo)出相關(guān)表格信息的需求,所以就讓我們一起來(lái)學(xué)習(xí)一下,這篇文章主要給大家介紹了關(guān)于Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的相關(guān)資料,需要的朋友可以參考下

前言

Apache POI是一種流行的API,允許程序員使用Java程序創(chuàng)建,修改和顯示MS Office文件。 它是由Apache Software Foundation開(kāi)發(fā)和分發(fā)的開(kāi)源庫(kù),用于使用Java程序設(shè)計(jì)或修改Microsoft Office文件。 它包含將用戶(hù)輸入數(shù)據(jù)或文件解碼為MS Office文檔的類(lèi)和方法。

HSSF - 用于讀取和寫(xiě)入MS-Excel文件的xls格式

 

示例

Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

類(lèi)似上面的需要合并表頭的報(bào)表在日常的開(kāi)發(fā)中也是經(jīng)常遇到,這里總結(jié)下關(guān)于類(lèi)似的報(bào)表開(kāi)發(fā)整理。
對(duì)于這種的報(bào)表看起來(lái)很麻煩,但其實(shí)掌握了技巧開(kāi)發(fā)起來(lái)也是很簡(jiǎn)單的。下面的代碼僅供參考,有些字段為了脫敏都以數(shù)字顯示了,見(jiàn)諒。

// 創(chuàng)建sheet
      Sheet sheet = wb.createSheet("當(dāng)月");
      //表頭字體
      Font headerFont = wb.createFont();
      headerFont.setFontName("宋體");
      headerFont.setFontHeightInPoints((short) 18);
      headerFont.setBold(true);
      headerFont.setColor(Font.COLOR_NORMAL);
      //正文字體
      Font contextFont = wb.createFont();
      contextFont.setFontName("宋體");
      contextFont.setFontHeightInPoints((short) 12);
      headerFont.setBold(true);
      //表頭樣式,左右上下居中
      CellStyle headerStyle = wb.createCellStyle();
      headerStyle.setFont(headerFont);
      // 左右居中
      headerStyle.setAlignment(HorizontalAlignment.CENTER);
      // 上下居中
      headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
      headerStyle.setLocked(true);
      // 自動(dòng)換行
      headerStyle.setWrapText(false);
      //單元格樣式,左右上下居中 邊框
      CellStyle commonStyle = wb.createCellStyle();
      commonStyle.setFont(contextFont);
      // 左右居中
      commonStyle.setAlignment(HorizontalAlignment.CENTER);
      // 上下居中
      commonStyle.setVerticalAlignment(VerticalAlignment.CENTER);
      commonStyle.setLocked(true);
      // 自動(dòng)換行
      commonStyle.setWrapText(false);
      //單元格樣式,左右上下居中 邊框
      CellStyle commonWrapStyle = wb.createCellStyle();
      commonWrapStyle.setFont(contextFont);
      //單元格樣式,豎向 邊框
      CellStyle verticalStyle = wb.createCellStyle();
      verticalStyle.setFont(contextFont);
      CellStyle commonStyleNoBorder = wb.createCellStyle();
      commonStyleNoBorder.setFont(contextFont);
      commonStyleNoBorder.setLocked(true);
      // 自動(dòng)換行
      commonStyleNoBorder.setWrapText(false);
      CellStyle alignLeftStyle = wb.createCellStyle();
      alignLeftStyle.setFont(contextFont);
      alignLeftStyle.setLocked(true);
      // 自動(dòng)換行
      alignLeftStyle.setWrapText(false);
      //單元格樣式,左對(duì)齊 無(wú)邊框
      CellStyle alignLeftNoBorderStyle = wb.createCellStyle();
      alignLeftNoBorderStyle.setFont(contextFont);
      alignLeftNoBorderStyle.setLocked(true);
      // 自動(dòng)換行
      alignLeftNoBorderStyle.setWrapText(false);
      //單元格樣式,右對(duì)齊
      CellStyle alignRightStyle = wb.createCellStyle();
      alignRightStyle.setFont(contextFont);
      alignRightStyle.setLocked(true);
      // 自動(dòng)換行
      alignRightStyle.setWrapText(false);
      // 行號(hào)
      int rowNum = 0;
      //設(shè)置列寬
      for (int i = 0; i < 11; i++) {
          sheet.setColumnWidth(i, 3000);
      }

      //第一行
      Row r0 = sheet.createRow(rowNum++);
      r0.setHeight((short) 800);
      Cell c00 = r0.createCell(0);
      c00.setCellValue("表二:");
      c00.setCellStyle(alignLeftNoBorderStyle);
      //合并單元格
      sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
      //第二行城市對(duì)象綜合統(tǒng)計(jì)表
      Row r1= sheet.createRow(rowNum++);
      r1.setHeight((short) 800);
      Cell r10 = r1.createCell(0);
      r10.setCellValue("城市對(duì)象管理情況統(tǒng)計(jì)表");
      r10.setCellStyle(headerStyle);
      //合并單元格
      sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 8));
      //第三行
      Row r2 = sheet.createRow(rowNum++);
      r2.setHeight((short) 800);
      Cell r20 = r2.createCell(0);
      r20.setCellValue("填表單位:XXX街道");
      r20.setCellStyle(alignLeftNoBorderStyle);
      //合并單元格
      sheet.addMergedRegion(new CellRangeAddress(2, 2, 0, 4));
      //第四行
      Row r3 = sheet.createRow(rowNum++);
      r3.setHeight((short) 700);
      String[] rowSecond = {"地  區(qū)", "對(duì)象情況1", "","對(duì)象情況2","" ,"調(diào)增情況3","","情況4",""};

      for (int i = 0; i < rowSecond.length; i++) {
          Cell tempCell = r3.createCell(i);
          tempCell.setCellValue(rowSecond[i]);
          tempCell.setCellStyle(commonStyle);
      }
      //第5行
      Row r4 = sheet.createRow(rowNum++);
      String[] rowSecond5 = {"1", "2", "3","4","5","6","7","8"};
      for (int i = 0; i < rowSecond5.length; i++) {
          Cell tempCell = r4.createCell(i+1);
          tempCell.setCellValue(rowSecond5[i]);
          tempCell.setCellStyle(commonStyle);
      }
      //合并單元格
      sheet.addMergedRegion(new CellRangeAddress(3, 4, 0, 0));
      sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 2));
      sheet.addMergedRegion(new CellRangeAddress(3, 3, 3, 4));
      sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 6));
      sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 8));
      //查詢(xún)數(shù)據(jù)
      List<Map<String, Object>> dataList = XXX.list(XXX);
      //統(tǒng)計(jì)合計(jì)數(shù)據(jù)
      Map<String,Object> mapTotal = new HashMap<>();
      for (Map<String, Object> map : dataList) {
          Row tempRow = sheet.createRow(rowNum++);
          //列表數(shù)據(jù)
          Cell tempCell0 = tempRow.createCell(0);
          String sqmc = (String) map.get("XXX");
          tempCell0.setCellValue(sqmc);
          tempCell0.setCellStyle(commonStyle);
      }
      //導(dǎo)出
response.setContentType("application/vnd.ms-excel");
      // 文件名
      String fileName = "報(bào)表名稱(chēng).xls";
      response.setHeader("Content-disposition", "attachment;filename=\"" + fileName + "\"");
      OutputStream stream = response.getOutputStream();
      try {
          if (null != wb && null != stream) {
              wb.write(stream);
              stream.close();
          }
      } catch (Exception e) {
          log.error("excel文檔導(dǎo)出錯(cuò)誤-異常信息:", e);
      }  

 

注意事項(xiàng)

【1】POI操作的行和列都是從0位置開(kāi)始的

【2】所有的復(fù)雜表頭無(wú)非是合并單元格,這里都可以通過(guò)下面的API實(shí)現(xiàn)

int addMergedRegion(CellRangeAddress region)
添加合并的單元格區(qū)域

Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

創(chuàng)建新的單元格范圍。索引是從零開(kāi)始的。

參數(shù):

firstRow―第一行的索引

lastRow―最后一行(含)的索引必須等于或大于第一行

firstCol―第一列的索引

lastCol―最后一列(包括)的索引必須等于或大于firstCol

示例

 sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 2));

合并第四行第1列和第2列

Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

【3】對(duì)于空的單元格,直接在數(shù)組或者列表中給個(gè)空值就可以了。對(duì)于下面的圖片中第5行的[本月人次]這種如果是數(shù)組直接在創(chuàng)建列的時(shí)候指定起始位置為1就可以了,注意不要影響合并的位置,而且合并的單元格不要有沖突否則會(huì)拋出異常,注意些就可以了.

Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的方法詳解

 

總結(jié)

到此這篇關(guān)于Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表合并單元格的文章就介紹到這了,更多相關(guān)Java導(dǎo)出Excel統(tǒng)計(jì)報(bào)表內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/Octopus21/article/details/120679549

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲 欧美 清纯 校园 另类 | 日韩亚洲欧美一区二区三区 | 国产xx肥老妇视频奂费 | 亚洲精品国产AV成人毛片 | 91麻豆精品国产自产在线观看 | 91久久精品国产一区二区 | 日本漫画工囗全彩番在线 | kisssis无减删全集在线观看 | 国产美女亚洲精品久久久综合 | 日韩在线中文字幕 | 欧美一级欧美三级 | 欧美日韩成人在线 | 国产成人精品高清在线观看99 | china国产bbw | 美味情缘韩国在线观看视频 | 四虎在线视频免费观看 | 日韩高清成人毛片不卡 | 石原莉奈被店长侵犯免费 | 视频免费视频观看网站 | 韩国三级2020 | 四虎网址在线 | 深夜视频在线播放 | 日本三级免费网站 | 亚洲AV精品无码喷水直播间 | 暖暖 免费 高清 中文 日本 | 91制片厂制作传媒免费版樱花 | α级毛片 | 色噜噜狠狠狠综合曰曰曰88av | 日韩一级片在线观看 | 天天天天天天天操 | 国内揄拍国内精品久久 | 91这里只有精品 | 亚洲国产在线综合018 | 特黄特级毛片免费视 | 暖暖 免费 高清 日本 在线1 | 91精品国产高清久久久久久io | 欧美成人第一页 | 好男人社区www影院在线观看 | 免费观看日本 | 男公厕里同性做爰 | 四虎影院新地址 |