如何删除poi 3.8中的超链接?

时间:2013-03-29 07:18:44

标签: apache-poi

我在阅读包含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]

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

1 个答案:

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