You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by bu...@apache.org on 2004/08/15 00:21:16 UTC
DO NOT REPLY [Bug 30671] New: -
inconsistent behavior of HSSFRow.getLastCellNum() OR write function incorrectly marks the last cell in the row
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=30671>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30671
inconsistent behavior of HSSFRow.getLastCellNum() OR write function incorrectly marks the last cell in the row
Summary: inconsistent behavior of HSSFRow.getLastCellNum() OR
write function incorrectly marks the last cell in the
row
Product: POI
Version: 2.5
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: Critical
Priority: Other
Component: HPFS
AssignedTo: poi-dev@jakarta.apache.org
ReportedBy: lukaszr@netzero.com
Below is test taken from JUnit test case.
It consists of:
Part I - write 4 Strings to xls file,
Part II - read
Part III - verify the read result.
The thing is that HSSFRow.getLastCellNum() returns 3 for the previously
written xls file (written with POI) and the test fails. It would be fine, but
when you open the file with Excel and save the file then close it (Ctrl-S then
Alt-F4) and comment out the 'Part I' (write test) and re-run the test (so it
tests the read part) the HSSFRow.getLastCellNum() returns 4.
So either write function incorrectly marks the last cell in the row, or
HSSFRow.getLastCellNum() returns different numbers for files written with POI
and written by Excel.
test method (it was cleared out):
public void testWrite2Read() throws IOException{
//PART I - write
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = null;
HSSFRow row = null;
HSSFCell cell = null;
String cellValue;
sheet = wb.createSheet("CDs");
wb.setSheetName(0, "CDs", HSSFWorkbook.ENCODING_UTF_16);
//write data
row = sheet.createRow(0);
String[] data = new String[]{"Identification
Number:", "Title:", "Retail price:", "Test:"};
for (short i = 0; i < data.length; i++){
cellValue = data[i];
cell = row.createCell(i);
cell.setCellValue(cellValue);
}
//write to outputstream
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
wb.write(bOut);
bOut.close();
assertTrue("size of outputstream", bOut.size()>0);
//COMMENT THIS FOR SECOND TEST
//write to file
FileOutputStream file;
try {
file = new FileOutputStream("target/test-
classes/xls_test_files_tmp_files/wr_1.xls");
file.write(bOut.toByteArray());
file.flush();
file.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
//PART II - read
InputStream is = classLoader.getResourceAsStream
("xls_test_files_tmp_files/wr_1.xls");
assertNotNull("InputStream for
xls_test_files_tmp_files/wr_1.xls not null", is);
wb = null;
sheet = null;
POIFSFileSystem fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
sheet = wb.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();
String[] readData = null;
if (rowIter.hasNext()){
row = (HSSFRow) rowIter.next();
System.out.println("last cell: "+row.getLastCellNum());
readData = new String[row.getLastCellNum()];
for(short i = 0; i < row.getLastCellNum(); i++){
cell = row.getCell(i);
System.out.println("cell value: "+
cell.getStringCellValue());
readData[i] = cell.getStringCellValue();
}
}
//Part III verify
assertNotNull("result not null", readData);
assertTrue("result not empty", readData.length > 0);
assertTrue("compare result length vs. expected result length",
readData.length == data.length);
for(short i = 0; i < data.length; i++){
assertEquals("Should be equal", data[i], readData[i]);
}
}
PS. Before testing plase update the file paths
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: poi-dev-help@jakarta.apache.org