1. /**
  2. * 一级权限数据导出
  3. * @return
  4. */
  5. @RequestMapping(value = "/getExportData", method = RequestMethod.GET)
  6. @ResponseBody //@RequestParam("name") String name,
  7. public void getExportData(HttpServletRequest request,HttpServletResponse response){
  8. String filename2 = "";
  9. Sheet sheet = null;
  10. Sheet SecondSheet = null;
  11. String fileName = "xxxx统计报表" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime()) + ".xlsx";
  12. SXSSFWorkbook sxworkbook = this.createWookBook();
  13.  
  14. /**
  15. * 权限辨别:
  16. * 1.如果数据权限为3 仅导出中层权限报表。
  17. * 2.其他情况直接导出等级权限一二级报表。
  18. * 说明: 网点用户目前无报表导出功能。
  19. */
  20. if("3".equals(String.valueOf(ShiroUtils.getUser().getInsLev()))){
  21.  
  22. /**
  23. * 中层报表。
  24. */
  25. SecondSheet = sxworkbook.createSheet("中层权限报表");
  26.  
  27. /**
  28. * 表头标题行模板设定,写入数据到报表。
  29. */
  30. this.setModelA(SecondSheet.createRow(0), SecondSheet.createRow(1),SecondSheet,aaaaa(serviceName).getExportDataSecond(value), this.setExcelCellStyle(sxworkbook));
  31.  
  32. }else if("2".equals(String.valueOf(ShiroUtils.getUser().getInsLev()))){
  33.  
  34. /**
  35. * 顶层权限报表1。
  36. */
  37. sheet = sxworkbook.createSheet("顶层权限报表1");
  38.  
  39. /**
  40. * 表头标题行模板设定,写入数据到报表。
  41. */
  42. this.setModelB(sheet.createRow((short)0), sheet.createRow((short)1), sheet, aaaaa(serviceName).getExportData(), this.setExcelCellStyle(sxworkbook));
  43.  
  44. /**
  45. * 顶层权限报表2。
  46. */
  47. SecondSheet = sxworkbook.createSheet("顶层权限报表2");
  48.  
  49. /**
  50. * 表头标题行模板设定,写入数据到报表。
  51. */
  52. this.setModelA(SecondSheet.createRow(0), SecondSheet.createRow(1),SecondSheet,aaaaa(serviceName).getExportDataSecond(null), this.setExcelCellStyle(sxworkbook));
  53.  
  54. }
  55.  
  56. // 报表单元格合并模板。
  57. this.setMergeCells(sheet, SecondSheet);
  58.  
  59. // 窗格冻结设定
  60. this.setFreezePanes(sheet, SecondSheet);
  61.  
  62. //获取User-agent 当前是哪个浏览器
  63. String header = request.getHeader("User-Agent");
  64. try {
  65. filename2 = this.encodeDownloadFilename(fileName,header);
  66. response.setHeader("content-disposition", "filename="+filename2);
  67. response.setContentType("application/vnd.ms-excel;charset=UTF-8");
  68. sxworkbook.write(response.getOutputStream());
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. }finally{
  72. try {
  73. response.getOutputStream().close();
  74. } catch (IOException e) {
  75. e.printStackTrace();
  76. }
  77. }
  78. }
  79.  
  80. /**
  81. * 下载文件时,针对不同浏览器,进行附件名的编码
  82. *
  83. * @param filename
  84. * 下载文件名
  85. * @param agent
  86. * 客户端浏览器
  87. * @return 编码后的下载附件名
  88. * @throws IOException
  89. */
  90. public static String encodeDownloadFilename(String filename, String agent)
  91. throws IOException {
  92. // 如果是火狐浏览器
  93. if (agent.contains("Firefox")) {
  94. filename = "=?UTF-8?B?"
  95. + Base64.getEncoder().encodeToString(filename.getBytes("utf-8"))
  96. + "?=";
  97. filename = filename.replaceAll("\r\n", "");
  98. // IE及其他浏览器
  99. } else {
  100. filename = URLEncoder.encode(filename, "utf-8");
  101. filename = filename.replace("+"," ");
  102. }
  103. return filename;
  104. }
  105.  
  106. /**
  107. * 创建工作簿。
  108. * @return
  109. */
  110. public SXSSFWorkbook createWookBook(){
  111. XSSFWorkbook xworkbook = new XSSFWorkbook();
  112. SXSSFWorkbook sxworkbook = new SXSSFWorkbook(xworkbook,100);
  113. return sxworkbook;
  114. }
  115.  
  116. /**
  117. *
  118. * 标题行设定,报表数据写入.
  119. * @param rowA 标题行(第一行)。
  120. * @param rowB 标题行(第二行)。
  121. * @param sheet 报表页Sheet对象。
  122. * @param data 数据集。
  123. * @param TitleBarstyle 标题行样式对象。
  124. * @param dataStyle 数据行样式对象。
  125. */
  126. public void setModelA(Row rowA,Row rowB,Sheet sheet,List<ExportData> data,CellStyle style){
  127.  
  128. /**
  129. * 创建标题行。
  130. */
  131. Cell cellA1 = rowA.createCell(0);
  132. Cell cellA2 = rowA.createCell(3);
  133. Cell cellA3 = rowA.createCell(12);
  134. Cell cellB0 = rowB.createCell(0);
  135. Cell cellB1 = rowB.createCell(1);
  136. Cell cellB2 = rowB.createCell(2);
  137. Cell cellB3 = rowB.createCell(3);
  138. Cell cellB4 = rowB.createCell(4);
  139. Cell cellB5 = rowB.createCell(5);
  140. Cell cellB6 = rowB.createCell(6);
  141. Cell cellB7 = rowB.createCell(7);
  142. Cell cellB8 = rowB.createCell(8);
  143. Cell cellB9 = rowB.createCell(9);
  144. Cell cellB10 = rowB.createCell(10);
  145. Cell cellB11 = rowB.createCell(11);
  146. Cell cellB12 = rowB.createCell(12);
  147. Cell cellB13 = rowB.createCell(13);
  148. Cell cellB14 = rowB.createCell(14);
  149. Cell cellB15 = rowB.createCell(15);
  150. Cell cellB16 = rowB.createCell(16);
  151. Cell cellB17 = rowB.createCell(17);
  152. Cell cellB18 = rowB.createCell(18);
  153. Cell cellB19 = rowB.createCell(19);
  154. Cell cellB20 = rowB.createCell(20);
  155.  
  156. /**
  157. * 标题行样式设定。
  158. */
  159. cellA1.setCellStyle(style);
  160. cellA2.setCellStyle(style);
  161. cellA3.setCellStyle(style);
  162. cellB0.setCellStyle(style);
  163. cellB1.setCellStyle(style);
  164. cellB2.setCellStyle(style);
  165. cellB3.setCellStyle(style);
  166. cellB4.setCellStyle(style);
  167. cellB5.setCellStyle(style);
  168. cellB6.setCellStyle(style);
  169. cellB7.setCellStyle(style);
  170. cellB8.setCellStyle(style);
  171. cellB9.setCellStyle(style);
  172. cellB10.setCellStyle(style);
  173. cellB11.setCellStyle(style);
  174. cellB12.setCellStyle(style);
  175. cellB13.setCellStyle(style);
  176. cellB14.setCellStyle(style);
  177. cellB15.setCellStyle(style);
  178. cellB16.setCellStyle(style);
  179. cellB17.setCellStyle(style);
  180. cellB18.setCellStyle(style);
  181. cellB19.setCellStyle(style);
  182. cellB20.setCellStyle(style);
  183.  
  184. /**
  185. * 设定标题行内容。
  186. */
  187. cellA1.setCellValue("name");
  188. cellA2.setCellValue("name");
  189. cellA3.setCellValue("name");
  190. cellB0.setCellValue("name");
  191. cellB1.setCellValue("name");
  192. cellB2.setCellValue("name");
  193. cellB3.setCellValue("name");
  194. cellB4.setCellValue("name");
  195. cellB5.setCellValue("name");
  196. cellB6.setCellValue("name");
  197. cellB7.setCellValue("name");
  198. cellB8.setCellValue("name");
  199. cellB9.setCellValue("name");
  200. cellB10.setCellValue("name");
  201. cellB11.setCellValue("name");
  202. cellB12.setCellValue("name");
  203. cellB13.setCellValue("name");
  204. cellB14.setCellValue("name");
  205. cellB15.setCellValue("name");
  206. cellB16.setCellValue("name");
  207. cellB17.setCellValue("name");
  208. cellB18.setCellValue("name");
  209. cellB19.setCellValue("name");
  210. cellB20.setCellValue("name");
  211.  
  212. // 循环数据进入报表。
  213. if(data != null && data.size() > 0){
  214. for (int h=0; h<data.size(); h++) {
  215.  
  216. /**
  217. * 创建数据行。
  218. */
  219. Row row = sheet.createRow((short)h+2);
  220. Cell cell0 = row.createCell(0);
  221. Cell cell1 = row.createCell(1);
  222. Cell cell2 = row.createCell(2);
  223. Cell cell3 = row.createCell(3);
  224. Cell cell4 = row.createCell(4);
  225. Cell cell5 = row.createCell(5);
  226. Cell cell6 = row.createCell(6);
  227. Cell cell7 = row.createCell(7);
  228. Cell cell8 = row.createCell(8);
  229. Cell cell9 = row.createCell(9);
  230. Cell cell10 = row.createCell(10);
  231. Cell cell11 = row.createCell(11);
  232. Cell cell12 = row.createCell(12);
  233. Cell cell13 = row.createCell(13);
  234. Cell cell14 = row.createCell(14);
  235. Cell cell15 = row.createCell(15);
  236. Cell cell16 = row.createCell(16);
  237. Cell cell17 = row.createCell(17);
  238. Cell cell18 = row.createCell(18);
  239. Cell cell19 = row.createCell(19);
  240. Cell cell20 = row.createCell(20);
  241.  
  242. /**
  243. * 数据行样式设定。
  244. */
  245. cell0.setCellStyle(style);
  246. cell1.setCellStyle(style);
  247. cell2.setCellStyle(style);
  248. cell3.setCellStyle(style);
  249. cell4.setCellStyle(style);
  250. cell5.setCellStyle(style);
  251. cell6.setCellStyle(style);
  252. cell7.setCellStyle(style);
  253. cell8.setCellStyle(style);
  254. cell9.setCellStyle(style);
  255. cell10.setCellStyle(style);
  256. cell11.setCellStyle(style);
  257. cell12.setCellStyle(style);
  258. cell13.setCellStyle(style);
  259. cell14.setCellStyle(style);
  260. cell15.setCellStyle(style);
  261. cell16.setCellStyle(style);
  262. cell17.setCellStyle(style);
  263. cell18.setCellStyle(style);
  264. cell19.setCellStyle(style);
  265. cell20.setCellStyle(style);
  266.  
  267. // 设定数据行内容。
  268. cell0.setCellValue(data.get(h).getxname());
  269. cell1.setCellValue(data.get(h).getxname());
  270. cell2.setCellValue(data.get(h).getxname());
  271. cell3.setCellValue(data.get(h).getxname());
  272. cell4.setCellValue(data.get(h).getxname());
  273. cell5.setCellValue(data.get(h).getxname());
  274. cell6.setCellValue(data.get(h).getxname());
  275. cell7.setCellValue(data.get(h).getxname());
  276. cell8.setCellValue(data.get(h).getxname()+"%");
  277. cell9.setCellValue(data.get(h).getxname()+"%");
  278. cell10.setCellValue(data.get(h).getxname()+"%");
  279. cell11.setCellValue(data.get(h).getxname()+"%");
  280. cell12.setCellValue(data.get(h).getxname());
  281. cell13.setCellValue(data.get(h).getxname());
  282. cell14.setCellValue(data.get(h).getxname());
  283. cell15.setCellValue(data.get(h).getxname());
  284. cell16.setCellValue(data.get(h).getxname());
  285. cell17.setCellValue(data.get(h).getxname()+"%");
  286. cell18.setCellValue(data.get(h).getxname()==null?"0%":data.get(h).getxname()+"%");
  287. cell19.setCellValue(data.get(h).getxname()+"%");
  288. cell20.setCellValue(data.get(h).getxname()==""?"0%":data.get(h).getxname()+"%");
  289. }
  290. }
  291.  
  292. }
  293.  
  294. /**
  295. * 标题行设定,报表数据写入.
  296. * @param rowA 标题行(第一行)。
  297. * @param rowB 标题行(第二行)。
  298. * @param sheet 报表页Sheet对象。
  299. * @param data 数据集。
  300. */
  301. public void setModelB(Row rowA,Row rowB,Sheet sheet,List<ExportData> data, CellStyle style) {
  302.  
  303. /**
  304. * 标题行创建。
  305. */
  306. Cell cellA1 = rowA.createCell(0);
  307. Cell cellA2 = rowA.createCell(1);
  308. Cell cellA3 = rowA.createCell(10);
  309. Cell cellB1 = rowB.createCell(1);
  310. Cell cellB2 = rowB.createCell(2);
  311. Cell cellB3 = rowB.createCell(3);
  312. Cell cellB4 = rowB.createCell(4);
  313. Cell cellB5 = rowB.createCell(5);
  314. Cell cellB6 = rowB.createCell(6);
  315. Cell cellB7 = rowB.createCell(7);
  316. Cell cellB8 = rowB.createCell(8);
  317. Cell cellB9 = rowB.createCell(9);
  318. Cell cellB10 = rowB.createCell(10);
  319. Cell cellB11 = rowB.createCell(11);
  320. Cell cellB12 = rowB.createCell(12);
  321. Cell cellB13 = rowB.createCell(13);
  322. Cell cellB14 = rowB.createCell(14);
  323. Cell cellB15 = rowB.createCell(15);
  324. Cell cellB16 = rowB.createCell(16);
  325. Cell cellB17 = rowB.createCell(17);
  326. Cell cellB18 = rowB.createCell(18);
  327.  
  328. /**
  329. * 标题行样式设定。
  330. */
  331. cellA1.setCellStyle(style);
  332. cellA2.setCellStyle(style);
  333. cellA3.setCellStyle(style);
  334. cellB1.setCellStyle(style);
  335. cellB2.setCellStyle(style);
  336. cellB3.setCellStyle(style);
  337. cellB4.setCellStyle(style);
  338. cellB5.setCellStyle(style);
  339. cellB6.setCellStyle(style);
  340. cellB7.setCellStyle(style);
  341. cellB8.setCellStyle(style);
  342. cellB9.setCellStyle(style);
  343. cellB10.setCellStyle(style);
  344. cellB11.setCellStyle(style);
  345. cellB12.setCellStyle(style);
  346. cellB13.setCellStyle(style);
  347. cellB14.setCellStyle(style);
  348. cellB15.setCellStyle(style);
  349. cellB16.setCellStyle(style);
  350. cellB17.setCellStyle(style);
  351. cellB18.setCellStyle(style);
  352.  
  353. // 赋值第一行标题行内容。
  354. cellA1.setCellValue("排名");
  355. cellA2.setCellValue("客户情况");
  356. cellA3.setCellValue("收付汇情况");
  357.  
  358. // 赋值第二行标题行内容。
  359. cellB1.setCellValue("客户总数");
  360. cellB2.setCellValue("建行收支客户数");
  361. cellB3.setCellValue("工行收支客户数");
  362. cellB4.setCellValue("农行收支客户数");
  363. cellB5.setCellValue("中行收支客户数");
  364. cellB6.setCellValue("我行收支客户占比");
  365. cellB7.setCellValue("工行收支客户占比");
  366. cellB8.setCellValue("农行收支客户占比");
  367. cellB9.setCellValue("中行收支客户占比");
  368. cellB10.setCellValue("总量");
  369. cellB11.setCellValue("建行");
  370. cellB12.setCellValue("工行");
  371. cellB13.setCellValue("农行");
  372. cellB14.setCellValue("中行");
  373. cellB15.setCellValue("我行占比");
  374. cellB16.setCellValue("工行占比");
  375. cellB17.setCellValue("农行占比");
  376. cellB18.setCellValue("中行占比");
  377.  
  378. // 报表数据写入。
  379. if(data != null && data.size() > 0){
  380. for (int x=0; x<data.size(); x++) {
  381.  
  382. // 创建数据行。
  383. Row row = sheet.createRow((short)x+2);
  384. Cell cell0 = row.createCell(0);
  385. Cell cell1 = row.createCell(1);
  386. Cell cell2 = row.createCell(2);
  387. Cell cell3 = row.createCell(3);
  388. Cell cell4 = row.createCell(4);
  389. Cell cell5 = row.createCell(5);
  390. Cell cell6 = row.createCell(6);
  391. Cell cell7 = row.createCell(7);
  392. Cell cell8 = row.createCell(8);
  393. Cell cell9 = row.createCell(9);
  394. Cell cell10 = row.createCell(10);
  395. Cell cell11 = row.createCell(11);
  396. Cell cell12 = row.createCell(12);
  397. Cell cell13 = row.createCell(13);
  398. Cell cell14 = row.createCell(14);
  399. Cell cell15 = row.createCell(15);
  400. Cell cell16 = row.createCell(16);
  401. Cell cell17 = row.createCell(17);
  402. Cell cell18 = row.createCell(18);
  403.  
  404. cell0.setCellStyle(style);
  405. cell1.setCellStyle(style);
  406. cell2.setCellStyle(style);
  407. cell3.setCellStyle(style);
  408. cell4.setCellStyle(style);
  409. cell5.setCellStyle(style);
  410. cell6.setCellStyle(style);
  411. cell7.setCellStyle(style);
  412. cell8.setCellStyle(style);
  413. cell9.setCellStyle(style);
  414. cell10.setCellStyle(style);
  415. cell11.setCellStyle(style);
  416. cell12.setCellStyle(style);
  417. cell13.setCellStyle(style);
  418. cell14.setCellStyle(style);
  419. cell15.setCellStyle(style);
  420. cell16.setCellStyle(style);
  421. cell17.setCellStyle(style);
  422. cell18.setCellStyle(style);
  423.  
  424. /**
  425. * 数据行样式设定。
  426. */
  427. cell0.setCellValue(data.get(x).getxname());
  428. cell1.setCellValue(data.get(x).getxname());
  429. cell2.setCellValue(data.get(x).getxname());
  430. cell3.setCellValue(data.get(x).getxname());
  431. cell4.setCellValue(data.get(x).getxname());
  432. cell5.setCellValue(data.get(x).getxname());
  433. cell6.setCellValue(data.get(x).getxname()+"%");
  434. cell7.setCellValue(data.get(x).getxname()+"%");
  435. cell8.setCellValue(data.get(x).getxname()+"%");
  436. cell9.setCellValue(data.get(x).getxname()+"%");
  437. cell10.setCellValue(data.get(x).getxname());
  438. cell11.setCellValue(data.get(x).getxname());
  439. cell12.setCellValue(data.get(x).getxname());
  440. cell13.setCellValue(data.get(x).getxname());
  441. cell14.setCellValue(data.get(x).getxname());
  442. cell15.setCellValue(data.get(x).getxname()+"%");
  443. cell16.setCellValue(data.get(x).getxname()==null?"0%":data.get(x).getxname()+"%");
  444. cell17.setCellValue(data.get(x).getxname()+"%");
  445. cell18.setCellValue(data.get(x).getxname()==""?"0%":data.get(x).getxname()+"%");
  446. }
  447. }
  448.  
  449. }
  450.  
  451. /**
  452. * 窗格冻结模板设定
  453. * @param sheet1 报表模板A.
  454. * @param sheet2 报表模板B.
  455. */
  456. public void setFreezePanes(Sheet sheet1 , Sheet sheet2){
  457.  
  458. // 冻结最左边两列和最上面一行。
  459. if(sheet1 != null){
  460. sheet1.createFreezePane(0,2);
  461. }
  462.  
  463. if(sheet2 != null){
  464. sheet2.createFreezePane(0,2);
  465. }
  466. }
  467.  
  468. /**
  469. * 报表单元格合并模板。
  470. * @param sheet1 报表模板A.
  471. * @param sheet2 报表模板B.
  472. * CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
  473. */
  474. public void setMergeCells(Sheet sheet1 , Sheet sheet2){
  475.  
  476. if(sheet1 != null){
  477. sheet1.addMergedRegion(new CellRangeAddress(0,1,0,0));
  478. sheet1.addMergedRegion(new CellRangeAddress(0,0,1,9));
  479. sheet1.addMergedRegion(new CellRangeAddress(0,0,10,18));
  480. }
  481.  
  482. if(sheet2 != null){
  483. sheet2.addMergedRegion(new CellRangeAddress(0,0,0,2));
  484. sheet2.addMergedRegion(new CellRangeAddress(0,0,3,11));
  485. sheet2.addMergedRegion(new CellRangeAddress(0,0,12,20));
  486. }
  487.  
  488. }
  489.  
  490. /**
  491. * 样式设定.
  492. * @param sxworkbook workbook工作簿对象。
  493. * @return
  494. */
  495. public CellStyle setExcelCellStyle(SXSSFWorkbook sxworkbook){
  496.  
  497. // workbook工作簿样式操作对象。
  498. CellStyle style = sxworkbook.createCellStyle();
  499.  
  500. // 文本样式设定对象。
  501. Font font = sxworkbook.createFont();
  502.  
  503. // 设定字体样式进入行级。
  504. style.setFont(font);
  505.  
  506. // 字体样式设定:粗体显示。
  507. // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  508.  
  509. // 设置背景色。
  510. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  511. style.setFillForegroundColor(HSSFColor.CORNFLOWER_BLUE.index);
  512.  
  513. // 设置外边框
  514. style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
  515. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
  516. style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
  517. style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
  518.  
  519. style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 字体左右居中
  520. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 字体垂直居中设定。
  521.  
  522. return style;
  523. }
  1. -- SQL
  2. SELECT COUNT(*)AS TOTALCOUNT ,
  3. COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
  4. COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
  5. COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
  6. COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
  7. CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
  8. CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
  9. CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
  10. CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
  11. SUM(F.TOTAL) AS TOTAL,
  12. SUM(F.XXX) AS XXX,
  13. SUM(F.XXX) AS XXX,
  14. SUM(F.XXX) AS XXX,
  15. SUM(F.XXX) AS XXX,
  16. CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
  17. CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
  18. CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
  19. CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB
  20. FROM XXX F
  21. GROUP BY F.XXX

Java Excel报表导出Demo的更多相关文章

  1. Java——excel导入导出demo

    1. java导入 package xx; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.userm ...

  2. 如何将jsp页面的table报表转换到excel报表导出

    假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...

  3. JAVA Excel导入导出

    --------------------------------------------方式一(新)-------------------------------------------------- ...

  4. Java Excel 导入导出(一)

    本文主要描述通过java实现Excel导入导出 一.读写Excel三种常用方式 1.JXL——Java Excel开放源码项目:读取,创建,更新 2.POI——Apache POI ,提供API给Ja ...

  5. Java 复杂excel报表导出

    MyExcel,是一个可直接使用Html文件,或者使用内置的Freemarker.Groovy.Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来 ...

  6. Java Excel导入导出(实战)

    一.批量导入(将excel文件转成list) 1. 前台代码逻辑 1)首先在html页面加入下面的代码(可以忽略界面的样式) <label for="uploadFile" ...

  7. 使用 shell / python 进行sql的excel报表导出

    如果要求你进行一个表数据的导出,如果使用shell的话,很容易做到,即执行一下 select 语句就可以拿到返回结果了! 如下: /usr/bin/mysql -u"${username}& ...

  8. excel poi导出demo

    最近做了一个excel 导出的demo,是抄写老大的(嘻嘻嘻),现在把demo源码放在这里 链接:https://pan.baidu.com/s/1_xj0hej-1xwX5JF39acEOg 提取码 ...

  9. java Excel导入导出工具类

    本文章,导入导出依赖提前定义好的模板 package com.shareworx.yjwy.utils; import java.io.File; import java.io.FileInputSt ...

随机推荐

  1. 如何学会快速调用API

    作为一名苦逼的程序员,在实现各种需求的过程中,总是需要调用各种各样的API,也就是要读各种文档.我们所要做的是弄清楚这些API的参数然后调用即可.说起来非常简单,是实际上却不是这样.现在火爆的机器学习 ...

  2. Android 使用NDK编译二进制文件并运行

    Android 使用NDK编译二进制文件并运行本文介绍如何编译可以在Android平台上运行的二进制可执行文件. 首先我们,知道,Android是基于Linux的,而在Linux上,可以执行二进制文件 ...

  3. 【452】pandas筛选出表中满足另一个表所有条件的数据

    参考:pandas筛选出表中满足另一个表所有条件的数据 参考:pandas:匹配两个dataframe 使用 pd.merge 来实现 on 表示查询的 columns,如果都有 id,那么这是很好的 ...

  4. Playbooks简介

    Playbooks简介 关于Playbooks Playbook简单示例 基本组成 主机和用户 任务列表 Handlers: 配置更改时运行操作 执行Playbook Ansible-Pull Lin ...

  5. spring中RequestBody注解接收参数时用JSONField转参数名无效问题

    问题: 在springboot项目中使用@RequestBody注解接收post请求中body里的json参数的情况.即: @RequestMapping(value = "/get-use ...

  6. Tplink路由器怎么设置无线桥接(转载)

    原始文章路径:http://www.pc6.com/video/8548.html .以下为转载内容(少量修改) 第1步 进入副路由器后台,选择网络参数,LAN口设置,把IP地址改成目标网络同一段的I ...

  7. OCR(Optical Character Recognition)算法总结

    https://zhuanlan.zhihu.com/p/84815144 最全OCR资料汇总,awesome-OCR

  8. Linux磁盘空间不足

    Linux磁盘空间不足 描述:zabbix报警磁盘空间不足 1.登录服务器,查看磁盘空间 2.筛选空间占用的文件 层层筛选 3.将没用的文件删除 rm -f /opt/export/log/np_se ...

  9. linux下的短延迟

    nanosleep,sleephttps://www.jianshu.com/p/42abcc2c9e50

  10. .NET Core sdk和runtime区别

    SDK和runtime区别 .net core Runtime[跑netcore 程序的] (CoreCLR) .net core SDK (开发工具包 [runtime(jre) + Rolysn( ...