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);
|
||||
}
|
||||
|
||||
int minCell=Integer.MAX_VALUE, maxCell=Integer.MIN_VALUE;
|
||||
for(XSSFRow row : _rows.values()){
|
||||
// first perform the normal write actions for the row
|
||||
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);
|
||||
|
@ -25,13 +25,7 @@ import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
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.io.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
@ -3169,4 +3163,31 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues {
|
||||
sheet = wb.getSheetAt(4);
|
||||
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