Java 中如何给 Excel 的单元格设置超链接?

Java 中如何给 Excel 的单元格设置超链接
我想导入一个excel文件,并且通过java代码给某个单元格设置超链接(业务需求)。请问大家有什么思路没

阅读 1.3k
2 个回答

你如果使用poi 组件来写入Excel 直接有方法调用,例如

XSSFRow row3 = sheet.createRow(5);
        XSSFCell cell3 = row3.createCell(0);
        cell3.setCellValue("链接到百度网站");
        XSSFHyperlink hyperlink2 = creationHelper.createHyperlink(HyperlinkType.URL);
        hyperlink2.setAddress("https://www.baidu.com/");
        cell3.setHyperlink(hyperlink2);
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;

public class StyleStudy {

    public static void main(String[] args) {
        FileOutputStream out = null;
        XSSFWorkbook xSSFWorkbook = null;
        try {
            xSSFWorkbook = new XSSFWorkbook();
            margeCell(xSSFWorkbook);
            out = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\test\\study\\"+System.currentTimeMillis()+".xlsx"));
            xSSFWorkbook.write(out);
            System.out.println("EXCEL文件已生成=========");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 单元格设置
     * @param workbook
     */
    private static void margeCell(XSSFWorkbook workbook) {
        XSSFSheet sheet = workbook.createSheet();

        // 合并单元格,1到4行,1到4列进行合并
        XSSFRow row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("合并单元格");
        sheet.addMergedRegion(new CellRangeAddress(0,3,0,3));

        /**
         * 设置超链接
         */
        XSSFRow row2 = sheet.createRow(4);
        XSSFCell cell2 = row2.createCell(0);
        cell2.setCellValue("另一个sheet页的指定位置");
        XSSFCreationHelper creationHelper = workbook.getCreationHelper();
        XSSFHyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.DOCUMENT);
        // 链接到此Excel的任何地方,以“!”分割,前面表示sheet的名字,没有则本sheet页进行跳转
        hyperlink.setAddress("跳转sheet页!A10");
        cell2.setHyperlink(hyperlink);
        // 创建第二个sheet页提供跳转
        XSSFSheet sheet1 = workbook.createSheet("跳转sheet页");
        sheet1.createRow(9).createCell(0).setCellValue("跳转到这里");

        // 链接到指定网站
        XSSFRow row3 = sheet.createRow(5);
        XSSFCell cell3 = row3.createCell(0);
        cell3.setCellValue("链接到百度网站");
        XSSFHyperlink hyperlink2 = creationHelper.createHyperlink(HyperlinkType.URL);
        hyperlink2.setAddress("https://www.baidu.com/");
        cell3.setHyperlink(hyperlink2);

        // 打开指定文件
        XSSFRow row4 = sheet.createRow(5);
        XSSFCell cell4 = row4.createCell(0);
        cell4.setCellValue("链接到指定文件");
        XSSFHyperlink hyperlink3 = creationHelper.createHyperlink(HyperlinkType.FILE);
        File file = new File("C:\\Users\\Administrator\\Desktop\\test\\4、图片文件\\01.jpg");
        String filePath = file.toURI().toString();
        System.out.println("文件路径:"+filePath);
        hyperlink3.setAddress(filePath);
        cell4.setHyperlink(hyperlink3);

    }

一般Excel中的超链接有以下几种功能:

  1. 链接外部文件
  2. 添加网页链接
  3. 单元格跳转,即定位链接
  4. 发送邮件
public void AddHyperLink() {
    Workbook wb = new Workbook();
    IWorksheet sheet = wb.getActiveSheet();
    // 添加外部文件链接
    sheet.getRange("A1:B2").getHyperlinks().add(sheet.getRange("A1"),
            "C:/SampleFile.xlsx",
            null, "链接至SampleFile.xlsx文件.", "SampleFile.xlsx");
    // 添加网页链接
    sheet.getRange("A3:B4").getHyperlinks().add(sheet.getRange("A3"),
            "https://www.baidu.com/", null,
            "打开百度.", "百度");
    // 添加定位链接
    sheet.getRange("A5:B6").getHyperlinks().add(sheet.getRange("A5"),
            null, "Sheet1!$C$3:$E$4", "跳转至 sheet1 C3:E4", "");
    // 添加邮件链接
    sheet.getRange("A7:B8").getHyperlinks().add(sheet.getRange("A7"),
            "mailto:example@example.com", null,
            "发送邮件", "发送邮件");
    wb.save("output/hyperlinks.xlsx");
}

参考文档:https://demo.grapecity.com.cn/documents-api-excel-java/demos/...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题