Я пытаюсь создать гиперссылку на файл с использованием APACHE POI XSSF с использованием относительного пути. При открытии файла .xlsx, созданного с помощью Microsft Excel, относительный путь изменяется, и он плохо связан. Microsoft Excel добавляет некоторые «../../» перед дорожкой. Я пытаюсь открыть его с помощью OpenOffice, и он работает нормально. Также я попробовал его с HSSF, и он работает как в Microsoft Excel, так и в OpenOffice. Любая идея, почему это происходит? Это пример кода:Apache POI Относительная гиперссылка файла
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:[email protected]");
/* 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();
}
}
Apache POI версии 3.9 и Micrsoft Excel 2003 – ProgramadorJunior
это http://stackoverflow.com/a/17383431/624003 может быть полезно. – Sankumarsingh
Я не получаю исключения из apache POI. Моя ссылка кажется ОК. Он работает, если я открываю его с помощью OpenOffice. Он работает, если я использую HSSF вместо XSSF. Но при использовании XSSF и Microsoft Excel добавьте несколько точек перед относительным путем. Это путь, который я указываю для гиперссылки в коде -> 'Encuesta% 20de% 20bienvenida/E18' И это путь, который я вижу, консультируясь с гиперссылкой в Microsoft Excel -> '../../ ../../../Encuesta%20de%20bienvenida/E18 ' – ProgramadorJunior