当前位置: 首页 > 面试题库 >

使用APACHE POI XSSF添加链接文件不接受目录地址并显示java.net.URISyntaxException

史弘致
2023-03-14
问题内容

我正在尝试在任何.xlsx文件的单元格内容中超链接.png文件。以下是代码的一部分,它显示了java.net.URISyntaxException异常(似乎是由于地址中使用了斜线)。但是,更改link.setAddress(“
test.png”)不会显示任何错误,但不能解决我的目的。请帮我。

    public static void main(String[]args) throws Exception{
       XSSFWorkbook wb = new XSSFWorkbook();
       CreationHelper createHelper = wb.getCreationHelper();
       CellStyle hlink_style = wb.createCellStyle();
       Font hlink_font = wb.createFont();
       hlink_font.setUnderline(Font.U_SINGLE);
       hlink_font.setColor(IndexedColors.BLUE.getIndex());
       hlink_style.setFont(hlink_font);
       XSSFSheet sheet = wb.createSheet("Hyperlinks");
        XSSFCell cell = sheet.createRow(1).createCell((short)0);
       cell.setCellValue("File Link");
       Hyperlink link = createHelper.createHyperlink(Hyperlink.LINK_FILE);
       link.setAddress("H:\\Selenium\\XL\\src\\santosh\\xlwork\\test.png");
       cell.setHyperlink(link);
       cell.setCellStyle(hlink_style);
       FileOutputStream out = new FileOutputStream("hyperlinks.xlsx");
       wb.write(out);
       out.close();
    }

最终,我需要做的是将屏幕快照与任何单元格进行超链接。屏幕快照目录将在Eclipse工作区以外的任何位置。


问题答案:

终于,我完成了这项工作。感谢Gagravarr。给了我一个好主意。

boolean isDirCreated = false;//to create Screenshot directory just once

//Create Screenshot Directory.
public static void createDir(String ScreenshotDirAddress){
    if(!isDirCreated){
       File file= new File(ScreenshotDirAddress);
       if (!file.exists())
            file.mkdirs();
    isDirCreated=true;
    }
}


//hyperlink screenshot
public static void hyperlinkScreenshot(XSSFCell cell, String FileAddress){
    XSSFWorkbook wb=cell.getRow().getSheet().getWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();
    CellStyle hlink_style = wb.createCellStyle();
    Font hlink_font = wb.createFont();
    hlink_font.setUnderline(Font.U_SINGLE);
    hlink_font.setColor(IndexedColors.BLUE.getIndex());
    hlink_style.setFont(hlink_font);
    Hyperlink hp = createHelper.createHyperlink(Hyperlink.LINK_FILE);
    FileAddress=FileAddress.replace("\\", "/");
    hp.setAddress(FileAddress);
    cell.setHyperlink(hp);
    cell.setCellStyle(hlink_style);
}

//take screenshot
public static void takeScreenShot(WebDriver driver, String screenshotName, XSSFCell cell){
    createDir();
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        String FullAddress=System.getProperty("user.dir")+"/"+ScreenshotDirAddress+"/"+screenshotName+".png";
        FileUtils.copyFile(scrFile, new File(FullAddress));
        hyperlinkScreenshot(cell, FullAddress);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我遇到的主要问题与URL有关。如果我使用“ \”,则显示“ lawrArgumentException”,而将其替换为“
/”,则工作正常。我不知道确切原因,但是如果

        FileAddress=FileAddress.replace("\\", "/");

被评论…显示非法参数异常。所以如果URL是

D:\ eclipse \ workspace \ TestApp \ Screenshot \ TestResult \ Test.png

将显示非法的ArgumentException。但是,如果将“ \”替换为“ /”以使其成为
D:/eclipse/workspace/TestApp/Scr​​eenshot/TestResult/Test.png

它工作正常。这两个URL都是正确的,并且可以在浏览器中打开相同的文件,甚至可以在excel文件中手动使用超链接来打开相同的文件,其工作正常。我不知道为什么它在Apache
POI中显示异常,这可能是一个错误。



 类似资料:
  • 有什么想法如何添加一个超链接在一个网页上使用这个库? 我发现了这个问题:如何使用pdfbox在内容中设置超链接,但这不起作用。 我只想在pdf文件的第一页添加一个超链接。 我更喜欢在页面底部添加以URL为中心的超链接。但目前任何建议都有帮助

  • 但我会重复两次几乎相同的比较,这看起来更糟糕。你们怎么处理?

  • 链接地址/虚地址/物理地址/加载地址以及edata/end/text的含义 链接脚本简介 ucore kernel各个部分由组成kernel的各个.o或.a文件构成,且各个部分在内存中地址位置由ld工具根据kernel.ld链接脚本(linker script)来设定。ld工具使用命令-T指定链接脚本。链接脚本主要用于规定如何把输入文件(各个.o或.a文件)内的section放入输出文件(lab2

  • 我得到了一些帮助,所以我有一些代码可以使用,但我似乎无法理解这一点,所以,我正在寻求更多的帮助。我正在处理的任务是在本地网页上显示html文件作为链接,并自动更新,因为每天都会有一个新文件夹(插入到同一根文件夹)和一个新文件。 我的问题是访问文件夹和选择的html文件这总是被称为main.html.文件夹有一个不同的名称因为它有一个日期在名称但html文件总是被称为main.html.我想更新每日

  • 运行播放后,当我卷曲服务器时,我看不到index.html文件中的内容。有人能帮我玩游戏吗? 名称:安装webserver并链接到文件夹主机:prod任务: 名称:创建目录文件:路径:/web_hosting状态:目录设置类型:httpd_sys_content_t模式:0775 名称:install yum:name:httpd state:present 名称:配置服务服务:名称:httpd状

  • 问题内容: 我正在制作一个在Linux shell中运行的程序,该程序接受一个参数(目录),并显示目录中的所有文件及其类型。 输出应如下所示: 如果没有参数,它将使用当前目录。这是我的代码: 由于某种原因未显示文件类型。我不太确定该怎么办,有什么建议吗? 问题答案: 是一项速度优化,可在支持时节省通话费用。 正如(3)手册页所指出的那样,并非所有文件系统都在该字段中返回真实信息(通常是因为读取索引