Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaApache中添加超链接的空间地址_Java_Apache_Apache Poi - Fatal编程技术网

如何在JavaApache中添加超链接的空间地址

如何在JavaApache中添加超链接的空间地址,java,apache,apache-poi,Java,Apache,Apache Poi,我曾使用Java在excel中设置超链接列,但文件名在文件夹名中包含空格(例如:员工详细信息),它将返回以下错误。我怀疑如何在文件夹中添加带有空格名的超链接setAddress File file=new File("/home/suser/Desktop/pathfile/Employee Details /1.pdf") Hyperlink fileLink = createHelper.createHyperlink(Hyperlink.LINK_FILE); fileLink.setAd

我曾使用Java在excel中设置超链接列,但文件名在文件夹名中包含空格(例如:
员工详细信息
),它将返回以下错误。我怀疑如何在文件夹中添加带有空格名的超链接setAddress

File file=new File("/home/suser/Desktop/pathfile/Employee Details /1.pdf")
Hyperlink fileLink = createHelper.createHyperlink(Hyperlink.LINK_FILE);
fileLink.setAddress(file.getAbsolutePath());
错误:

Exception in thread "main" java.lang.IllegalArgumentException: Address of hyperlink must be a valid URI
    at org.apache.poi.xssf.usermodel.XSSFHyperlink.validate(XSSFHyperlink.java:212)
    at org.apache.poi.xssf.usermodel.XSSFHyperlink.setAddress(XSSFHyperlink.java:194)
    at com.example.excelapp.ExcelApp.main(ExcelApp.java:83)
Caused by: java.net.URISyntaxException: Illegal character in path at index 27: /home/user/Desktop/class Name/ExcelApp/
'/home/user/Desktop/pathfile/Employee Details /1.pdf'
    at java.net.URI$Parser.fail(URI.java:2810)
    at java.net.URI$Parser.checkChars(URI.java:2983)
    at java.net.URI$Parser.parseHierarchical(URI.java:3067)
    at java.net.URI$Parser.parse(URI.java:3025)
    at java.net.URI.<init>(URI.java:577)
    at org.apache.poi.xssf.usermodel.XSSFHyperlink.validate(XSSFHyperlink.java:210)
线程“main”java.lang.IllegalArgumentException中的异常:超链接的地址必须是有效的URI 位于org.apache.poi.xssf.usermodel.XSSFHyperlink.validate(XSSFHyperlink.java:212) 位于org.apache.poi.xssf.usermodel.XSSFHyperlink.setAddress(XSSFHyperlink.java:194) 位于com.example.excelapp.excelapp.main(excelapp.java:83) 原因:java.net.URISyntaxException:索引27处路径中的非法字符:/home/user/Desktop/class Name/ExcelApp/ “/home/user/Desktop/pathfile/Employee Details/1.pdf” 位于java.net.URI$Parser.fail(URI.java:2810) 位于java.net.URI$Parser.checkChars(URI.java:2983) 位于java.net.URI$Parser.parseHierarchy(URI.java:3067) 位于java.net.URI$Parser.parse(URI.java:3025) 位于java.net.URI。(URI.java:577) 位于org.apache.poi.xssf.usermodel.XSSFHyperlink.validate(XSSFHyperlink.java:210)
即使链接到文件,超链接也始终链接到URI。并且URI必须是URI编码的。因此,将对空间进行编码
%20

知道这一点,如果涉及到超链接,我将始终使用URI

工作示例:

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;

import java.io.*;
import java.io.IOException;

class ExcelCellHyperlink {

 public static void main(String[] args) {
  try {

   Workbook wb = new XSSFWorkbook();

   Sheet sheet = wb.createSheet();

   File filePDF = new File("/home/axel/Dokumente/JAVA/poi/poi-3.14/Employee Details /1.pdf");
System.out.println(filePDF.toURI().toString());

   //create a cell with a link to absolute file URI
   Row row = sheet.createRow(0);
   Cell cell = row.createCell(0);
   Hyperlink fileLink = wb.getCreationHelper().createHyperlink(Hyperlink.LINK_FILE);
   fileLink.setAddress(filePDF.toURI().toString());
   cell.setCellValue("link to absolute file URI");
   cell.setHyperlink(fileLink);

   //create a file with the file path for this Excel file
   File thisExcelFilePath = new File("/home/axel/Dokumente/JAVA/poi/poi-3.14/");
System.out.println(thisExcelFilePath.toURI().toString());
   //create a URI to the PDF file relative to the path of this Excel file
   String relativeURI = thisExcelFilePath.toURI().relativize(filePDF.toURI()).toString();
System.out.println(relativeURI);

   //create a cell with a link to relative file URI
   row = sheet.createRow(2);
   cell = row.createCell(0);
   fileLink = wb.getCreationHelper().createHyperlink(Hyperlink.LINK_FILE);
   fileLink.setAddress(relativeURI);
   cell.setCellValue("link to relative file URI");
   cell.setHyperlink(fileLink);

   FileOutputStream fileOut = new FileOutputStream(thisExcelFilePath.getPath() + "/ExcelCellHyperlink.xlsx");
   wb.write(fileOut);
   fileOut.close();

  } catch (IOException ioex) {
    ioex.printStackTrace();
  }
 }
}
此示例还显示了如何创建相对于此Excel文件路径的超链接URI。这更实际,因为绝对路径高度依赖于是否可以从Excel应用程序访问它们