poi 获取excel单元格超链接和设置excel单元格超链接及导出excel

导入excel及需要的jar包看之前链接:https://blog.csdn.net/sipengfei_/article/details/88184964

先说一下导出的时候怎么给单元格设置超链接,有两种方式可以设置超链接

//第一种
String url = "https://www.baidu.com/";
cell.setCellFormula("HYPERLINK(https://www.baidu.com/,\"查看图片\"");
cell.setCellFormula("HYPERLINK(\""+url+"\",\"查看图片\"");

//第二种
HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
link.setAddress("https://www.baidu.com/");
cell.setHyperlink(link);// 设置超链接  

HSSFHyperlink 也可以换成 XSSFHyperlink,主要还是看你导出时是以哪种格式导出的

导入excel时获取单元格超链接,导出时以什么方式设置的超链接,导入时就以什么方式获取超链接

//第一种

//先用行对象获取单元格对象,然后再把超链接截取出来
String forMula = cell.getCellFormula();
String param = forMula.substring(forMula.indexOf("http"), forMula.indexOf(",") - 1);//图片的url地址

//第二种
Hyperlink link = cell.getHyperlink();
String param = link.getAddress();

导出Excel的方法:
list参数是我要导出的数据,我导出来的是.xls的文件,也可以导出.xlsx文件,但是要将所有的HSSF开头的对象改为XSSF,文件后缀名改为.xlsx

/**
     * 
     * @param request
     * @param response
     * @param label 列名
     * @param list 数据
     * @param fileName 文件名称
     */
    public static void downLoadExcel(HttpServletRequest request, HttpServletResponse response, List<String> label, List<Map> list, String fileName){
        HSSFWorkbook workbook = null;

        OutputStream fos = null;
        try {
            workbook = new HSSFWorkbook();
            response.setContentType("octets/stream");

            //解决中文名乱码
            response.setContentType("application/octet-stream;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String(fileName.getBytes(),"iso-8859-1") + ".xls");
            fos = response.getOutputStream();

            HSSFSheet sheet = workbook.createSheet();//创建sheet页
            // 在索引0的位置创建行(最顶端的行)
            HSSFRow row1 = sheet.createRow((short) 0);
            HSSFCell cell1 = null;
            int columnNum = label.size();
            // 将列头设置到sheet的单元格中
            for (int n = 0; n < label.size(); n++) {
                // 创建列头对应个数的单元格
                cell1 = row1.createCell(n);
//                // 设置列头单元格的数据类型
//                cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
                // 设置列头单元格的值
                cell1.setCellValue(label.get(n));
            }

            for (int i = 0; i < list.size(); i++) {

                Map<String, String> map = list.get(i);
                HSSFRow row = sheet.createRow(i + 1);
                Object[] values = map.values().toArray();


                for (int j = 0; j < values.length; j++) {
                    HSSFCell cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
                    cell.setCellValue(values[j].toString());
                    //单元格设置超链接参照上面设置超链接代码
                    //..
                }
            }

            // 将workbook对象输出到文件test.xls
            workbook.write(fos);
            if (workbook != null) {
                workbook.write(response.getOutputStream());
            }
        } catch (Exception e) {
            System.out.println("数据导出失败");
        } finally {
            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

你可能感兴趣的:(poi,poi,excel)