Bug 49907

Summary: Inconsistent behaviour between HSSF and XSSF when creating consecutive names
Product: POI Reporter: Martin Studer <martin.studer>
Component: HSSFAssignee: POI Developers List <dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: 3.7-dev   
Target Milestone: ---   
Hardware: PC   
OS: All   

Description Martin Studer 2010-09-10 05:27:01 UTC
Consider the following code:

Workbook wb = new HSSFWorkbook();
wb.createName();
wb.createName();

This fails for HSSF with the following error message:
"You are trying to assign a duplicated name record: "

For XSSFWorkbook's there is no problem.


It's not quite clear to me which behaviour is more appropriate...

POI: 3.7-build2
OS: Windows 7 64-bit
Java: 1.6.0_20 64-bit
Comment 1 Yegor Kozlov 2010-09-11 08:48:30 UTC
Strictly speaking your code snippet does not make sense. Name's name and formula MUST be set, otherwise Excel will complain on unreadable content.  

However, it should be possible to create two consecutive names and initialize them later:

Workbook wb = new HSSFWorkbook(); //or new XSSFWorkook()
Name name1 = wb.createName();
Name name2 = wb.createName();

name1.setNameName("sale_1");
name1.setRefersToFormula(1);

name2.setNameName("sale_2");
name2.setRefersToFormula(2);


The following code works in XSSF but fails in HSSF - checking uniqueness of names in HSSF is too aggressive. Both should allow creating a pool of names and initialize them later. 

I committed the fix in r996136. 

Thanks,
Yegor