Bug 53611: populate dimension of XSSF Worksheet when writing the document
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1767096 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d47fff6e1c
commit
ca4a7d2f27
@ -3451,8 +3451,28 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
worksheet.getHyperlinks().setHyperlinkArray(ctHls);
|
worksheet.getHyperlinks().setHyperlinkArray(ctHls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int minCell=Integer.MAX_VALUE, maxCell=Integer.MIN_VALUE;
|
||||||
for(XSSFRow row : _rows.values()){
|
for(XSSFRow row : _rows.values()){
|
||||||
|
// first perform the normal write actions for the row
|
||||||
row.onDocumentWrite();
|
row.onDocumentWrite();
|
||||||
|
|
||||||
|
// then calculate min/max cell-numbers for the worksheet-dimension
|
||||||
|
if(row.getFirstCellNum() != -1) {
|
||||||
|
minCell = Math.min(minCell, row.getFirstCellNum());
|
||||||
|
}
|
||||||
|
if(row.getLastCellNum() != -1) {
|
||||||
|
maxCell = Math.max(maxCell, row.getLastCellNum());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally, if we had at least one cell we can populate the optional dimension-field
|
||||||
|
if(minCell != Integer.MAX_VALUE) {
|
||||||
|
String ref = new CellRangeAddress(getFirstRowNum(), getLastRowNum(), minCell, maxCell).formatAsString();
|
||||||
|
if(worksheet.isSetDimension()) {
|
||||||
|
worksheet.getDimension().setRef(ref);
|
||||||
|
} else {
|
||||||
|
worksheet.addNewDimension().setRef(ref);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
|
XmlOptions xmlOptions = new XmlOptions(DEFAULT_XML_OPTIONS);
|
||||||
|
@ -25,13 +25,7 @@ import static org.junit.Assert.assertNull;
|
|||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.*;
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -3169,4 +3163,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
|||||||
sheet = wb.getSheetAt(4);
|
sheet = wb.getSheetAt(4);
|
||||||
assertNotNull(sheet.getDrawingPatriarch());
|
assertNotNull(sheet.getDrawingPatriarch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test53611() throws IOException {
|
||||||
|
Workbook wb = new XSSFWorkbook();
|
||||||
|
Sheet sheet = wb.createSheet("test");
|
||||||
|
Row row = sheet.createRow(1);
|
||||||
|
Cell cell = row.createCell(1);
|
||||||
|
cell.setCellValue("blabla");
|
||||||
|
|
||||||
|
row = sheet.createRow(4);
|
||||||
|
cell = row.createCell(7);
|
||||||
|
cell.setCellValue("blabla");
|
||||||
|
|
||||||
|
// we currently only populate the dimension during writing out
|
||||||
|
// to avoid having to iterate all rows/cells in each add/remove of a row or cell
|
||||||
|
//OutputStream str = new FileOutputStream("/tmp/53611.xlsx");
|
||||||
|
OutputStream str = new ByteArrayOutputStream();
|
||||||
|
try {
|
||||||
|
wb.write(str);
|
||||||
|
} finally {
|
||||||
|
str.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("B2:I5", ((XSSFSheet)sheet).getCTWorksheet().getDimension().getRef());
|
||||||
|
|
||||||
|
wb.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user