
poi导出excel时带有超链接
发布日期:2021-05-06 17:28:42
浏览次数:19
分类:技术文章
本文共 13437 字,大约阅读时间需要 44 分钟。
两种方式,第一种适合xls,不过当数据量超出五百条后,超链接的样式会不起作用.
第二种比较适合xlsx 两种方式都会或多或少有问题,大家在用的时候需要根据自身情况进行选择和调整,第一种方式
package test;import java.io.FileOutputStream;import java.io.IOException;import java.sql.Connection;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.CreationHelper;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.ss.usermodel.Hyperlink;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;/** * poi导出excel待超链接 * * @author zys2042 * */public class POIToExcelLink { public void toExcel() throws Exception { // params为运行本规则时所传入的参数 // 获取数据 List
第二种方式
package test;import java.io.FileOutputStream;import java.io.IOException;import java.sql.Connection;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.CreationHelper;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.ss.usermodel.Hyperlink;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;/** * poi导出excel待超链接 * * @author zys2042 * */public class POIToExcelLink2 { public void toExcel() throws Exception { // params为运行本规则时所传入的参数 // 获取数据 Listlist = getDate(); String fileName = ""; String[] cellNameArr = { "姓名", "年龄", "超链接" }; String[] cellValueArr = { "name", "age", "linkText", "linkAddress" }; exportXls(list, fileName, cellNameArr, cellValueArr); } /** * 获取数据 * * @return */ private List getDate() { // TODO Auto-generated method stub return null; } private String exportXls(List list, String filename, String[] cellNameArr, String[] cellValueArr) { if (list.size() == 0 || list.isEmpty()) { return "没有数据,请重新查询!"; } // 生成excel // 生成excel文件的头 .xlsx XSSFWorkbook hssfWorkbook = new XSSFWorkbook(); Sheet sheet = hssfWorkbook.createSheet(filename); // 表头 CellStyle styleHead = getColumnTopStyle(hssfWorkbook); CellStyle stylebody = getStyle(hssfWorkbook); // 列标题行 Row headRow = sheet.createRow(0); return setExva(list, filename, cellNameArr, cellValueArr, sheet, styleHead, stylebody, headRow, hssfWorkbook); } private String setExva(List list, String filename, String[] cellNameArr, String[] cellValueArr, Sheet sheet, CellStyle styleHead, CellStyle stylebody, Row headRow, Workbook hssfWorkbook) { // 列名称 for (int i = 0; i < cellNameArr.length; i++) { Cell cell1 = headRow.createCell(i); cell1.setCellValue(cellNameArr[i]); cell1.setCellStyle(styleHead); sheet.setColumnWidth(i, 20 * 256); } CellStyle linkStyle= getLinkStyle(hssfWorkbook); // 列值 for (Map map : list) { Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1); for (int i = 0; i < cellValueArr.length; i++) { Cell cell1 = dataRow.createCell(i); if (i == 2) { // 超链接 cell1.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell1.setCellFormula("HYPERLINK(\"" + (String) map.get("linkAddress")+ "\",\"" + (String) map.get(cellValueArr[i])+ "\")"); cell1.setCellStyle(linkStyle); } else { // 普通数据 cell1.setCellValue((String) map.get(cellValueArr[i])); cell1.setCellStyle(stylebody); } } } return outToEx(filename, hssfWorkbook); } private String outToEx(String filename, Workbook hssfWorkbook) { // 第六步,将文件存到指定位置 try { FileOutputStream fout = new FileOutputStream("文件父路径" + filename + ".xlsx"); hssfWorkbook.write(fout); fout.close(); // BeanCtx.out("导出成功"); return "导出成功!"; } catch (Exception e) { e.printStackTrace(); return "导出失败!"; } } public CellStyle getColumnTopStyle(Workbook workbook) { // 设置字体 Font font = workbook.createFont(); // 设置字体大小 font.setFontHeightInPoints((short) 12); // 字体加粗 font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 设置字体名字 font.setFontName("Courier New"); // int length = str.getBytes().length; // sheet.setColumnWidth((short)1,(short)(length*256)); // 设置样式; CellStyle 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(true); // 设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } /* * 列数据信息单元格样式 */ public CellStyle getStyle(Workbook workbook) { // 设置字体 Font font = workbook.createFont(); // 设置字体大小 font.setFontHeightInPoints((short) 11); // 字体加粗 // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置字体名字 font.setFontName("Courier New"); // 设置样式; CellStyle 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(true); // 设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } public CellStyle getLinkStyle(Workbook workbook) { // 设置字体 Font font = workbook.createFont(); // 设置字体大小 font.setFontHeightInPoints((short) 11); // 字体加粗 // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置字体名字 font.setFontName("Courier New"); font.setColor(HSSFColor.BLUE.index); // 设置样式; CellStyle 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(true); // 设置水平对齐的样式为居中对齐; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; }}
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月13日 11时40分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
vue自定义封装Loading组件
2019-03-05
解决移动端项目中苹果ios和安卓android手机点击输入框网页页面自动放大缩小
2019-03-05
vs code 正则表达式 visual Studio code vscode
2019-03-05
Element UI 中动态路由的分析及实现
2019-03-05
使用springMVC配置视图管理器后找不到指定的页面
2019-03-05
关于js中对于Promise的深入理解
2019-03-05
对于js中的this指向的深入理解
2019-03-05
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
2019-03-05
杭电oj 2015 偶数求和
2019-03-05
蓝桥杯基础练习 特殊回文数 (原来暴力破解这么直接……)
2019-03-05
Qt 从文本文件中读入一行内容但不包含换行符
2019-03-05
【STL】容器适配器之stack、queue用法总结
2019-03-05
社区AMA:CasperLabs是如何从众多智能合约平台脱颖而出的
2019-03-05
十大排序算法之三:插入排序(Python)
2019-03-05
利用Python实现循环队列
2019-03-05
十大排序算法之四:希尔排序(Python)
2019-03-05
利用递归实现二叉树的前中后序遍历(Python)
2019-03-05
用最大堆实现最大优先队列(Python)
2019-03-05
A*寻路算法(Python)
2019-03-05
NP问题以及一些相关知识
2019-03-05