gpt4 book ai didi

java - Apache POI 相对文件超链接

转载 作者:行者123 更新时间:2023-12-01 14:10:04 27 4
gpt4 key购买 nike

我正在尝试使用 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();
}

}

最佳答案

这似乎不是一个问题。 Excel 的功能是,无论您提供什么路径,它都会创建从 Excel 位置到超链接文件位置的相对路径。

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

例如,如果您的 Excel 工作表位于 c:\folder1\folder2\excelDir\test.xls 中,并且超链接的文件的目录为 c:\folder1\文件夹3\imageDir\test.jpg

在Excel中标记的相对路径就像

../../folder3/imageDir/test.jpg

对于第一个../,我们将从test.xls移动到excelDir,对于第二个 ../,我们将从 excelDir 移动到 folder2现在同一目录包含 folder3,因此将从此处继续到 test.jpg

关于java - Apache POI 相对文件超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com