react-native-nitro-xlsx 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/NitroXlsx.podspec +26 -27
  2. package/Package.swift +31 -10
  3. package/README.md +21 -9
  4. package/android/CMakeLists.txt +20 -27
  5. package/cpp/HybridNitroXlsx.cpp +25 -1
  6. package/cpp/HybridXlsxCellFormat.cpp +46 -146
  7. package/cpp/HybridXlsxCellFormat.hpp +9 -41
  8. package/cpp/HybridXlsxConditionalFormat.cpp +4 -1
  9. package/cpp/HybridXlsxConditionalFormats.cpp +5 -1
  10. package/cpp/HybridXlsxWorkbook.cpp +38 -8
  11. package/cpp/HybridXlsxWorkbook.hpp +10 -1
  12. package/cpp/HybridXlsxWorksheet.cpp +422 -141
  13. package/cpp/HybridXlsxWorksheet.hpp +4 -1
  14. package/cpp/XlsxCacheDir.cpp +25 -2
  15. package/cpp/XlsxCacheDir.hpp +3 -1
  16. package/cpp/XlsxCellStyle.hpp +360 -0
  17. package/cpp/XlsxJson.cpp +29 -8
  18. package/package.json +2 -2
  19. package/scripts/run-cpp-tests.sh +1 -1
  20. package/scripts/sync-openxlsx-headers.sh +34 -0
  21. package/src/__mocks__/react-native-nitro-modules.ts +523 -20
  22. package/src/__tests__/index.test.ts +124 -16
  23. package/src/index.ts +13 -13
  24. package/thirdparty/OpenXLSX/.clang-format +118 -0
  25. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  26. package/thirdparty/OpenXLSX/.gitignore +130 -0
  27. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  28. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  29. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  30. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  31. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  32. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  33. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  34. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  35. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  36. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  37. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  38. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  39. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  40. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  41. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  42. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  43. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  44. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  45. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  46. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  47. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  48. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  49. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  50. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  51. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  52. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  53. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  54. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  55. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  56. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  57. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  58. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  59. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  60. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  61. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  62. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  63. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  64. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  65. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  66. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  67. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  68. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  69. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  70. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  71. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  72. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  73. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  74. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  75. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  76. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/IZipArchive.hpp +361 -0
  77. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/OpenXLSX-Exports.hpp +12 -0
  78. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCell.hpp +367 -0
  79. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellIterator.hpp +252 -0
  80. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellRange.hpp +223 -0
  81. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellReference.hpp +317 -0
  82. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCellValue.hpp +793 -0
  83. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColor.hpp +232 -0
  84. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLColumn.hpp +159 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLCommandQuery.hpp +228 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLComments.hpp +270 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLConstants.hpp +18 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLContentTypes.hpp +264 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDateTime.hpp +175 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDocument.hpp +505 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLDrawing.hpp +452 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLException.hpp +161 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLFormula.hpp +375 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLIterator.hpp +40 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLMergeCells.hpp +216 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLProperties.hpp +348 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRelationships.hpp +348 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRow.hpp +721 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLRowData.hpp +488 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSharedStrings.hpp +204 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLSheet.hpp +1640 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLStyles.hpp +2390 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLTables.hpp +132 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLWorkbook.hpp +404 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlData.hpp +283 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlFile.hpp +194 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParser.hpp +282 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLXmlParserForwardDeclarations.hpp +85 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/XLZipArchive.hpp +232 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/LibZip.hpp +447 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/OpenXLSXFileSystemTools.hpp +207 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX/detail/Zippy.hpp +1375 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  123. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  124. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  125. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  126. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  127. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  128. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  129. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  130. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  131. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  132. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  133. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  134. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  135. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  136. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  137. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  138. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  139. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  140. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  141. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  142. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  143. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  144. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  145. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  146. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  147. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  148. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  149. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  150. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  151. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  152. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  153. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  154. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  155. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  156. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  157. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  158. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  159. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  160. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  161. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  162. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  163. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  164. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  165. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  166. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  167. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  168. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  169. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  170. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  171. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  172. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  173. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  174. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  175. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  176. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  177. package/thirdparty/OpenXLSX/README.md +1279 -0
  178. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  179. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  180. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  181. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  182. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  183. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  184. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  185. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  186. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  187. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  188. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  189. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  190. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  191. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  192. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  193. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  194. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  195. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  196. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  197. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  198. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  199. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  200. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  201. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  202. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  203. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  204. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  205. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  206. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  207. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  208. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  209. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  210. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  211. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  212. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  213. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  214. package/thirdparty/README.md +46 -0
  215. package/thirdparty/miniz/.clang-format +47 -0
  216. package/thirdparty/miniz/.travis.yml +2 -0
  217. package/thirdparty/miniz/CMakeLists.txt +333 -0
  218. package/thirdparty/miniz/CMakePresets.json +31 -0
  219. package/thirdparty/miniz/ChangeLog.md +272 -0
  220. package/thirdparty/miniz/Config.cmake.in +1 -0
  221. package/thirdparty/miniz/LICENSE +22 -0
  222. package/thirdparty/miniz/amalgamate.sh +57 -0
  223. package/thirdparty/miniz/examples/example1.c +105 -0
  224. package/thirdparty/miniz/examples/example2.c +164 -0
  225. package/thirdparty/miniz/examples/example3.c +269 -0
  226. package/thirdparty/miniz/examples/example4.c +102 -0
  227. package/thirdparty/miniz/examples/example5.c +327 -0
  228. package/thirdparty/miniz/examples/example6.c +189 -0
  229. package/thirdparty/miniz/meson.build +21 -0
  230. package/thirdparty/miniz/miniz.c +646 -0
  231. package/thirdparty/miniz/miniz.h +615 -0
  232. package/thirdparty/miniz/miniz.pc.in +13 -0
  233. package/thirdparty/miniz/miniz_common.h +89 -0
  234. package/thirdparty/miniz/miniz_export.h +20 -0
  235. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  236. package/thirdparty/miniz/miniz_tdef.h +199 -0
  237. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  238. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  239. package/thirdparty/miniz/miniz_zip.c +4895 -0
  240. package/thirdparty/miniz/miniz_zip.h +454 -0
  241. package/thirdparty/miniz/readme.md +46 -0
  242. package/thirdparty/miniz/test.sh +36 -0
  243. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  244. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  245. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  246. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  247. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  248. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  249. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  250. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  251. package/thirdparty/miniz/tests/main.cpp +185 -0
  252. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  253. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  254. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  255. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  256. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  257. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  258. package/thirdparty/miniz/tests/timer.cpp +152 -0
  259. package/thirdparty/miniz/tests/timer.h +40 -0
  260. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  261. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  262. package/thirdparty/miniz/tests/zip.dict +9 -0
  263. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  264. package/thirdparty/pugixml/.codecov.yml +7 -0
  265. package/thirdparty/pugixml/.gitattributes +1 -0
  266. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  267. package/thirdparty/pugixml/LICENSE.md +24 -0
  268. package/thirdparty/pugixml/Makefile +98 -0
  269. package/thirdparty/pugixml/README.md +81 -0
  270. package/thirdparty/pugixml/SECURITY.md +9 -0
  271. package/thirdparty/pugixml/appveyor.yml +50 -0
  272. package/thirdparty/pugixml/docs/config.adoc +7 -0
  273. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  274. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  275. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  276. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  277. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  278. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  279. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  280. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  281. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  282. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  283. package/thirdparty/pugixml/docs/manual.html +6395 -0
  284. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  285. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  286. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  287. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  288. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  289. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  290. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  291. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  292. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  293. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  294. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  295. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  296. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  297. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  298. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  299. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  300. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  301. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  302. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  303. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  304. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  305. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  306. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  307. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  308. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  309. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  310. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  311. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  312. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  313. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  314. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  315. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  316. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  317. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  318. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  319. package/thirdparty/pugixml/readme.txt +50 -0
  320. package/thirdparty/pugixml/scripts/archive.py +54 -0
  321. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  322. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  323. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  324. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  325. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  326. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  327. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  328. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  329. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  330. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  331. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  332. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  333. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  334. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  335. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  336. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  337. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  338. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  339. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  340. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  341. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  342. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  343. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  344. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  345. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  346. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  347. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  348. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  349. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  350. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  351. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  352. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  353. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  354. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  355. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  356. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  357. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  358. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  359. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  360. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  361. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  362. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  363. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  364. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  365. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  366. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  367. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  368. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  369. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  370. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  371. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  372. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  373. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  374. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  375. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  376. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  377. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  378. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  379. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  380. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  381. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  382. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  383. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  384. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  385. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  386. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  387. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  388. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  389. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  390. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  391. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  392. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  393. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  394. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  395. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  396. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  397. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  398. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  399. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  400. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  401. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  402. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  403. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  404. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  405. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  406. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  407. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  408. package/thirdparty/pugixml/tests/main.cpp +218 -0
  409. package/thirdparty/pugixml/tests/test.cpp +220 -0
  410. package/thirdparty/pugixml/tests/test.hpp +175 -0
  411. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  412. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  413. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  414. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  415. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  416. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  417. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  418. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  419. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  420. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  421. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  422. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  423. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  424. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  425. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  426. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  427. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  428. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  429. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  430. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  431. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  432. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  433. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  434. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  435. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  436. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  437. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  438. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  439. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  440. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  441. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  442. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  443. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  444. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  445. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  446. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  447. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  448. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  449. package/scripts/prepare-openxlsx.js +0 -126
@@ -0,0 +1,103 @@
1
+ #=======================================================================================================================
2
+ # Preamble
3
+ #=======================================================================================================================
4
+ cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
5
+ project(OpenXLSX.Examples)
6
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
7
+
8
+
9
+ #=======================================================================================================================
10
+ # Define Demo1 target
11
+ #=======================================================================================================================
12
+ add_executable(Demo1 Demo1.cpp)
13
+ # NOTE: Linking against OpenXLSX-bundled does not yet work
14
+ # if(${OPENXLSX_BUNDLED_STATIC_LIB})
15
+ # # target_include_directories(Demo1
16
+ # # PUBLIC
17
+ # # $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/OpenXLSX>
18
+ # # $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/OpenXLSX/headers>
19
+ # # # ${Boost_INCLUDE_DIR} # just in case
20
+ # # # ${NOWIDE_INCLUDE_DIR} # includes {Boost_INCLUDE_DIR}/boost
21
+ # # $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/OpenXLSX>) # For export header
22
+ # target_link_libraries(Demo1 PRIVATE OpenXLSX-bundled)
23
+ # else()
24
+ target_link_libraries(Demo1 PRIVATE OpenXLSX::OpenXLSX)
25
+ # endif()
26
+
27
+
28
+ #=======================================================================================================================
29
+ # Define Demo1A target
30
+ #=======================================================================================================================
31
+ if(${OPENXLSX_ENABLE_LIBZIP_EXAMPLE})
32
+ find_package(LIBZIP MODULE REQUIRED)
33
+ add_executable(Demo1A Demo1A.cpp)
34
+ target_link_libraries(Demo1A PRIVATE OpenXLSX::OpenXLSX libzip::zip)
35
+ if (${OPENXLSX_ENABLE_NOWIDE})
36
+ target_compile_definitions(Demo1A PRIVATE ENABLE_NOWIDE)
37
+ target_include_directories(Demo1A PRIVATE ${EXAMPLES_NOWIDE_INCLUDE})
38
+ target_link_libraries(Demo1A PRIVATE ${NOWIDE_ALIAS})
39
+ endif()
40
+ endif()
41
+
42
+ #=======================================================================================================================
43
+ # Define Demo2 target
44
+ #=======================================================================================================================
45
+ add_executable(Demo2 Demo2.cpp)
46
+ target_link_libraries(Demo2 PRIVATE OpenXLSX::OpenXLSX)
47
+
48
+ #=======================================================================================================================
49
+ # Define Demo3 target
50
+ #=======================================================================================================================
51
+ add_executable(Demo3 Demo3.cpp)
52
+ target_link_libraries(Demo3 PRIVATE OpenXLSX::OpenXLSX)
53
+
54
+ #=======================================================================================================================
55
+ # Define Demo4 target
56
+ #=======================================================================================================================
57
+ add_executable(Demo4 Demo4.cpp)
58
+ target_link_libraries(Demo4 PRIVATE OpenXLSX::OpenXLSX)
59
+ if (${OPENXLSX_ENABLE_NOWIDE})
60
+ target_compile_definitions(Demo4 PRIVATE ENABLE_NOWIDE)
61
+ target_include_directories(Demo4 PRIVATE ${EXAMPLES_NOWIDE_INCLUDE})
62
+ target_link_libraries(Demo4 PRIVATE ${NOWIDE_ALIAS})
63
+ endif()
64
+
65
+ #=======================================================================================================================
66
+ # Define Demo9 target
67
+ #=======================================================================================================================
68
+ add_executable(Demo5 Demo5.cpp)
69
+ target_link_libraries(Demo5 PRIVATE OpenXLSX::OpenXLSX)
70
+
71
+ #=======================================================================================================================
72
+ # Define Demo6 target
73
+ #=======================================================================================================================
74
+ add_executable(Demo6 Demo6.cpp)
75
+ target_link_libraries(Demo6 PRIVATE OpenXLSX::OpenXLSX)
76
+
77
+ #=======================================================================================================================
78
+ # Define Demo7 target
79
+ #=======================================================================================================================
80
+ add_executable(Demo7 Demo7.cpp)
81
+ target_link_libraries(Demo7 PRIVATE OpenXLSX::OpenXLSX)
82
+
83
+ #=======================================================================================================================
84
+ # Define Demo8 target
85
+ #=======================================================================================================================
86
+ add_executable(Demo8 Demo8.cpp)
87
+ target_link_libraries(Demo8 PRIVATE OpenXLSX::OpenXLSX)
88
+
89
+ #=======================================================================================================================
90
+ # Define Demo9 target
91
+ #=======================================================================================================================
92
+ add_executable(Demo9 Demo9.cpp)
93
+ target_link_libraries(Demo9 PRIVATE OpenXLSX::OpenXLSX)
94
+ if (${OPENXLSX_ENABLE_NOWIDE})
95
+ target_compile_definitions(Demo9 PRIVATE ENABLE_NOWIDE)
96
+ target_link_libraries(Demo9 PRIVATE ${NOWIDE_ALIAS})
97
+ endif()
98
+
99
+ #=======================================================================================================================
100
+ # Define Demo10 target
101
+ #=======================================================================================================================
102
+ add_executable(Demo10 Demo10.cpp)
103
+ target_link_libraries(Demo10 PRIVATE OpenXLSX::OpenXLSX)
@@ -0,0 +1,279 @@
1
+ #include <OpenXLSX.hpp>
2
+ #include <iostream>
3
+ #include <cmath>
4
+
5
+ using namespace std;
6
+ using namespace OpenXLSX;
7
+
8
+ /**
9
+ * @brief demo how to iterate over all worksheet comments by sequence in XML - for few comments, this is substantially faster than testing each cell for a non-empty comment
10
+ * @param doc the XLDocument
11
+ * @return n/a
12
+ */
13
+ void printAllDocumentComments(XLDocument const & doc)
14
+ {
15
+ for( size_t i = 1; i <= doc.workbook().worksheetCount(); ++i ) {
16
+ auto wks = doc.workbook().worksheet(i);
17
+ if( wks.hasComments() ) {
18
+ std::cout << "worksheet(" << i << ") with name \"" << wks.name() << "\" has comments" << std::endl;
19
+ XLComments wksComments = wks.comments();
20
+ size_t commentCount = wksComments.count();
21
+ for( size_t idx = 0; idx < commentCount; ++idx ) {
22
+ XLComment com = wksComments.get(idx);
23
+ std::cout << "comment in " << com.ref() << ": \"" << com.text() << "\" (author: " << wksComments.author(com.authorId()) << ")" << std::endl;
24
+ }
25
+ }
26
+ }
27
+ }
28
+
29
+ int main()
30
+ {
31
+ cout << "********************************************************************************\n";
32
+ cout << "DEMO PROGRAM #01: Basic Usage and XLWorksheet protection\n";
33
+ cout << "********************************************************************************\n";
34
+
35
+ // This example program illustrates basic usage of OpenXLSX, for example creation of a new workbook, and read/write
36
+ // of cell values.
37
+
38
+ // First, create a new document and access the sheet named 'Sheet1'.
39
+ // New documents contain a single worksheet named 'Sheet1'
40
+ XLDocument doc;
41
+ doc.create("./Demo01.xlsx", XLForceOverwrite);
42
+ auto wks = doc.workbook().worksheet("Sheet1");
43
+
44
+ // The individual cells can be accessed by using the .cell() method on the worksheet object.
45
+ // The .cell() method can take the cell address as a string, or alternatively take a XLCellReference
46
+ // object. By using an XLCellReference object, the cells can be accessed by row/column coordinates.
47
+ // The .cell() method returns an XLCell object.
48
+
49
+ // The .value() method of an XLCell object can be used for both getting and setting the cell value.
50
+ // Setting the value of a cell can be done by using the assignment operator on the .value() method
51
+ // as shown below. Alternatively, a .set() can be used. The cell values can be floating point numbers,
52
+ // integers, strings, and booleans. It can also accept XLDateTime objects, but this requires special
53
+ // handling (see later).
54
+ wks.cell("A1").value() = 3.14159265358979323846;
55
+ wks.cell("B1").value() = 42;
56
+ wks.cell("C1").value() = " Hello OpenXLSX! ";
57
+ wks.cell("D1").value() = true;
58
+ wks.cell("E1").value() = std::sqrt(-2); // Result is NAN, resulting in an error value in the Excel spreadsheet.
59
+
60
+ // As mentioned, the .value() method can also be used for getting tha value of a cell.
61
+ // The .value() method returns a proxy object that cannot be copied or assigned, but
62
+ // it can be implicitly converted to an XLCellValue object, as shown below.
63
+ // Unfortunately, it is not possible to use the 'auto' keyword, so the XLCellValue
64
+ // type has to be explicitly stated.
65
+ XLCellValue A1 = wks.cell("A1").value();
66
+ XLCellValue B1 = wks.cell("B1").value();
67
+ XLCellValue C1 = wks.cell("C1").value();
68
+ XLCellValue D1 = wks.cell("D1").value();
69
+ XLCellValue E1 = wks.cell("E1").value();
70
+
71
+ // The cell value can be implicitly converted to a basic c++ type. However, if the type does not
72
+ // match the type contained in the XLCellValue object (if, for example, floating point value is
73
+ // assigned to a std::string), then an XLValueTypeError exception will be thrown.
74
+ // To check which type is contained, use the .type() method, which will return a XLValueType enum
75
+ // representing the type. As a convenience, the .typeAsString() method returns the type as a string,
76
+ // which can be useful when printing to console.
77
+ double vA1 = wks.cell("A1").value();
78
+ int vB1 = wks.cell("B1").value();
79
+ std::string vC1 = wks.cell("C1").value();
80
+ bool vD1 = wks.cell("D1").value();
81
+ double vE1 = wks.cell("E1").value();
82
+
83
+ cout << "Cell A1: (" << A1.typeAsString() << ") " << vA1 << endl;
84
+ cout << "Cell B1: (" << B1.typeAsString() << ") " << vB1 << endl;
85
+ cout << "Cell C1: (" << C1.typeAsString() << ") " << vC1 << endl;
86
+ cout << "Cell D1: (" << D1.typeAsString() << ") " << vD1 << endl;
87
+ cout << "Cell E1: (" << E1.typeAsString() << ") " << vE1 << endl << endl;
88
+
89
+ // Instead of using implicit (or explicit) conversion, the underlying value can also be retrieved
90
+ // using the .get() method. This is a templated member function, which takes the desired type
91
+ // as a template argument.
92
+ cout << "Cell A1: (" << A1.typeAsString() << ") " << A1.get<double>() << endl;
93
+ cout << "Cell B1: (" << B1.typeAsString() << ") " << B1.get<int64_t>() << endl;
94
+ cout << "Cell C1: (" << C1.typeAsString() << ") " << C1.get<std::string>() << endl;
95
+ cout << "Cell D1: (" << D1.typeAsString() << ") " << D1.get<bool>() << endl;
96
+ cout << "Cell E1: (" << E1.typeAsString() << ") " << E1.get<double>() << endl << endl;
97
+
98
+ // XLCellValue objects can also be copied and assigned to other cells. This following line
99
+ // will copy and assign the value of cell C1 to cell E1. Note that only the value is copied;
100
+ // other cell properties of the target cell remain unchanged.
101
+
102
+ wks.cell("F1").value() = wks.cell(XLCellReference("C1")).value();
103
+
104
+ XLCellValue F1 = wks.cell("F1").value();
105
+ cout << "Cell F1: (" << F1.typeAsString() << ") " << F1.get<std::string>() << endl << endl;
106
+
107
+ // Date/time values is a special case. In Excel, date/time values are essentially just a
108
+ // 64-bit floating point value, that is rendered as a date/time string using special
109
+ // formatting. When retrieving the cell value, it is just a floating point value,
110
+ // and there is no way to identify it as a date/time value.
111
+ // If, however, you know it to be a date time value, or if you want to assign a date/time
112
+ // value to a cell, you can use the XLDateTime class, which falilitates conversion between
113
+ // Excel date/time serial numbers, and the std::tm struct, that is used to store
114
+ // date/time data. See https://en.cppreference.com/w/cpp/chrono/c/tm for more information.
115
+
116
+ // An XLDateTime object can be created from a std::tm object:
117
+ std::tm tm;
118
+ tm.tm_year = 121;
119
+ tm.tm_mon = 8;
120
+ tm.tm_mday = 1;
121
+ tm.tm_hour = 12;
122
+ tm.tm_min = 0;
123
+ tm.tm_sec = 0;
124
+ XLDateTime dt (tm);
125
+ // XLDateTime dt (43791.583333333299);
126
+
127
+ // The std::tm object can be assigned to a cell value in the same way as shown previously.
128
+ wks.cell("G1").value() = dt;
129
+
130
+ // And as seen previously, an XLCellValue object can be retrieved. However, the object
131
+ // will just contain a floating point value; there is no way to identify it as a date/time value.
132
+ XLCellValue G1 = wks.cell("G1").value();
133
+ cout << "Cell G1: (" << G1.typeAsString() << ") " << G1.get<double>() << endl;
134
+
135
+ // If it is known to be a date/time value, the cell value can be converted to an XLDateTime object.
136
+ auto result = G1.get<XLDateTime>();
137
+
138
+ // The Excel date/time serial number can be retrieved using the .serial() method.
139
+ cout << "Cell G1: (" << G1.typeAsString() << ") " << result.serial() << endl;
140
+
141
+ // Using the .tm() method, the corresponding std::tm object can be retrieved.
142
+ auto tmo = result.tm();
143
+ cout << "Cell G1: (" << G1.typeAsString() << ") " << std::asctime(&tmo);
144
+
145
+ // Setting and deleting formula nodes
146
+ wks.cell("D2").formula().set("=A1+B1");
147
+ wks.cell("E2").formula().set(""); // setting an empty (zero-length) formula string will delete the formula node
148
+
149
+ std::cout << std::endl;
150
+ std::cout << "XLWorksheet comments demo" << std::endl;
151
+ std::cout << "=========================" << std::endl;
152
+ std::cout << "wks.hasComments() is " << (wks.hasComments() ? " TRUE" : "FALSE")
153
+ << ", wks.hasVmlDrawing() is " << (wks.hasVmlDrawing() ? " TRUE" : "FALSE")
154
+ << ", wks.hasTables() is " << (wks.hasTables() ? " TRUE" : "FALSE") << std::endl;
155
+
156
+ XLComments &wksComments = wks.comments(); // fetch comments (and create if missing)
157
+ std::cout << "wks.comments() is " << (wksComments.valid() ? "valid" : "not valid") << std::endl;
158
+ XLTables &wksTables = wks.tables(); // fetch tables (and create if missing)
159
+ std::cout << "wks.tables() is " << (wksTables.valid() ? "valid" : "not valid") << std::endl;
160
+
161
+ std::cout << "wks.hasComments() is " << (wks.hasComments() ? " TRUE" : "FALSE")
162
+ << ", wks.hasVmlDrawing() is " << (wks.hasVmlDrawing() ? " TRUE" : "FALSE")
163
+ << ", wks.hasTables() is " << (wks.hasTables() ? " TRUE" : "FALSE") << std::endl;
164
+
165
+ // 2025-01-17: LibreOffice displays all comments with the same, LibreOffice, author - regardless of author id - to be tested with MS Office
166
+ std::string authors[10] { "Edgar Allan Poe", "Agatha Christie", "J.R.R. Tolkien", "David Eddings", "Daniel Suarez",
167
+ /**/ "Mary Shelley", "George Orwell", "Stanislaw Lem", "Ray Bradbury", "William Shakespeare" };
168
+
169
+ for( std::string author : authors ) {
170
+ wksComments.addAuthor( author );
171
+ uint16_t authorCount = wksComments.authorCount();
172
+ std::cout << "wksComments.authorCount is " << authorCount << std::endl;
173
+ std::cout << "wksComments.author(" << (authorCount - 1) << ") is " << wksComments.author(authorCount - 1) << std::endl;
174
+ }
175
+
176
+ wksComments.deleteAuthor(7);
177
+ wksComments.deleteAuthor(5);
178
+ wksComments.deleteAuthor(3);
179
+ uint16_t authorCount = wksComments.authorCount();
180
+ std::cout << "wksComments.authorCount is " << authorCount << " after deleting authors 7, 5 and 3" << std::endl;
181
+ for( uint16_t index = 0; index < authorCount; ++index )
182
+ std::cout << "wksComments.author(" << (index) << ") is " << wksComments.author(index) << std::endl;
183
+
184
+ wksComments.set("A1", "this comment is for author #0", 0);
185
+ wksComments.set("B2", "this comment is for author #1", 1);
186
+ wksComments.shape("B2").style().show(); // bit cumbersome to access, but it reflects the XML: <v:shape style="[..];visibility=visible">[..]</v:shape>
187
+ wksComments.set("C3", "this comment is for author #2", 2);
188
+ wksComments.set("C3", "this is an updated comment for author #2", 2); // overwrite a comment
189
+ wksComments.shape("C3").style().show();
190
+ wksComments.set("D1", "this comment is for author #4", 4);
191
+ wksComments.set("E2", "this comment is also for author #4", 4);
192
+ bool deleteSuccess = wksComments.deleteComment("E2");
193
+ std::cout << "Deleting the comment in cell E2 " << ( deleteSuccess ? "succeeded" : "did not succeed" ) << "." << std::endl;
194
+ std::cout << std::endl;
195
+ std::cout << "the comment in cell C4 is \"" << wksComments.get("C4") << "\"" << std::endl;
196
+ std::cout << "the comment in cell B2 is \"" << wksComments.get("B2") << "\"" << std::endl;
197
+ std::cout << std::endl;
198
+ printAllDocumentComments(doc);
199
+
200
+ std::cout << std::endl;
201
+ std::cout << "XLWorksheet protection settings demo" << std::endl;
202
+ std::cout << "====================================" << std::endl;
203
+ std::cout << "Default worksheet " << wks.name() << " protection settings: " << std::endl
204
+ /**/ << wks.sheetProtectionSummary() << std::endl;
205
+ std::string password = "test";
206
+ std::string pwHash = ExcelPasswordHashAsString(password);
207
+ wks.setPassword(password); // set password directly
208
+ wks.setPasswordHash(pwHash); // set password via hash
209
+ wks.protectSheet(); // protects all cells that have protected=true
210
+ // protectObjects(bool set = false); // not sure what this would do
211
+ // protectScenarios(bool set = false); // not sure what this would do
212
+ wks.allowSelectUnlockedCells(); // user can select unlocked cells (default)
213
+ wks.denySelectLockedCells(); // user can not select any cells except those that are explicitly unlocked
214
+ // wks.denySelectUnlockedCells(); // somehow this setting REALLY does not make any sense
215
+ // wks.clearPassword(); // clear a password - this will not(!) disable sheet protection but will no longer require a password to unprotect the sheet in a GUI
216
+ // wks.protectSheet(false); // remove sheet protection - this will disable the other protect settings
217
+ // wks.clearSheetProtection(); // this will ALL protection settings, including the password hash
218
+ std::cout << "---" << std::endl;
219
+ std::cout << "Configured worksheet " << wks.name() << " protection settings: " << std::endl
220
+ /**/ << wks.sheetProtectionSummary() << std::endl;
221
+
222
+ // Create a new cell format that unlocks cells
223
+ XLCellFormats & cellFormats = doc.styles().cellFormats();
224
+ XLStyleIndex newCellFormatIndex = cellFormats.create( cellFormats[ wks.cell("C1").cellFormat() ] );
225
+ // cellFormats[ newCellFormatIndex ].setApplyProtection( true ); // seems to be irrelevant
226
+ // cellFormats[ newCellFormatIndex ].setLocked( true ); // locked seems to be default behavior if attribute is not set
227
+ cellFormats[ newCellFormatIndex ].setLocked( false ); // unprotect a cell
228
+
229
+ // wks.cell("D1").setCellFormat(newCellFormatIndex);
230
+ wks.range("C1:D1").setFormat(newCellFormatIndex); // unlock two cells
231
+ std::cout << "====================================" << std::endl;
232
+ std::cout << "==> the worksheet " << wks.name() << " is now protected with the password " << password << std::endl;
233
+ std::cout << std::endl;
234
+
235
+ std::cout << std::endl;
236
+ std::cout << "XLWorksheet testing for empty cells demo.." << std::endl;
237
+ std::cout << "==========================================" << std::endl;
238
+ std::cout << " using an XLCellIterator (recommended)" << std::endl;
239
+ std::cout << " -----------------------------------" << std::endl;
240
+ XLCellRange cellRange = wks.range("A1:G2");
241
+ for (XLCellIterator cellIt = cellRange.begin(); cellIt != cellRange.end(); ++cellIt) {
242
+ if (!cellIt.cellExists()) continue; // prevent cell creation by access for non-existing cells
243
+ std::cout << "cell " << cellIt.address() << " exists!" << std::endl;
244
+ }
245
+
246
+ std::cout << std::endl;
247
+ std::cout << " using XLSheet::findCell (lazy method, not recommended)" << std::endl;
248
+ std::cout << " NOTE: this method should only be used for tests of individual cells when performance is not an issue" << std::endl;
249
+ std::cout << " ------------------------------------------------------" << std::endl;
250
+ for (int row = 1; row < 4; ++row) {
251
+ for (int col = 1; col < 8; ++col) {
252
+ XLCellReference ref(row, col);
253
+ XLCellAssignable c = wks.findCell(ref);
254
+ if (c.empty())
255
+ continue;
256
+
257
+ // It is up to the implementation to decide which tests shall be performed on a cell that exists - here are a few exemplary tests
258
+ std::string valueAsString = c.getString();
259
+ if (valueAsString == "" && !c.hasFormula())
260
+ cout << "cell " << ref.address() << " exists but has no value or formula" << std::endl;
261
+ else {
262
+ // cout << "cell " << ref.address() << " value is |" << c.value() << "|" << std::endl;
263
+ if (valueAsString.length() > 0)
264
+ cout << "cell " << ref.address() << " value is |" << valueAsString << "|" << std::endl;
265
+ if (c.hasFormula()) {
266
+ if (c.formula().get().length() > 0)
267
+ cout << "cell " << ref.address() << " formula is |" << c.formula().get() << "|" << std::endl;
268
+ else // NOTE: this state can not be created with OpenXLSX setter functions, but possibly by other libraries / programs
269
+ cout << "cell " << ref.address() << " has an empty formula" << std::endl;
270
+ }
271
+ }
272
+ }
273
+ }
274
+
275
+ doc.save();
276
+ doc.close();
277
+
278
+ return 0;
279
+ }