You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestXSSFBugs.java 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /* ====================================================================
  2. Licensed to the Apache Software Foundation (ASF) under one or more
  3. contributor license agreements. See the NOTICE file distributed with
  4. this work for additional information regarding copyright ownership.
  5. The ASF licenses this file to You under the Apache License, Version 2.0
  6. (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing, software
  10. distributed under the License is distributed on an "AS IS" BASIS,
  11. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. See the License for the specific language governing permissions and
  13. limitations under the License.
  14. ==================================================================== */
  15. package org.apache.poi.xssf.usermodel;
  16. import java.util.List;
  17. import org.apache.poi.POIXMLDocumentPart;
  18. import org.apache.poi.openxml4j.opc.OPCPackage;
  19. import org.apache.poi.openxml4j.opc.PackagePart;
  20. import org.apache.poi.openxml4j.opc.PackagingURIHelper;
  21. import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
  22. import org.apache.poi.ss.usermodel.Name;
  23. import org.apache.poi.xssf.XSSFITestDataProvider;
  24. import org.apache.poi.xssf.XSSFTestDataSamples;
  25. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
  26. public final class TestXSSFBugs extends BaseTestBugzillaIssues {
  27. public TestXSSFBugs() {
  28. super(XSSFITestDataProvider.instance);
  29. }
  30. /**
  31. * test writing a file with large number of unique strings,
  32. * open resulting file in Excel to check results!
  33. */
  34. public void test15375_2() {
  35. baseTest15375(1000);
  36. }
  37. /**
  38. * Named ranges had the right reference, but
  39. * the wrong sheet name
  40. */
  41. public void test45430() {
  42. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("45430.xlsx");
  43. assertFalse(wb.isMacroEnabled());
  44. assertEquals(3, wb.getNumberOfNames());
  45. assertEquals(0, wb.getNameAt(0).getCTName().getLocalSheetId());
  46. assertFalse(wb.getNameAt(0).getCTName().isSetLocalSheetId());
  47. assertEquals("SheetA!$A$1", wb.getNameAt(0).getRefersToFormula());
  48. assertEquals("SheetA", wb.getNameAt(0).getSheetName());
  49. assertEquals(0, wb.getNameAt(1).getCTName().getLocalSheetId());
  50. assertFalse(wb.getNameAt(1).getCTName().isSetLocalSheetId());
  51. assertEquals("SheetB!$A$1", wb.getNameAt(1).getRefersToFormula());
  52. assertEquals("SheetB", wb.getNameAt(1).getSheetName());
  53. assertEquals(0, wb.getNameAt(2).getCTName().getLocalSheetId());
  54. assertFalse(wb.getNameAt(2).getCTName().isSetLocalSheetId());
  55. assertEquals("SheetC!$A$1", wb.getNameAt(2).getRefersToFormula());
  56. assertEquals("SheetC", wb.getNameAt(2).getSheetName());
  57. // Save and re-load, still there
  58. XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
  59. assertEquals(3, nwb.getNumberOfNames());
  60. assertEquals("SheetA!$A$1", nwb.getNameAt(0).getRefersToFormula());
  61. }
  62. /**
  63. * We should carry vba macros over after save
  64. */
  65. public void test45431() throws Exception {
  66. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("45431.xlsm");
  67. OPCPackage pkg = wb.getPackage();
  68. assertTrue(wb.isMacroEnabled());
  69. // Check the various macro related bits can be found
  70. PackagePart vba = pkg.getPart(
  71. PackagingURIHelper.createPartName("/xl/vbaProject.bin")
  72. );
  73. assertNotNull(vba);
  74. // And the drawing bit
  75. PackagePart drw = pkg.getPart(
  76. PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
  77. );
  78. assertNotNull(drw);
  79. // Save and re-open, both still there
  80. XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
  81. OPCPackage nPkg = nwb.getPackage();
  82. assertTrue(nwb.isMacroEnabled());
  83. vba = nPkg.getPart(
  84. PackagingURIHelper.createPartName("/xl/vbaProject.bin")
  85. );
  86. assertNotNull(vba);
  87. drw = nPkg.getPart(
  88. PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
  89. );
  90. assertNotNull(drw);
  91. // And again, just to be sure
  92. nwb = XSSFTestDataSamples.writeOutAndReadBack(nwb);
  93. nPkg = nwb.getPackage();
  94. assertTrue(nwb.isMacroEnabled());
  95. vba = nPkg.getPart(
  96. PackagingURIHelper.createPartName("/xl/vbaProject.bin")
  97. );
  98. assertNotNull(vba);
  99. drw = nPkg.getPart(
  100. PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml")
  101. );
  102. assertNotNull(drw);
  103. }
  104. public void test47504() {
  105. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("47504.xlsx");
  106. assertEquals(1, wb.getNumberOfSheets());
  107. XSSFSheet sh = wb.getSheetAt(0);
  108. XSSFDrawing drawing = sh.createDrawingPatriarch();
  109. List<POIXMLDocumentPart> rels = drawing.getRelations();
  110. assertEquals(1, rels.size());
  111. assertEquals("Sheet1!A1", rels.get(0).getPackageRelationship().getTargetURI().getFragment());
  112. // And again, just to be sure
  113. wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
  114. assertEquals(1, wb.getNumberOfSheets());
  115. sh = wb.getSheetAt(0);
  116. drawing = sh.createDrawingPatriarch();
  117. rels = drawing.getRelations();
  118. assertEquals(1, rels.size());
  119. assertEquals("Sheet1!A1", rels.get(0).getPackageRelationship().getTargetURI().getFragment());
  120. }
  121. /**
  122. * Excel will sometimes write a button with a textbox
  123. * containing &gt;br&lt; (not closed!).
  124. * Clearly Excel shouldn't do this, but test that we can
  125. * read the file despite the naughtyness
  126. */
  127. public void test49020() throws Exception {
  128. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("BrNotClosed.xlsx");
  129. }
  130. /**
  131. * ensure that CTPhoneticPr is loaded by the ooxml test suite so that it is included in poi-ooxml-schemas
  132. */
  133. public void test49325() throws Exception {
  134. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("49325.xlsx");
  135. CTWorksheet sh = wb.getSheetAt(0).getCTWorksheet();
  136. assertNotNull(sh.getPhoneticPr());
  137. }
  138. /**
  139. * Names which are defined with a Sheet
  140. * should return that sheet index properly
  141. */
  142. public void test48923() throws Exception {
  143. XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48923.xlsx");
  144. assertEquals(4, wb.getNumberOfNames());
  145. Name b1 = wb.getName("NameB1");
  146. Name b2 = wb.getName("NameB2");
  147. Name sheet2 = wb.getName("NameSheet2");
  148. Name test = wb.getName("Test");
  149. assertNotNull(b1);
  150. assertEquals("NameB1", b1.getNameName());
  151. assertEquals("Sheet1", b1.getSheetName());
  152. assertEquals(-1, b1.getSheetIndex());
  153. assertNotNull(b2);
  154. assertEquals("NameB2", b2.getNameName());
  155. assertEquals("Sheet1", b2.getSheetName());
  156. assertEquals(-1, b2.getSheetIndex());
  157. assertNotNull(sheet2);
  158. assertEquals("NameSheet2", sheet2.getNameName());
  159. assertEquals("Sheet2", sheet2.getSheetName());
  160. assertEquals(-1, sheet2.getSheetIndex());
  161. assertNotNull(test);
  162. assertEquals("Test", test.getNameName());
  163. assertEquals("Sheet1", test.getSheetName());
  164. assertEquals(-1, test.getSheetIndex());
  165. }
  166. }