我正在尝试在.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工作区以外的任何位置。
答案 0 :(得分: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();
}
}
我遇到的主要问题与网址有关。如果我使用“\”它显示illegalArgumentException,而用“/”替换它正常工作。我不知道确切的原因但是如果
FileAddress=FileAddress.replace("\\", "/");
被评论......它显示非法参数异常。所以,如果URL是
<强> d:\蚀\工作空间\ TestApp \截图\ TestResult中\ Test.png 强>
将显示illegalArgumentException。但是如果用“/”代替“\”来制作它 的 d:/eclipse/workspace/TestApp/Screenshot/TestResult/Test.png 强>
它运作正常。这两个URL都是正确的,并在浏览器中打开相同的文件,甚至在excel文件中手动使用超链接相同的文件,其工作正常。我不知道为什么它在Apache POI中显示异常,可能是一个可能的Bug。
答案 1 :(得分:-1)
public static String takeScreenShot(XSSFRow wrow, XSSFCell cell,String fileName)
{
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
fileName = fileName + dtf.format(now);
fileName=fileName.replace(":","");
File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
String screen_path;
ReadConfigProperty file = new ReadConfigProperty();
FileUtils.copyFile(src, new File("Screenshot\\" + fileName + ".jpg"));
screen_path= file.reportFilePath() + fileName + ".jpg";
screen_path= "file:///"+screen_path;
cell = wrow.createCell(7);
//cell.setCellValue(screen_path);
XSSFWorkbook wb=cell.getRow().getSheet().getWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
XSSFCellStyle hlink_style = wb.createCellStyle();
XSSFFont 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);
screen_path=screen_path.replace("\\", "/");
hp.setAddress(screen_path);
cell.setHyperlink((org.apache.poi.ss.usermodel.Hyperlink) hp);
cell.setCellStyle(hlink_style);
return screen_path;
}catch (Exception e) {
e.printStackTrace();
}
return fileName;
}