poi导出excel时带有超链接

川长思鸟来 2021-11-13 23:20 480阅读 0赞

两种方式,第一种适合xls,不过当数据量超出五百条后,超链接的样式会不起作用.
第二种比较适合xlsx
两种方式都会或多或少有问题,大家在用的时候需要根据自身情况进行选择和调整,

第一种方式

  1. package test;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.sql.Connection;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.apache.poi.hssf.usermodel.HSSFCell;
  10. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  11. import org.apache.poi.hssf.usermodel.HSSFRow;
  12. import org.apache.poi.hssf.usermodel.HSSFSheet;
  13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  14. import org.apache.poi.hssf.util.HSSFColor;
  15. import org.apache.poi.ss.usermodel.Cell;
  16. import org.apache.poi.ss.usermodel.CellStyle;
  17. import org.apache.poi.ss.usermodel.CreationHelper;
  18. import org.apache.poi.ss.usermodel.Font;
  19. import org.apache.poi.ss.usermodel.Hyperlink;
  20. import org.apache.poi.ss.usermodel.Row;
  21. import org.apache.poi.ss.usermodel.Sheet;
  22. import org.apache.poi.ss.usermodel.Workbook;
  23. /**
  24. * poi导出excel待超链接
  25. *
  26. * @author zys2042
  27. *
  28. */
  29. public class POIToExcelLink {
  30. public void toExcel() throws Exception {
  31. // params为运行本规则时所传入的参数
  32. // 获取数据
  33. List<Map> list = getDate();
  34. String fileName = "";
  35. String[] cellNameArr = { "姓名", "年龄", "超链接" };
  36. String[] cellValueArr = { "name", "age", "linkText", "linkAddress" };
  37. exportXls(list, fileName, cellNameArr, cellValueArr);
  38. }
  39. /**
  40. * 获取数据
  41. *
  42. * @return
  43. */
  44. private List<Map> getDate() {
  45. // TODO Auto-generated method stub
  46. return null;
  47. }
  48. private String exportXls(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr) {
  49. if (list.size() == 0 || list.isEmpty()) {
  50. return "没有数据,请重新查询!";
  51. }
  52. // 生成excel
  53. // 生成excel文件的头 .xls
  54. HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
  55. HSSFSheet sheet = hssfWorkbook.createSheet(filename);
  56. // 表头
  57. CellStyle styleHead = getColumnTopStyle(hssfWorkbook);
  58. CellStyle stylebody = getStyle(hssfWorkbook);
  59. // 列标题行
  60. HSSFRow headRow = sheet.createRow(0);
  61. return setExva(list, filename, cellNameArr, cellValueArr, sheet, styleHead, stylebody, headRow, hssfWorkbook);
  62. }
  63. private String setExva(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr, Sheet sheet,
  64. CellStyle styleHead, CellStyle stylebody, Row headRow, Workbook hssfWorkbook) {
  65. // 列名称
  66. for (int i = 0; i < cellNameArr.length; i++) {
  67. Cell cell1 = headRow.createCell(i);
  68. cell1.setCellValue(cellNameArr[i]);
  69. cell1.setCellStyle(styleHead);
  70. sheet.setColumnWidth(i, 20 * 256);
  71. }
  72. // 列值
  73. for (Map map : list) {
  74. Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
  75. for (int i = 0; i < cellValueArr.length; i++) {
  76. Cell cell1 = dataRow.createCell(i);
  77. if (i == 2) {
  78. // 超链接
  79. cell1.setCellStyle(getLinkStyle(hssfWorkbook));
  80. cell1.setCellType(HSSFCell.CELL_TYPE_FORMULA);
  81. CreationHelper createHelper = hssfWorkbook.getCreationHelper();
  82. Hyperlink hyperlink1 = createHelper.createHyperlink(Hyperlink.LINK_URL);
  83. cell1.setHyperlink(hyperlink1);
  84. hyperlink1.setAddress((String) map.get("linkAddress"));
  85. cell1.setHyperlink(hyperlink1);// 链接
  86. cell1.setCellValue((String) map.get(cellValueArr[i]));// 文本
  87. } else {
  88. // 普通数据
  89. cell1.setCellValue((String) map.get(cellValueArr[i]));
  90. cell1.setCellStyle(stylebody);
  91. }
  92. }
  93. }
  94. return outToEx(filename, hssfWorkbook);
  95. }
  96. private String outToEx(String filename, Workbook hssfWorkbook) {
  97. // 第六步,将文件存到指定位置
  98. try {
  99. FileOutputStream fout = new FileOutputStream("文件父路径" + filename + ".xls");
  100. hssfWorkbook.write(fout);
  101. fout.close();
  102. // BeanCtx.out("导出成功");
  103. return "导出成功!";
  104. } catch (Exception e) {
  105. e.printStackTrace();
  106. return "导出失败!";
  107. }
  108. }
  109. public CellStyle getColumnTopStyle(Workbook workbook) {
  110. // 设置字体
  111. Font font = workbook.createFont();
  112. // 设置字体大小
  113. font.setFontHeightInPoints((short) 12);
  114. // 字体加粗
  115. font.setBoldweight(Font.BOLDWEIGHT_BOLD);
  116. // 设置字体名字
  117. font.setFontName("Courier New");
  118. // int length = str.getBytes().length;
  119. // sheet.setColumnWidth((short)1,(short)(length*256));
  120. // 设置样式;
  121. CellStyle style = workbook.createCellStyle();
  122. // 设置底边框;
  123. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  124. // 设置底边框颜色;
  125. // style.setBottomBorderColor(HSSFColor.BLACK.index);
  126. // 设置左边框;
  127. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  128. // 设置左边框颜色;
  129. // style.setLeftBorderColor(HSSFColor.BLACK.index);
  130. // 设置右边框;
  131. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  132. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  133. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  134. // style.setTopBorderColor(HSSFColor.BLACK.index);
  135. // 在样式用应用设置的字体;
  136. style.setFont(font);
  137. // 设置自动换行;
  138. style.setWrapText(true);
  139. // 设置水平对齐的样式为居中对齐;
  140. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  141. // 设置垂直对齐的样式为居中对齐;
  142. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  143. return style;
  144. }
  145. /*
  146. * 列数据信息单元格样式
  147. */
  148. public CellStyle getStyle(Workbook workbook) {
  149. // 设置字体
  150. Font font = workbook.createFont();
  151. // 设置字体大小
  152. font.setFontHeightInPoints((short) 11);
  153. // 字体加粗
  154. // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  155. // 设置字体名字
  156. font.setFontName("Courier New");
  157. // 设置样式;
  158. CellStyle style = workbook.createCellStyle();
  159. // 设置底边框;
  160. style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
  161. // style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
  162. style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
  163. // style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
  164. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  165. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  166. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  167. // style.setTopBorderColor(HSSFColor.BLACK.index);
  168. // 在样式用应用设置的字体;
  169. style.setFont(font);
  170. // 设置自动换行;
  171. style.setWrapText(true);
  172. // 设置水平对齐的样式为居中对齐;
  173. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  174. // 设置垂直对齐的样式为居中对齐;
  175. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  176. return style;
  177. }
  178. public CellStyle getLinkStyle(Workbook workbook) {
  179. // 设置字体
  180. Font font = workbook.createFont();
  181. // 设置字体大小
  182. font.setFontHeightInPoints((short) 11);
  183. // 字体加粗
  184. // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  185. // 设置字体名字
  186. font.setFontName("Courier New");
  187. font.setColor(HSSFColor.BLUE.index);
  188. // 设置样式;
  189. CellStyle style = workbook.createCellStyle();
  190. // 设置底边框;
  191. style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
  192. // style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
  193. style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
  194. // style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
  195. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  196. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  197. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  198. // style.setTopBorderColor(HSSFColor.BLACK.index);
  199. // 在样式用应用设置的字体;
  200. style.setFont(font);
  201. // 设置自动换行;
  202. style.setWrapText(true);
  203. // 设置水平对齐的样式为居中对齐;
  204. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  205. // 设置垂直对齐的样式为居中对齐;
  206. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  207. return style;
  208. }
  209. }

第二种方式

  1. package test;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.sql.Connection;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.apache.poi.hssf.usermodel.HSSFCell;
  10. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  11. import org.apache.poi.hssf.usermodel.HSSFRow;
  12. import org.apache.poi.hssf.usermodel.HSSFSheet;
  13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  14. import org.apache.poi.hssf.util.HSSFColor;
  15. import org.apache.poi.ss.usermodel.Cell;
  16. import org.apache.poi.ss.usermodel.CellStyle;
  17. import org.apache.poi.ss.usermodel.CreationHelper;
  18. import org.apache.poi.ss.usermodel.Font;
  19. import org.apache.poi.ss.usermodel.Hyperlink;
  20. import org.apache.poi.ss.usermodel.Row;
  21. import org.apache.poi.ss.usermodel.Sheet;
  22. import org.apache.poi.ss.usermodel.Workbook;
  23. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  24. /**
  25. * poi导出excel待超链接
  26. *
  27. * @author zys2042
  28. *
  29. */
  30. public class POIToExcelLink2 {
  31. public void toExcel() throws Exception {
  32. // params为运行本规则时所传入的参数
  33. // 获取数据
  34. List<Map> list = getDate();
  35. String fileName = "";
  36. String[] cellNameArr = { "姓名", "年龄", "超链接" };
  37. String[] cellValueArr = { "name", "age", "linkText", "linkAddress" };
  38. exportXls(list, fileName, cellNameArr, cellValueArr);
  39. }
  40. /**
  41. * 获取数据
  42. *
  43. * @return
  44. */
  45. private List<Map> getDate() {
  46. // TODO Auto-generated method stub
  47. return null;
  48. }
  49. private String exportXls(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr) {
  50. if (list.size() == 0 || list.isEmpty()) {
  51. return "没有数据,请重新查询!";
  52. }
  53. // 生成excel
  54. // 生成excel文件的头 .xlsx
  55. XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
  56. Sheet sheet = hssfWorkbook.createSheet(filename);
  57. // 表头
  58. CellStyle styleHead = getColumnTopStyle(hssfWorkbook);
  59. CellStyle stylebody = getStyle(hssfWorkbook);
  60. // 列标题行
  61. Row headRow = sheet.createRow(0);
  62. return setExva(list, filename, cellNameArr, cellValueArr, sheet, styleHead, stylebody, headRow, hssfWorkbook);
  63. }
  64. private String setExva(List<Map> list, String filename, String[] cellNameArr, String[] cellValueArr, Sheet sheet,
  65. CellStyle styleHead, CellStyle stylebody, Row headRow, Workbook hssfWorkbook) {
  66. // 列名称
  67. for (int i = 0; i < cellNameArr.length; i++) {
  68. Cell cell1 = headRow.createCell(i);
  69. cell1.setCellValue(cellNameArr[i]);
  70. cell1.setCellStyle(styleHead);
  71. sheet.setColumnWidth(i, 20 * 256);
  72. }
  73. CellStyle linkStyle= getLinkStyle(hssfWorkbook);
  74. // 列值
  75. for (Map map : list) {
  76. Row dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
  77. for (int i = 0; i < cellValueArr.length; i++) {
  78. Cell cell1 = dataRow.createCell(i);
  79. if (i == 2) {
  80. // 超链接
  81. cell1.setCellType(HSSFCell.CELL_TYPE_FORMULA);
  82. cell1.setCellFormula("HYPERLINK(\"" + (String) map.get("linkAddress")+ "\",\"" + (String) map.get(cellValueArr[i])+ "\")");
  83. cell1.setCellStyle(linkStyle);
  84. } else {
  85. // 普通数据
  86. cell1.setCellValue((String) map.get(cellValueArr[i]));
  87. cell1.setCellStyle(stylebody);
  88. }
  89. }
  90. }
  91. return outToEx(filename, hssfWorkbook);
  92. }
  93. private String outToEx(String filename, Workbook hssfWorkbook) {
  94. // 第六步,将文件存到指定位置
  95. try {
  96. FileOutputStream fout = new FileOutputStream("文件父路径" + filename + ".xlsx");
  97. hssfWorkbook.write(fout);
  98. fout.close();
  99. // BeanCtx.out("导出成功");
  100. return "导出成功!";
  101. } catch (Exception e) {
  102. e.printStackTrace();
  103. return "导出失败!";
  104. }
  105. }
  106. public CellStyle getColumnTopStyle(Workbook workbook) {
  107. // 设置字体
  108. Font font = workbook.createFont();
  109. // 设置字体大小
  110. font.setFontHeightInPoints((short) 12);
  111. // 字体加粗
  112. font.setBoldweight(Font.BOLDWEIGHT_BOLD);
  113. // 设置字体名字
  114. font.setFontName("Courier New");
  115. // int length = str.getBytes().length;
  116. // sheet.setColumnWidth((short)1,(short)(length*256));
  117. // 设置样式;
  118. CellStyle style = workbook.createCellStyle();
  119. // 设置底边框;
  120. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  121. // 设置底边框颜色;
  122. // style.setBottomBorderColor(HSSFColor.BLACK.index);
  123. // 设置左边框;
  124. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  125. // 设置左边框颜色;
  126. // style.setLeftBorderColor(HSSFColor.BLACK.index);
  127. // 设置右边框;
  128. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  129. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  130. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  131. // style.setTopBorderColor(HSSFColor.BLACK.index);
  132. // 在样式用应用设置的字体;
  133. style.setFont(font);
  134. // 设置自动换行;
  135. style.setWrapText(true);
  136. // 设置水平对齐的样式为居中对齐;
  137. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  138. // 设置垂直对齐的样式为居中对齐;
  139. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  140. return style;
  141. }
  142. /*
  143. * 列数据信息单元格样式
  144. */
  145. public CellStyle getStyle(Workbook workbook) {
  146. // 设置字体
  147. Font font = workbook.createFont();
  148. // 设置字体大小
  149. font.setFontHeightInPoints((short) 11);
  150. // 字体加粗
  151. // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  152. // 设置字体名字
  153. font.setFontName("Courier New");
  154. // 设置样式;
  155. CellStyle style = workbook.createCellStyle();
  156. // 设置底边框;
  157. style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
  158. // style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
  159. style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
  160. // style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
  161. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  162. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  163. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  164. // style.setTopBorderColor(HSSFColor.BLACK.index);
  165. // 在样式用应用设置的字体;
  166. style.setFont(font);
  167. // 设置自动换行;
  168. style.setWrapText(true);
  169. // 设置水平对齐的样式为居中对齐;
  170. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  171. // 设置垂直对齐的样式为居中对齐;
  172. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  173. return style;
  174. }
  175. public CellStyle getLinkStyle(Workbook workbook) {
  176. // 设置字体
  177. Font font = workbook.createFont();
  178. // 设置字体大小
  179. font.setFontHeightInPoints((short) 11);
  180. // 字体加粗
  181. // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  182. // 设置字体名字
  183. font.setFontName("Courier New");
  184. font.setColor(HSSFColor.BLUE.index);
  185. // 设置样式;
  186. CellStyle style = workbook.createCellStyle();
  187. // 设置底边框;
  188. style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置底边框颜色;
  189. // style.setBottomBorderColor(HSSFColor.BLACK.index); //设置左边框;
  190. style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 设置左边框颜色;
  191. // style.setLeftBorderColor(HSSFColor.BLACK.index); //设置右边框;
  192. style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框颜色;
  193. // style.setRightBorderColor(HSSFColor.BLACK.index); //设置顶边框;
  194. style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 设置顶边框颜色;
  195. // style.setTopBorderColor(HSSFColor.BLACK.index);
  196. // 在样式用应用设置的字体;
  197. style.setFont(font);
  198. // 设置自动换行;
  199. style.setWrapText(true);
  200. // 设置水平对齐的样式为居中对齐;
  201. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  202. // 设置垂直对齐的样式为居中对齐;
  203. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  204. return style;
  205. }
  206. }

发表评论

表情:
评论列表 (有 0 条评论,480人围观)

还没有评论,来说两句吧...

相关阅读