Bug 47278 - xsi:nil attribute for <t> tag caused Excel 2007 to fail to open workbook
Summary: xsi:nil attribute for <t> tag caused Excel 2007 to fail to open workbook
Status: RESOLVED FIXED
Alias: None
Product: POI
Classification: Unclassified
Component: XSSF (show other bugs)
Version: unspecified
Hardware: PC Windows Vista
: P2 normal (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-05-28 03:18 UTC by Eduard Dudar
Modified: 2009-05-30 03:43 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eduard Dudar 2009-05-28 03:18:40 UTC
At some conditions POI XSSF generates the following shared string element:
<si><t xsi:nil="true"/></si>

Opening such workbook caused an error with text like that:
"Removed Part: /xl/sharedStrings.xml part with XML error.  (Strings) Load error. Line 2, column 174962.
Removed Records: Cell information from /xl/worksheets/sheet1.xml part"

Column number of course will be different in other examples but points to element above.

Actually such attribute is valid for XML and says that tag's value is empty but Excel doesn't understand this. Huh.
Comment 1 Yegor Kozlov 2009-05-28 06:45:00 UTC
Can you post sample code that generates xsi:nil entries in sharedStrings.xml? It would be helpful to diagnose the problem.

Regards,
Yegor
Comment 2 Eduard Dudar 2009-05-28 07:20:48 UTC
Original source code where I have this is quite tightly coupled within huge application and will not give any value without own environment. I'm going to simplify this case as much as it will be possible and will back here.
Comment 3 Yegor Kozlov 2009-05-30 03:43:48 UTC
Fixed in r780228.

Passing null to the XSSFRichTextString constructor resulted in xsi:nil for the <t> tag. A minimal code to reproduce the behavior is as follows:

  XSSFCell cell = sheet.createRow(0).createCell(0);
  cell.setCellValue(new XSSFRichTextString((String)null));

I fixed setCellValue to blank cell ( erase all the data previously associated with this cell) if the argument string is null.

Regards,
Yegor