diff --git a/src/java/org/apache/poi/hssf/record/ArrayRecord.java b/src/java/org/apache/poi/hssf/record/ArrayRecord.java index de32a63347..919822858a 100644 --- a/src/java/org/apache/poi/hssf/record/ArrayRecord.java +++ b/src/java/org/apache/poi/hssf/record/ArrayRecord.java @@ -94,5 +94,15 @@ public final class ArrayRecord extends SharedValueRecordBase { } sb.append("]"); return sb.toString(); - } + } + + public Object clone() { + ArrayRecord rec = new ArrayRecord(_formula.copy(), getRange()); + + // they both seem unused, but clone them nevertheless to have an exact copy + rec._options = _options; + rec._field3notUsed = _field3notUsed; + + return rec; + } } diff --git a/src/testcases/org/apache/poi/hssf/record/TestArrayRecord.java b/src/testcases/org/apache/poi/hssf/record/TestArrayRecord.java index d2b483f407..ff5fe0ad9b 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestArrayRecord.java +++ b/src/testcases/org/apache/poi/hssf/record/TestArrayRecord.java @@ -19,14 +19,17 @@ package org.apache.poi.hssf.record; import junit.framework.TestCase; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress8Bit; -import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.FormulaParser; import org.apache.poi.ss.formula.FormulaRenderer; import org.apache.poi.ss.formula.FormulaType; -import org.apache.poi.ss.formula.Formula; -import org.apache.poi.util.HexRead; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.util.HexDump; +import org.apache.poi.util.HexRead; public final class TestArrayRecord extends TestCase { @@ -53,7 +56,22 @@ public final class TestArrayRecord extends TestCase { byte[] ser = r2.serialize(); //serialize and check that the data is the same as in r1 assertEquals(HexDump.toHex(data), HexDump.toHex(ser)); - - } -} \ No newline at end of file + + public void testBug57231() { + HSSFWorkbook wb = HSSFTestDataSamples + .openSampleWorkbook("57231_MixedGasReport.xls"); + HSSFSheet sheet = wb.getSheet("master"); + + HSSFSheet newSheet = wb.cloneSheet(wb.getSheetIndex(sheet)); + int idx = wb.getSheetIndex(newSheet); + wb.setSheetName(idx, "newName"); + + // Write the output to a file + HSSFWorkbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(wb); + assertNotNull(wbBack); + + assertNotNull(wbBack.getSheet("master")); + assertNotNull(wbBack.getSheet("newName")); + } +} diff --git a/test-data/spreadsheet/57231_MixedGasReport.xls b/test-data/spreadsheet/57231_MixedGasReport.xls new file mode 100644 index 0000000000..d4a526c58c Binary files /dev/null and b/test-data/spreadsheet/57231_MixedGasReport.xls differ