当前位置: 首页 > 知识库问答 >
问题:

Apache POI相关文件超链接

解博明
2023-03-14

我试图使用APACHE POI XSSF使用相对路径创建到文件的超链接。当打开用Microsft Excel创建的。xlsx文件时,相对路径被修改,并且没有很好地链接。Microsoft Excel在路径前面添加一些“../../”。我试着用OpenOffice打开它,它工作得很好。此外,我用HSSF尝试了它,它在Microsoft Excel和OpenOffice中都工作。知道为什么会这样吗?这是一个示例代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.poi.hssf.usermodel.HSSFHyperlink;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelHyperlinks {
 public static void main(String[] args) throws Exception{
     /* Create Workbook and Worksheet */
     XSSFWorkbook my_workbook = new XSSFWorkbook();
     XSSFSheet my_sheet = my_workbook.createSheet("Cell Hyperlink");
     CreationHelper createHelper = my_workbook.getCreationHelper();
     Hyperlink  url_link=createHelper.createHyperlink(HSSFHyperlink.LINK_URL);
     Hyperlink  file_link=createHelper.createHyperlink(HSSFHyperlink.LINK_FILE);
     Hyperlink  email_link=createHelper.createHyperlink(HSSFHyperlink.LINK_EMAIL);

     /* Define the data for these hyperlinks */
     url_link.setAddress("http://www.google.com");
     try {
         file_link.setAddress((URLEncoder.encode("Encuesta de bienvenida","UTF-8")+"/"+"E18").replace("\\", "/").replace("+","%20"));
     } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
     }
     System.out.println("addres--> " + file_link.getAddress());
     email_link.setAddress("mailto:test@gmail.com");

     /* Attach these links to cells */
     Row row = my_sheet.createRow(0);                
     Cell cell = row.createCell(0);
     cell.setCellValue("Take me to Google");         
     cell.setHyperlink(url_link);

     row = my_sheet.createRow(1);            
     cell = row.createCell(1);
     cell.setCellValue("Click to Open the file");            
     cell.setHyperlink(file_link);

     row = my_sheet.createRow(2);            
     cell = row.createCell(2);
     cell.setCellValue("Send an Email");             
     cell.setHyperlink(email_link);

     /* Write changes to the workbook */
     FileOutputStream out = new FileOutputStream(new File("C:/cell_hyperlink_example.xlsx"));
     my_workbook.write(out);
     out.close();
 }

}

共有1个答案

柳翼
2023-03-14

这似乎不是一个问题。excel的特性是,无论您给出的路径是什么,它都会创建一个从excel位置到超链接文件位置的相对路径。

每个“../”代表一个向上的目录。如果以这种方式从当前excel工作表位置移动,您将到达超链接文件目录。

例如,如果excel工作表位于例如C:\folder1\folder2\exceldir\test.xls中,而超链接文件的目录是例如C:\folder1\folder3\imagedir\test.jpg

excel中标记的相对路径如下所示

../../folder3/imagedir/test.jpg

对于第一个../,我们将从test.xls移动到exceldir,对于第二个../,我们将从exceldir移动到folder2,现在同一个目录包含folder3,所以它将从这里继续到test.jpg

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

  •  KAG 存档保存的位置可以在 Config.tjs 的 saveDataLocation 处设定。可以和吉里吉里可执行文件位于同一目录、或者保存在(多用户环境下的) 用户文件夹。两种情况下,假如指定的目录下不存在存档子文件夹,都会自动创建。 ;saveDataLocation="savedata";  像这样设定的话,就会简单的在吉里吉里可执行文件所在目录下的 savedata 文件夹里保存档案

  • 行内式 格式为 [link text](URL 'title text')。 ① 普通链接: [Google](http://www.google.com/) Google ② 指向本地文件的链接: [icon.png](./images/icon.png) icon.png ③ 包含 'title' 的链接: [Google](http://www.google.com/ "Google")

  • 主要有以下几种方式: 行内超链接 语法`链接文字 <URL>`_ 分开的超链接 用到链接的地方`链接文字`_, 定义链接的地方 .. _链接文字: URL 链接到指定文档 下载链接 外链接 访问 我的博客 ,可以了解更多信息。 访问 我的博客,可以了解更多信息。 我的博客地址是: https://www.wenjiangs.com ,以了解更多信息。 这篇文章参考的是:reStructuredTe

  • 这个是本主题相关的文档和书名: JSSE API 文档 javax.net javax.net.ssl javax.security.cert Java SE Security Java SE Security 文档主页 Java SE Security 主页 Java 教程中的 The Security Features in Java SE Java PKI 编程者指南 Java 2 Plat

  • 本文向大家介绍Linux网络相关配置文件,包括了Linux网络相关配置文件的使用技巧和注意事项,需要的朋友参考一下 Linux网络相关配置文件 一 网络参数与配置文件对应关系 所需要的网络参数 主要配置文件命名 重要参数 IP Netmask DHCP Gateway等 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=网卡名称 BOOTPROTO=