我在阅读包含poi中的超链接文本的excel文件时遇到一些问题。
数据就像那样(excel文件):
| 1 | 输入 | 类别 | job_type | 职位 | 名称 | 电子邮件
| 2 |测试|开发者|兼职|经理|香港| ASDF ## @ dsaf.com(超级链接)
| 3 |测试|开发者|兼职|经理| asde | test@mail.com(超级链接)
| 4 |测试|开发者|兼职|经理| asde | AAAAAAA(非超级链接)
要创建工作簿对象,我使用WorkbookFactory.create(InputStream inp)
方法
代码在这里:
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]
我想删除超链接,但只有创建超链接的问题 我不知道,有什么想法吗?
答案 0 :(得分:0)
我发现这可以在我的系统上运行:
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()
最后一次。
编辑:不幸的是,这似乎会导致Excel出于某种原因无法保存的文档。 (excel在保存时检测到损坏)所以它实际上并没有在实践中工作,看起来有人必须修补这个NPOI存储库。