背景:某同学找到我,问我能不能帮忙写个代码,批量设置excel的超链接(excel有文件名)。然后立马想到poi,这不是很简单吗。于是写了个小demo,最后也被同学称赞牛逼(我就深藏功与名的微笑.jpg)

PS:建议将excel文件改为xls文件

以下是代码:

前端js上传代码太简单了,一个ajax上传即可,只展示controller代码。


@Controller
@RequestMapping(value = "/test/excel")
public class TestExcelController {@RequestMapping(value = "/uploadFile.do", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> uploadReportBiFile(HttpServletRequest request,HttpServletResponse response, MultipartFile file) {Map<String, Object> resultMap = new HashMap<String, Object>();resultMap.put("result", "success");try {InputStream inputStream = null;Workbook workbook = null;try {inputStream = file.getInputStream();String fileAllName = file.getOriginalFilename();String fileName=fileAllName.substring(0,fileAllName.lastIndexOf("."));int type=0;String targetFilePath="./pdf/";//excel文件目录下的pdf文件夹//建议用xls文件if (fileAllName.endsWith(".xls")) {workbook = new HSSFWorkbook(inputStream);type=2;} else if (fileAllName.endsWith(".xlsx")) {//不建议使用workbook = new XSSFWorkbook(inputStream);type=1;} else {resultMap.put("result", "error");resultMap.put("message", "文件必须为xls或者xlsx");return resultMap;}//假设数据在第1个sheet,并且是从第一列的第二行开始,Sheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {Integer rowIndex = row.getRowNum(); // 行索引if (rowIndex == 0 || rowIndex>1000) {//第1行是标题跳过,假设最多1000个数据continue; // 这里的if没太多作用,只是为了不让循环太多次,节约时间}try {Cell cell = row.getCell(0);//第1列if (cell!=null) {String name = getCellValue(cell);if (name!=null) {String namef=name+".pdf";if (type==1) {//xlsx//这种方式不建议使用,因为框里会显示函数cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);cell.setCellFormula("HYPERLINK(\"" + targetFilePath+namef+  "\",\"" + name+"\")");cell.setCellValue(name);CellStyle linkStyle = workbook.createCellStyle();Font cellFont= workbook.createFont();cellFont.setUnderline(HSSFFont.U_SINGLE);cellFont.setColor(HSSFColor.BLUE.index);cellFont.setFontHeightInPoints((short)10);//font sizelinkStyle.setFont(cellFont);cell.setCellStyle(linkStyle);}if (type==2) {//xls//建议使用这种CellStyle  linkStyle = workbook.createCellStyle();Font  cellFont =  workbook.createFont();cellFont.setUnderline(HSSFFont.U_SINGLE);cellFont.setColor(HSSFColor.BLUE.index); cellFont.setFontHeightInPoints((short)10);//font sizelinkStyle.setFont(cellFont);cell.setCellValue(name);Hyperlink link = cell.getHyperlink();link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE);link.setAddress(targetFilePath+namef);cell.setHyperlink(link);cell.setCellStyle(linkStyle);}}}} catch (Exception e) {// 解析失败e.printStackTrace();}}//写到本地File newFile=new File("D:/test");      OutputStream stream=null;try {stream = new FileOutputStream(new File(newFile, new Date().getTime()+"-"+fileAllName));workbook.write(stream);} catch (Exception e) {e.printStackTrace();}finally{try {if(stream != null);stream.close();} catch (Exception e) {e.printStackTrace();}}    System.out.println("--------------------success---------------------");}catch(Exception e){e.printStackTrace();}} catch (Exception e) {resultMap.put("result", "error");resultMap.put("message", e.getMessage() + ",发生错误");}return resultMap;}/**  ** <p>Title: getCellValue</p>  ** <p>Description: 获取excel的单元的值</p>  ** @param cell* @return  **/public static String getCellValue(Cell cell) {if(null == cell){return "";}if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {// 返回布尔类型的值return String.valueOf(cell.getBooleanCellValue());} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {// 返回数值类型的值return String.valueOf((int)cell.getNumericCellValue());} else {cell.setCellType(Cell.CELL_TYPE_STRING);String cellValue = cell.getStringCellValue();if(null != cellValue){cellValue = cellValue.trim();}// 返回字符串类型的值return String.valueOf(cellValue);}}
}

【demo】Excel批量设置超链接(java代码实现)相关推荐

  1. excel批量生成超链接(VBA代码)

    今天接到一个任务,要给一个excel目录页添加超链接,看起来容易,但是有一个问题在于,这个文档的目录有几百行,几百个sheet,如果手动进行关联这个工作量有点难以想象,堪比上青天! 好直接上操作步骤( ...

  2. Excel批量取消超链接

    Excel批量取消超链接 Excel中如果带有超链接,最简单直接的办法就是选中单元格,单击右键选择"取消超链接",但这样只能一个单元格一个单元格地操作,如果数量巨大,成百上千个单元 ...

  3. java修改服务器文件名,批量修改文件名 java代码

    批量修改文件名 java代码 [2021-02-03 13:40:55]  简介: php实现批量修改文件名称的方法:首先使用函数[rename]实现,代码为[$path = pathinfo($cu ...

  4. php批量添加excel数据库表,php 把excel批量导入到数据库代码

    php 把excel批量导入到数据库代码 我们是利用了ExcelFileParser这个扩展来处理的哦, Excel数据获取演示 Excel数据获取演示 /** * CopyRight (c) 200 ...

  5. 多个 Excel 批量设置页眉页脚

    概要:给 Word 添加页眉页脚相信大家都很熟悉,但是你有给 Excel 设置过页眉页脚吗?你知道怎么给 Excel 设置页眉页脚吗?如果我们的 Excel 文件很多的时候,你又知道怎么批量的给多个 ...

  6. 如何利用Excel批量设置化学式下标

    今天跟大家分享一下如何利用Excel批量设置化学式下标 1.打开Excel文件,如下图我们想要批量将下面的不标准化学式转为标准化学式. 2.首先我们选中化学式单元格区域 3.点击下图选项(Excel工 ...

  7. 多个 Excel 批量设置页码信息

    概要:在 Word 中,我们经常需要跟页面添加页码信息,其实在 Excel 中也是可以添加页码信息的!你知道怎么给 Excel 添加页码信息吗?如果有很多 Excel 文件都需要添加页码信息,你又知道 ...

  8. Excel批量设置下划线

    Excel批量设置下划线 目录 Excel批量设置下划线 1.框选需要设置的单元格内容,鼠标右键选择"设置单元格格式" 2.点击"自定义"在类型框中输入&quo ...

  9. Excel文档总表与分表单(sheet)如何批量设置超链接跳转

    方法介绍: A:总览表→分表代码:=HYPERLINK("#"&C2&"!A2",C2) 批量引用的话,如图3-D4–所示十字填充柄下拖即可批量 ...

最新文章

  1. Qt Creator开发Qt快速应用程序
  2. 计算机网络的组成和结构ppt,常见的计算机网络拓扑结构PPT课件.pptx
  3. python网站用什么数据库_PyMySQL数据库的使用
  4. 从随机数生成到随机采样的C++实现
  5. CentOS(Linux)安装KETTLE教程 并配置执行定时任务
  6. 跨站请求伪造(CSRF)攻击是什么?如何防御?
  7. 怎么彻底卸载cad2017_怎么彻底卸载删除cad
  8. 学计算机专业开学要买笔记本电脑吗,大一开学需要买电脑吗 大学开学电脑买什么好...
  9. aspose-word的简单使用以及转pdf线上乱码
  10. go的close函数理解
  11. python 爬虫 爬取网易严选全网商品价格评论数据
  12. 【百川云栖分享】天施:后APP时代淘宝移动中台技术开源开放探索
  13. 一日精通python编程_爱上Python 一日精通Python编程 [Learn Python in One Day and Learn it Well ]...
  14. Chrome浏览器的crash问题
  15. MAC免费解压软件——解压RAR、7Zip等五六十种格式
  16. 宿舍买饭随机数概率生成器
  17. iOS淘宝授权登录及跳转淘宝页面
  18. 2020天池 “数字人体”视觉挑战赛_VNNI赛道_冠军_方案分享
  19. JS正则表达式 ,reg.test()时,慎重全局查找/.../g属性
  20. [转]《乒乓世界》封面故事:中国男乒直板三人行

热门文章

  1. 站在2021年开端,我从AWS那里看到了云计算未来
  2. 用Castor处理XML文档
  3. 我的科研生活2017-3-18
  4. 一道二阶常系数非齐次微分方程的八种解法
  5. IDEA+WampServer配置PHP运行环境
  6. 现代控制理论第一章学习笔记
  7. 现代远程教育入学指南(石油大学)--高等数学(二)在线作业
  8. 纽约大学工程学院计算机排名,纽约大学工程学院排名高的专业有哪些?
  9. SAE 1939学习笔记(一)
  10. 系统首选dns服务器修改,Windows系统首选DNS如何设置