https://issues.apache.org/bugzilla/show_bug.cgi?id=46664
--- Comment #19 from ogawa <[email protected]> 2011-02-10 02:40:16 EST --- I found a difference HSSFWorkbook and XSSFWorkbook. In XSSFWorkbook#setPrintArea(), FormulaParser#parse() is called as follows. FormulaParser.parse (formulaText, fpb, FormulaType.NAMEDRANGE, getSheetIndex ()); The third argument is FormulaType.NAMEDRANGE. However, in HSSFWorkbook#setPrintArea(), third argument is FormulaType.CELL as follows. HSSFFormulaParser.parse (sb.toString (), this, FormulaType.CELL, sheetIndex) In fact, if I create a following class, setPrintArea works fine. -------------------------------------------------------------------------------- import java.lang.reflect.Field; import java.util.regex.Pattern; import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.formula.SheetNameFormatter; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.formula.FormulaType; public class MyHSSFWorkbook extends HSSFWorkbook { private static final Pattern COMMA_PATTERN = Pattern.compile(","); private Workbook workbook; public MyHSSFWorkbook() throws NoSuchFieldException, IllegalAccessException { this.workbook = getLowLevelWorkbook(); } private Workbook getLowLevelWorkbook() throws NoSuchFieldException, IllegalAccessException { Field field = HSSFWorkbook.class.getDeclaredField("workbook"); field.setAccessible(true); return (Workbook) field.get(this); } @Override public void setPrintArea(int sheetIndex, String reference) { NameRecord name = workbook.getSpecificBuiltinRecord(NameRecord.BUILTIN_PRINT_AREA, sheetIndex + 1); if (name == null) { name = workbook.createBuiltInName(NameRecord.BUILTIN_PRINT_AREA, sheetIndex + 1); // adding one here because 0 indicates a global named region; doesn't make sense for print areas } String[] parts = COMMA_PATTERN.split(reference); StringBuffer sb = new StringBuffer(32); for (int i = 0; i < parts.length; i++) { if (i > 0) { sb.append(","); } SheetNameFormatter.appendFormat(sb, getSheetName(sheetIndex)); sb.append("!"); sb.append(parts[i]); } // FormulaType.CELL -> FormulaType.NAMEDRANGE name.setNameDefinition(HSSFFormulaParser.parse(sb.toString(), this, FormulaType.NAMEDRANGE, sheetIndex)); } } -------------------------------------------------------------------------------- Is this a bug? -- Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
