Poi 创建带有超链接单元格的 excel?

作者站长头像
站长
· 阅读数 5

使用poi导出excel 将同一个单元格内的多个网址变成对应的超链接

回复
1个回答
avatar
test
2024-07-09

更新

先来在 excel 中看一个单元格能不能添加多个超链接: multiple-hyperlinks-in-one-cell

答案很明显是不能,这不是 poi 的问题,excel 本身就没有这种规则。

但是从这里可以了解到有迂回的方法。

  1. Click Insert in the ribbon, and then click Shape, then you can select a rectangle shape
  2. Drawing a rectangle in the text that you want to insert hyperlink. And the rectangle will shade the text. See screenshot
  3. hen click the rectangle and right-click, and choose the Format Shape from the menu, and then a Format Shape dialog box will pop out. Click Fill in the left pane, and check No fill in the right pane. See screenshot
  4. Go on clicking Line Color in the left pane, and check No line in the right pane
  5. Then click Close button. And the rectangle has been changed transparently. See screenshot
  6. Put the cursor at the transparent rectangle, and right-click, choose Hyperlink from the menu, and then you can specify the file or enter the address to be hyperlinked

翻译过来的大致意思就是:增加一个透明的矩形放置于单元格之上,并设置超链接。

那么怎么用 poi 做到这一点呢?

这里给了方法。

但是这个我看到这个方法并没有设置矩形为透明的代码,也就是说这一部分需要你自己去研究了。

如果你能够想到这个方案接下来面临的问题,并且还有兴趣的话,可以告诉我继续帮你找到方法,否则就放弃吧。

接下来还有几个问题:

  1. 你需要调整单元格的大小
  2. 需要将矩形放置到合适的位置
  3. 位置计算将会非常困难,因为涉及到字体大小,文字的动态改变,难,但不是不可以。

最后我认为还有更简单的方式,直接放网址进去,都能够识别网址,直接点击,但是不能有别名。answer image


原答案

org.apache.poi.ss.usermodel.Cell 方法 setHyperlink

fun main() {
    val url = "https://segmentfault.com/q/1010000043471701"

    XSSFWorkbook().use { workbook ->
        FileOutputStream("test.xlsx").use { fileout ->
            val sheet: Sheet = workbook.createSheet()
            val link: Hyperlink = workbook.creationHelper.createHyperlink(HyperlinkType.URL)
            link.address = url
            val row: Row = sheet.createRow(0)
            val cell: Cell = row.createCell(0)
            val cellText = "springboot导出excel?"
            cell.setCellValue(cellText)
            cell.hyperlink = link
            sheet.setColumnWidth(0, cellText.length * 256)
            workbook.write(fileout)
        }
    }
}

来源。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容