4

我在阅读包含 poi 中超链接文本的 excel 文件时遇到了一些问题。

数据是这样的(excel文件):
|1| 类型| 类别| 工作类型| 职位| 姓名| 电子邮件
|2| 测试 | 开发商 | 兼职 | 经理 | 洪 | asdf##@dsaf.com(超链接
|3| 测试 | 开发商 | 兼职 | 经理 | 阿斯德| test@mail.com(超链接)
|4| 测试 | 开发商 | 兼职 | 经理 | 阿斯德| 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]

我想删除超链接,但只有创建超链接的问题。
我不知道,有什么想法吗?

4

1 回答 1

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存储库。

于 2014-02-12T19:05:06.637 回答