我正在尝试在任何.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/Screenshot/TestResult/Test.png
它工作正常。这两个URL都是正确的,并且可以在浏览器中打开相同的文件,甚至可以在excel文件中手动使用超链接来打开相同的文件,其工作正常。我不知道为什么它在Apache POI中显示异常,这可能是一个错误。