У меня есть строка, подобная
String uriString = "#'Tab1 Tab2'!A8";
URI uri = new URI(uriString);
Это не удается, так как это неправильно сформированный URI (есть пробел). Поэтому я изменил на
String uriString = "#'Tab1%20Tab2'!A8";
URI uri = new URI(uriString);
Это кодируется правильно, но фрагмент становится "Tab1% 20Tab2"! A8 "
Затем в Excel ссылка (, прикрепленная к изображению ) указывает на "Tab1% 20Tab2 '! A8", который не существует.
Я попытался изменить конструктор на
URI uri = new URI(null,null,uriString,null,null)
В результате теперь в Excel ссылка "% 23'Tab1 Tab2 '! A8", который сейчас не работает, потому что теперь конвертирован хэштег. Это сводит меня с ума.
Вот код, который строит URI и устанавливает ссылку
String hyperlinkAddress = "#'"+destinationTab + "'!" + destinationCell + "";
hyperlinkAddress = hyperlinkAddress.replaceAll(" ", "%20");
URI hyperLinkUri;
try {
hyperLinkUri = new URI(hyperlinkAddress);
PackageRelationship packagerelationship = drawing.getPackagePart().addRelationship(hyperLinkUri,TargetMode.EXTERNAL, PackageRelationshipTypes.HYPERLINK_PART);
String rid = packagerelationship.getId();
if (cthyperlink == null) cthyperlink = ctnonvisualdrawingprops.addNewHlinkClick();
cthyperlink.setId(rid);
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Как мне добиться, чтобы в гиперссылке пространство было просто пробелом, а # не преобразуется в% 23?
ОБНОВЛЕНИЕ
По-видимому, в Office 365 отображается% 23, а в Office 2013 вместо него указан правильный файл имени
ОБНОВЛЕНИЕ Так выглядит одна из гиперссылок на рисунке xml при экспорте в Excel.
<Relationship Id="rId28" Target="%23Coverage%20Summary%20(Pool)!A8" TargetMode="External" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"/>
Однако при наведении на ссылку в Excel ссылка отображается как
file:///C:\Users\myname\download\%23Coverage Summary (Pool)!A8
Итак, пробелы, где правильно заменены, но не фрагмент # URI. В Office 2013, тот же файл,% 23 заменяется именем файла, правильно открывающим гиперссылку