aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2014-11-08 13:46:30 +0000
committerNick Burch <nick@apache.org>2014-11-08 13:46:30 +0000
commit9b9b4b8cf47ee1af88c37250a9905fa8b70502a4 (patch)
tree21fd62d57a442c0c245b1b72e9224a12c6643ea6 /src
parentefb42dc897d53e1e93cc5d15dbc853ebaf603f6c (diff)
downloadpoi-9b9b4b8cf47ee1af88c37250a9905fa8b70502a4.tar.gz
poi-9b9b4b8cf47ee1af88c37250a9905fa8b70502a4.zip
Patch from hishidama to add Cell.removeHyperlink(). This closes #13 from github
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1637562 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFCell.java25
-rw-r--r--src/java/org/apache/poi/ss/usermodel/Cell.java5
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java18
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java16
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java18
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java25
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java24
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java21
8 files changed, 148 insertions, 4 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
index c66cdd3d13..e5de299a04 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
@@ -1062,11 +1062,17 @@ public class HSSFCell implements Cell {
}
/**
- * Assign a hyperlink to this cell
+ * Assign a hyperlink to this cell. If the supplied hyperlink is null, the
+ * hyperlink for this cell will be removed.
*
* @param hyperlink hyperlink associated with this cell
*/
public void setHyperlink(Hyperlink hyperlink){
+ if (hyperlink == null) {
+ removeHyperlink();
+ return;
+ }
+
HSSFHyperlink link = (HSSFHyperlink)hyperlink;
link.setFirstRow(_record.getRow());
@@ -1091,6 +1097,23 @@ public class HSSFCell implements Cell {
int eofLoc = records.size() - 1;
records.add( eofLoc, link.record );
}
+
+ /**
+ * Removes the hyperlink for this cell, if there is one.
+ */
+ public void removeHyperlink() {
+ for (Iterator<RecordBase> it = _sheet.getSheet().getRecords().iterator(); it.hasNext();) {
+ RecordBase rec = it.next();
+ if (rec instanceof HyperlinkRecord) {
+ HyperlinkRecord link = (HyperlinkRecord) rec;
+ if (link.getFirstColumn() == _record.getColumn() && link.getFirstRow() == _record.getRow()) {
+ it.remove();
+ return;
+ }
+ }
+ }
+ }
+
/**
* Only valid for formula cells
* @return one of ({@link #CELL_TYPE_NUMERIC}, {@link #CELL_TYPE_STRING},
diff --git a/src/java/org/apache/poi/ss/usermodel/Cell.java b/src/java/org/apache/poi/ss/usermodel/Cell.java
index 528fa2730c..daf289f485 100644
--- a/src/java/org/apache/poi/ss/usermodel/Cell.java
+++ b/src/java/org/apache/poi/ss/usermodel/Cell.java
@@ -381,6 +381,11 @@ public interface Cell {
void setHyperlink(Hyperlink link);
/**
+ * Removes the hyperlink for this cell, if there is one.
+ */
+ void removeHyperlink();
+
+ /**
* Only valid for array formula cells
*
* @return range of the array formula group that the cell belongs to.
diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
index 125dfac254..f590cc01a2 100644
--- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
+++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
@@ -572,12 +572,18 @@ public class SXSSFCell implements Cell
}
/**
- * Assign a hyperlink to this cell
+ * Assign a hyperlink to this cell. If the supplied hyperlink is null, the
+ * hyperlink for this cell will be removed.
*
* @param link hyperlink associated with this cell
*/
public void setHyperlink(Hyperlink link)
{
+ if (link == null) {
+ removeHyperlink();
+ return;
+ }
+
setProperty(Property.HYPERLINK,link);
XSSFHyperlink xssfobj = (XSSFHyperlink)link;
@@ -591,6 +597,16 @@ public class SXSSFCell implements Cell
}
/**
+ * Removes the hyperlink for this cell, if there is one.
+ */
+ public void removeHyperlink()
+ {
+ removeProperty(Property.HYPERLINK);
+
+ ((SXSSFSheet) getSheet())._sh.removeHyperlink(getRowIndex(), getColumnIndex());
+ }
+
+ /**
* Only valid for array formula cells
*
* @return range of the array formula group that the cell belongs to.
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
index e12e3e1b75..04a91b6240 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
@@ -947,12 +947,18 @@ public final class XSSFCell implements Cell {
}
/**
- * Assign a hyperlink to this cell
+ * Assign a hyperlink to this cell. If the supplied hyperlink is null, the
+ * hyperlink for this cell will be removed.
*
* @param hyperlink the hyperlink to associate with this cell
*/
@Override
public void setHyperlink(Hyperlink hyperlink) {
+ if (hyperlink == null) {
+ removeHyperlink();
+ return;
+ }
+
XSSFHyperlink link = (XSSFHyperlink)hyperlink;
// Assign to us
@@ -963,6 +969,14 @@ public final class XSSFCell implements Cell {
}
/**
+ * Removes the hyperlink for this cell, if there is one.
+ */
+ @Override
+ public void removeHyperlink() {
+ getSheet().removeHyperlink(_row.getRowNum(), _cellNum);
+ }
+
+ /**
* Returns the xml bean containing information about the cell's location (reference), value,
* data type, formatting, and formula
*
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
index e625d83963..ac72c76803 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
@@ -2743,6 +2743,24 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
}
/**
+ * Removes a hyperlink in the collection of hyperlinks on this sheet
+ *
+ * @param row row index
+ * @param column column index
+ */
+ @Internal
+ public void removeHyperlink(int row, int column) {
+ String ref = new CellReference(row, column).formatAsString();
+ for (Iterator<XSSFHyperlink> it = hyperlinks.iterator(); it.hasNext();) {
+ XSSFHyperlink hyperlink = it.next();
+ if (hyperlink.getCellRef().equals(ref)) {
+ it.remove();
+ return;
+ }
+ }
+ }
+
+ /**
* Return location of the active cell, e.g. <code>A1</code>.
*
* @return the location of the active cell.
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java
index a73e952c8f..754f7e2a85 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java
@@ -25,6 +25,8 @@ import javax.xml.namespace.QName;
import org.apache.poi.ss.usermodel.BaseTestCell;
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.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
@@ -168,4 +170,27 @@ public class TestSXSSFCell extends BaseTestCell {
assertEquals("some", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
assertEquals("24", wb.getSheetAt(0).getRow(0).getCell(1).getStringCellValue());
}
+
+ public void testRemoveHyperlink(){
+ Workbook wb = _testDataProvider.createWorkbook();
+ Sheet sh = wb.createSheet("test");
+ Row row = sh.createRow(0);
+ CreationHelper helper = wb.getCreationHelper();
+
+ Cell cell1 = row.createCell(1);
+ Hyperlink link1 = helper.createHyperlink(Hyperlink.LINK_URL);
+ cell1.setHyperlink(link1);
+ assertNotNull(cell1.getHyperlink());
+ cell1.removeHyperlink();
+ assertNull(cell1.getHyperlink());
+
+ Cell cell2 = row.createCell(0);
+ Hyperlink link2 = helper.createHyperlink(Hyperlink.LINK_URL);
+ cell2.setHyperlink(link2);
+ assertNotNull(cell2.getHyperlink());
+ cell2.setHyperlink(null);
+ assertNull(cell2.getHyperlink());
+
+ _testDataProvider.writeOutAndReadBack(wb);
+ }
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
index 6d91fcd889..967214380f 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import org.apache.poi.ss.usermodel.BaseTestCell;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
@@ -371,5 +372,26 @@ public final class TestXSSFCell extends BaseTestCell {
cell.toString();
}
}
-
+
+ public void testRemoveHyperlink() {
+ final Workbook wb = new XSSFWorkbook();
+ final Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+
+ Cell cell1 = row.createCell(1);
+ Hyperlink link1 = new XSSFHyperlink(Hyperlink.LINK_URL);
+ cell1.setHyperlink(link1);
+ assertNotNull(cell1.getHyperlink());
+ cell1.removeHyperlink();
+ assertNull(cell1.getHyperlink());
+
+ Cell cell2 = row.createCell(0);
+ Hyperlink link2 = new XSSFHyperlink(Hyperlink.LINK_URL);
+ cell2.setHyperlink(link2);
+ assertNotNull(cell2.getHyperlink());
+ cell2.setHyperlink(null);
+ assertNull(cell2.getHyperlink());
+
+ XSSFTestDataSamples.writeOutAndReadBack(wb);
+ }
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
index 078042970f..31a1d972a4 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
@@ -34,6 +34,7 @@ import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.BaseTestCell;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.ErrorConstants;
+import org.apache.poi.ss.usermodel.Hyperlink;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
@@ -253,6 +254,26 @@ public final class TestHSSFCell extends BaseTestCell {
assertEquals(1, link2.getFirstColumn());
}
+ public void testRemoveHyperlink() {
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ HSSFRow row = sheet.createRow(0);
+
+ HSSFCell cell1 = row.createCell(1);
+ HSSFHyperlink link1 = new HSSFHyperlink(Hyperlink.LINK_URL);
+ assertNotNull(link1);
+ cell1.removeHyperlink();
+ assertNull(cell1.getHyperlink());
+
+ HSSFCell cell2 = row.createCell(0);
+ HSSFHyperlink link2 = new HSSFHyperlink(Hyperlink.LINK_URL);
+ assertNotNull(link2);
+ cell2.setHyperlink(null);
+ assertNull(cell2.getHyperlink());
+
+ HSSFTestDataSamples.writeOutAndReadBack(wb);
+ }
+
/**
* Test to ensure we can only assign cell styles that belong
* to our workbook, and not those from other workbooks.