我在读取包含 poi 中超链接文本的 Excel 文件时遇到一些问题。
数据是这样的(excel文件):
|1| type | category | job_type | position | name | email
|2|测试|开发商|兼职 |经理 |洪 | asdf##@dsaf.com(超级链接)
|3|测试|开发商|兼职 |经理 |阿德|[电子邮件受保护] /cdn-cgi/l/email-protection(超级链接)
|4|测试|开发商|兼职 |经理 |阿德|啊啊啊啊(非超链接)
要创建工作簿对象,我使用WorkbookFactory.create(InputStream inp)
method.
代码在这里:
public POIExcelImport(String name, InputStream inputStream) throws ExcelImportException {
super(name, null);
try {
logger.debug("before work : {}", this.workbook);
this.workbook = WorkbookFactory.create(inputStream);// exception
} catch (InvalidFormatException e) {
throw new ExcelImportException(e);
} catch (IOException e) {
throw new ExcelImportException(e);
}
if(XSSFWorkbook.class.isAssignableFrom(workbook.getClass()))
this.type = ExcelFileType.XLSX;
else
this.type = ExcelFileType.XLS;
}
当我打电话时create
方法,抛出异常。
java.lang.IllegalStateException: The hyperlink for cell F2 references relation rId1, but that didn't exist!
at org.apache.poi.xssf.usermodel.XSSFHyperlink.<init>(XSSFHyperlink.java:71) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.xssf.usermodel.XSSFSheet.initHyperlinks(XSSFSheet.java:204) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:157) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:129) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:269) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:183) ~[poi-ooxml-3.8.jar:3.8]
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73) ~[poi-ooxml-3.8.jar:3.8]
at dreaminfra.ipams.common.excel.poi.POIExcelImport.<init>(POIExcelImport.java:49) ~[ipams-core-1.0.0.jar:na]
我想删除超链接,但只有创建超链接的问题。
我没有想法,有什么想法吗?
我发现这适用于我的系统:
ICell oCell = workbook.GetSheetAt(0).GetRow(0).GetCell(0);
IHyperlink oLink = oCell.Hyperlink;
oLink.setFirstRow(0);
oLink.setLastRow(0);
oLink.setFirstColumn(0);
oLink.setLastColumn(0);
oLink.setLabel(null);
oLink.setAddress("");
注意:我主要使用 NPOI(C# 版本)而不是 POI(Java 版本),但它似乎工作相同。另外,请务必保留.setAddress()
last.
EDIT:不幸的是,这似乎会导致由于某种原因 Excel 无法保存文档。 (excel 在保存时检测到损坏)所以它实际上在实践中不起作用,看起来有人必须为此修补 NPOI 存储库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)