Author: fanningpj
Date: Sat Apr 2 18:55:56 2022
New Revision: 1899521
URL: http://svn.apache.org/viewvc?rev=1899521&view=rev
Log:
[bug-65993] support copying hssf hyperlinks to xssf and respect full cell range
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java?rev=1899521&r1=1899520&r2=1899521&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
Sat Apr 2 18:55:56 2022
@@ -121,7 +121,11 @@ public class XSSFHyperlink implements Hy
_location = other.getAddress();
_externalRel = null;
_ctHyperlink = CTHyperlink.Factory.newInstance();
- setCellReference(new CellReference(other.getFirstRow(),
other.getFirstColumn()));
+ _ctHyperlink.setDisplay(other.getLabel());
+ setFirstColumn(other.getFirstColumn());
+ setLastColumn(other.getLastColumn());
+ setFirstRow(other.getFirstRow());
+ setLastRow(other.getLastRow());
}
}
/**
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java?rev=1899521&r1=1899520&r2=1899521&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
Sat Apr 2 18:55:56 2022
@@ -209,6 +209,78 @@ public final class TestXSSFHyperlink ext
}
}
+ @Test
+ void testCopyHSSFHyperlink() throws IOException {
+ try (HSSFWorkbook hssfworkbook = new HSSFWorkbook()) {
+ HSSFHyperlink hlink =
hssfworkbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
+ hlink.setAddress("http://poi.apache.org/");
+ hlink.setFirstColumn(3);
+ hlink.setFirstRow(2);
+ hlink.setLastColumn(3);
+ hlink.setLastRow(2);
+ hlink.setLabel("label");
+ XSSFHyperlink xlink = new XSSFHyperlink(hlink);
+
+ assertEquals("http://poi.apache.org/", xlink.getAddress());
+ assertEquals(new CellReference(2, 3), new
CellReference(xlink.getCellRef()));
+ // Are HSSFHyperlink.label and XSSFHyperlink.tooltip the same? If
so, perhaps one of these needs renamed for a consistent Hyperlink interface
+ // assertEquals("label", xlink.getTooltip());
+ }
+ }
+
+ @Test
+ void setHyperlinkOnCellFromHSSF() throws Exception {
+ try (XSSFWorkbook xssfWorkbook = new XSSFWorkbook()) {
+ XSSFSheet xssfSheet = xssfWorkbook.createSheet();
+ XSSFRow xssfRow = xssfSheet.createRow(0);
+ XSSFCell xssfCell = xssfRow.createCell(0);
+ xssfCell.setCellValue("link");
+ HSSFHyperlink hssfHyperlink = new HSSFHyperlink(HyperlinkType.URL)
{
+
+ };
+ hssfHyperlink.setLabel("label");
+ hssfHyperlink.setAddress("https://example.com/index.html#label");
+ hssfHyperlink.setFirstColumn(2);
+ hssfHyperlink.setLastColumn(3);
+ hssfHyperlink.setFirstRow(4);
+ hssfHyperlink.setLastRow(5);
+ xssfCell.setHyperlink(hssfHyperlink);
+ XSSFHyperlink xssfHyperlink = xssfCell.getHyperlink();
+ assertEquals(hssfHyperlink.getType(), xssfHyperlink.getType());
+ assertEquals(hssfHyperlink.getAddress(),
xssfHyperlink.getAddress());
+ assertEquals(hssfHyperlink.getLabel(), xssfHyperlink.getLabel());
+ assertEquals("A1", xssfHyperlink.getCellRef());
+ }
+ }
+
+ @Test
+ void setHyperlinkOnSheetFromHSSF() throws Exception {
+ try (XSSFWorkbook xssfWorkbook = new XSSFWorkbook()) {
+ XSSFSheet xssfSheet = xssfWorkbook.createSheet();
+ XSSFRow xssfRow = xssfSheet.createRow(0);
+ XSSFCell xssfCell = xssfRow.createCell(0);
+ xssfCell.setCellValue("link");
+ HSSFHyperlink hssfHyperlink = new HSSFHyperlink(HyperlinkType.URL)
{
+
+ };
+ hssfHyperlink.setLabel("label");
+ hssfHyperlink.setAddress("https://example.com/index.html#label");
+ hssfHyperlink.setFirstColumn(2);
+ hssfHyperlink.setLastColumn(3);
+ hssfHyperlink.setFirstRow(4);
+ hssfHyperlink.setLastRow(5);
+ XSSFHyperlink xssfHyperlink = new XSSFHyperlink(hssfHyperlink);
+ xssfSheet.addHyperlink(xssfHyperlink);
+ assertEquals(hssfHyperlink.getType(), xssfHyperlink.getType());
+ assertEquals(hssfHyperlink.getAddress(),
xssfHyperlink.getAddress());
+ assertEquals(hssfHyperlink.getLabel(), xssfHyperlink.getLabel());
+ assertEquals(hssfHyperlink.getFirstColumn(),
xssfHyperlink.getFirstColumn());
+ assertEquals(hssfHyperlink.getLastColumn(),
xssfHyperlink.getLastColumn());
+ assertEquals(hssfHyperlink.getFirstRow(),
xssfHyperlink.getFirstRow());
+ assertEquals(hssfHyperlink.getLastRow(),
xssfHyperlink.getLastRow());
+ }
+ }
+
/**
* Only for WithMoreVariousData.xlsx !
*/
@@ -300,26 +372,6 @@ public final class TestXSSFHyperlink ext
return new XSSFHyperlink(link);
}
- @Test
- void testCopyHSSFHyperlink() throws IOException {
- HSSFWorkbook hssfworkbook = new HSSFWorkbook();
- HSSFHyperlink hlink =
hssfworkbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
- hlink.setAddress("http://poi.apache.org/");
- hlink.setFirstColumn(3);
- hlink.setFirstRow(2);
- hlink.setLastColumn(5);
- hlink.setLastRow(6);
- hlink.setLabel("label");
- XSSFHyperlink xlink = new XSSFHyperlink(hlink);
-
- assertEquals("http://poi.apache.org/", xlink.getAddress());
- assertEquals(new CellReference(2, 3), new
CellReference(xlink.getCellRef()));
- // Are HSSFHyperlink.label and XSSFHyperlink.tooltip the same? If so,
perhaps one of these needs renamed for a consistent Hyperlink interface
- // assertEquals("label", xlink.getTooltip());
-
- hssfworkbook.close();
- }
-
/* bug 59775: XSSFHyperlink has wrong type if it contains a location
(CTHyperlink#getLocation)
* URLs with a hash mark (#) are still URL hyperlinks, not document links
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]