Browse Source

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
tags/REL_3_11_FINAL
Nick Burch 9 years ago
parent
commit
9b9b4b8cf4

+ 24
- 1
src/java/org/apache/poi/hssf/usermodel/HSSFCell.java View File

@@ -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},

+ 5
- 0
src/java/org/apache/poi/ss/usermodel/Cell.java View File

@@ -380,6 +380,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
*

+ 17
- 1
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java View File

@@ -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;
@@ -590,6 +596,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
*

+ 15
- 1
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java View File

@@ -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
@@ -962,6 +968,14 @@ public final class XSSFCell implements Cell {
getSheet().addHyperlink(link);
}

/**
* 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

+ 18
- 0
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java View File

@@ -2742,6 +2742,24 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
hyperlinks.add(hyperlink);
}

/**
* 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>.
*

+ 25
- 0
src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java View File

@@ -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);
}
}

+ 23
- 1
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java View File

@@ -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);
}
}

+ 21
- 0
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java View File

@@ -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.

Loading…
Cancel
Save