1个回答
test
2024-07-09
更新
先来在 excel 中看一个单元格能不能添加多个超链接: multiple-hyperlinks-in-one-cell。
答案很明显是不能,这不是 poi 的问题,excel 本身就没有这种规则。
但是从这里可以了解到有迂回的方法。
- Click Insert in the ribbon, and then click Shape, then you can select a rectangle shape
- Drawing a rectangle in the text that you want to insert hyperlink. And the rectangle will shade the text. See screenshot
- 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
- Go on clicking Line Color in the left pane, and check No line in the right pane
- Then click Close button. And the rectangle has been changed transparently. See screenshot
- 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
做到这一点呢?
这里给了方法。
但是这个我看到这个方法并没有设置矩形为透明的代码,也就是说这一部分需要你自己去研究了。
如果你能够想到这个方案接下来面临的问题,并且还有兴趣的话,可以告诉我继续帮你找到方法,否则就放弃吧。
接下来还有几个问题:
- 你需要调整单元格的大小
- 需要将矩形放置到合适的位置
- 位置计算将会非常困难,因为涉及到字体大小,文字的动态改变,难,但不是不可以。
最后我认为还有更简单的方式,直接放网址进去,都能够识别网址,直接点击,但是不能有别名。
原答案
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)
}
}
}
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容