move hyperlinks when shifting rows
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@730076 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
39b3dcae63
commit
49297979bb
@ -1187,6 +1187,12 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
|
||||
cellRecord.setRow( rowNum + n );
|
||||
row2Replace.createCellFromRecord( cellRecord );
|
||||
sheet.addValueRecord( rowNum + n, cellRecord );
|
||||
|
||||
HSSFHyperlink link = cell.getHyperlink();
|
||||
if(link != null){
|
||||
link.setFirstRow(link.getFirstRow() + n);
|
||||
link.setLastRow(link.getLastRow() + n);
|
||||
}
|
||||
}
|
||||
// Now zap all the cells in the source row
|
||||
row.removeAllCells();
|
||||
|
BIN
src/testcases/org/apache/poi/hssf/data/46445.xls
Executable file
BIN
src/testcases/org/apache/poi/hssf/data/46445.xls
Executable file
Binary file not shown.
@ -1642,4 +1642,28 @@ public final class TestBugs extends TestCase {
|
||||
assertEquals("\u0161\u017E\u010D\u0148\u0159", sheet.getRow(1).getCell(0).getStringCellValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiple calls of HSSFWorkbook.write result in corrupted xls
|
||||
*/
|
||||
public void test32191() throws IOException {
|
||||
HSSFWorkbook wb = openSample("27394.xls");
|
||||
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
wb.write(out);
|
||||
out.close();
|
||||
int size1 = out.size();
|
||||
|
||||
out = new ByteArrayOutputStream();
|
||||
wb.write(out);
|
||||
out.close();
|
||||
int size2 = out.size();
|
||||
|
||||
assertEquals(size1, size2);
|
||||
out = new ByteArrayOutputStream();
|
||||
wb.write(out);
|
||||
out.close();
|
||||
int size3 = out.size();
|
||||
assertEquals(size2, size3);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -184,4 +184,49 @@ public final class TestHSSFHyperlink extends TestCase {
|
||||
assertNotNull(link);
|
||||
assertEquals("http://poi.apache.org/hssf/", link.getAddress());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that HSSFSheet#shiftRows moves hyperlinks,
|
||||
* see bugs #46445 and #29957
|
||||
*/
|
||||
public void testShiftRows(){
|
||||
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("46445.xls");
|
||||
|
||||
|
||||
HSSFSheet sheet = wb.getSheetAt(0);
|
||||
|
||||
//verify existing hyperlink in A3
|
||||
HSSFCell cell1 = sheet.getRow(2).getCell(0);
|
||||
HSSFHyperlink link1 = cell1.getHyperlink();
|
||||
assertNotNull(link1);
|
||||
assertEquals(2, link1.getFirstRow());
|
||||
assertEquals(2, link1.getLastRow());
|
||||
|
||||
//assign a hyperlink to A4
|
||||
HSSFHyperlink link2 = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
|
||||
link2.setAddress("Sheet2!A2");
|
||||
HSSFCell cell2 = sheet.getRow(3).getCell(0);
|
||||
cell2.setHyperlink(link2);
|
||||
assertEquals(3, link2.getFirstRow());
|
||||
assertEquals(3, link2.getLastRow());
|
||||
|
||||
//move the 3rd row two rows down
|
||||
sheet.shiftRows(sheet.getFirstRowNum(), sheet.getLastRowNum(), 2);
|
||||
|
||||
//cells A3 and A4 don't contain hyperlinks anymore
|
||||
assertNull(sheet.getRow(2).getCell(0).getHyperlink());
|
||||
assertNull(sheet.getRow(3).getCell(0).getHyperlink());
|
||||
|
||||
//the first hypelink now belongs to A5
|
||||
HSSFHyperlink link1_shifted = sheet.getRow(2+2).getCell(0).getHyperlink();
|
||||
assertNotNull(link1_shifted);
|
||||
assertEquals(4, link1_shifted.getFirstRow());
|
||||
assertEquals(4, link1_shifted.getLastRow());
|
||||
|
||||
//the second hypelink now belongs to A6
|
||||
HSSFHyperlink link2_shifted = sheet.getRow(3+2).getCell(0).getHyperlink();
|
||||
assertNotNull(link2_shifted);
|
||||
assertEquals(5, link2_shifted.getFirstRow());
|
||||
assertEquals(5, link2_shifted.getLastRow());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user