小编典典

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

selenium

我正在尝试在任何.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工作区以外的任何位置。


阅读 413

收藏
2020-06-26

共1个答案

小编典典

终于,我完成了这项工作。感谢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中显示异常,这可能是一个错误。

2020-06-26