react-native-nitro-xlsx 0.1.4 → 0.2.6

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 (428) hide show
  1. package/NitroXlsx.podspec +27 -27
  2. package/Package.swift +35 -10
  3. package/README.md +220 -58
  4. package/android/CMakeLists.txt +24 -27
  5. package/android/cpp-adapter.cpp +12 -0
  6. package/android/src/main/java/com/margelo/nitro/xlsx/NitroXlsxPackage.kt +9 -0
  7. package/cpp/HybridNitroXlsx.cpp +25 -179
  8. package/cpp/HybridNitroXlsx.hpp +2 -2
  9. package/cpp/HybridXlsxConditionalFormat.cpp +252 -0
  10. package/cpp/HybridXlsxConditionalFormat.hpp +62 -0
  11. package/cpp/HybridXlsxConditionalFormats.cpp +46 -0
  12. package/cpp/HybridXlsxConditionalFormats.hpp +28 -0
  13. package/cpp/HybridXlsxWorkbook.cpp +159 -196
  14. package/cpp/HybridXlsxWorkbook.hpp +7 -2
  15. package/cpp/HybridXlsxWorksheet.cpp +433 -62
  16. package/cpp/HybridXlsxWorksheet.hpp +73 -26
  17. package/cpp/XlsxCacheDir.cpp +76 -0
  18. package/cpp/XlsxCacheDir.hpp +27 -0
  19. package/cpp/XlsxError.hpp +68 -0
  20. package/cpp/XlsxJson.cpp +185 -0
  21. package/cpp/XlsxJson.hpp +36 -0
  22. package/ios/XlsxCacheDir.mm +60 -0
  23. package/nitrogen/generated/android/NitroXlsx+autolinking.cmake +2 -0
  24. package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.hpp +5 -3
  25. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.cpp +54 -0
  26. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.hpp +95 -0
  27. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.cpp +24 -0
  28. package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.hpp +68 -0
  29. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp +3 -0
  30. package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.hpp +6 -1
  31. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp +47 -19
  32. package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.hpp +52 -20
  33. package/package.json +3 -3
  34. package/scripts/run-cpp-tests.sh +14 -0
  35. package/src/__mocks__/react-native-nitro-modules.ts +1 -0
  36. package/src/__tests__/index.test.ts +76 -7
  37. package/src/index.ts +107 -18
  38. package/src/specs/NitroXlsx.nitro.ts +141 -44
  39. package/thirdparty/OpenXLSX/.clang-format +118 -0
  40. package/thirdparty/OpenXLSX/.clang-tidy +28 -0
  41. package/thirdparty/OpenXLSX/.gitignore +130 -0
  42. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
  43. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
  44. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
  45. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
  46. package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
  47. package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
  48. package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
  49. package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
  50. package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
  51. package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
  52. package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
  53. package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
  54. package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
  55. package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
  56. package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
  57. package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
  58. package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
  59. package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
  60. package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
  61. package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
  62. package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
  63. package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
  64. package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
  65. package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
  66. package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
  67. package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
  68. package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
  69. package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
  70. package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
  71. package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
  72. package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
  73. package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
  74. package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
  75. package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
  76. package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
  77. package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
  78. package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
  79. package/thirdparty/OpenXLSX/LICENSE.md +29 -0
  80. package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
  81. package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
  82. package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
  83. package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
  84. package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
  85. package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
  86. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
  87. package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
  88. package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
  89. package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
  90. package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
  91. package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
  92. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
  93. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
  94. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
  95. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
  96. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
  97. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
  98. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
  99. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
  100. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
  101. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
  102. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
  103. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
  104. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
  105. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
  106. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
  107. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
  108. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
  109. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
  110. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
  111. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
  112. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
  113. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
  114. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
  115. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
  116. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
  117. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
  118. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
  119. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
  120. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
  121. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
  122. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
  123. package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
  124. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
  125. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
  126. package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
  127. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
  128. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
  129. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
  130. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
  131. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
  132. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
  133. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
  134. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
  135. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
  136. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
  137. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
  138. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
  139. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
  140. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
  141. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
  142. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
  143. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
  144. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
  145. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
  146. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
  147. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
  148. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
  149. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
  150. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
  151. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
  152. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
  153. package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
  154. package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
  155. package/thirdparty/OpenXLSX/README.md +1279 -0
  156. package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
  157. package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
  158. package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
  159. package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
  160. package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
  161. package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
  162. package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
  163. package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
  164. package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
  165. package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
  166. package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
  167. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
  168. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
  169. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
  170. package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
  171. package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
  172. package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
  173. package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
  174. package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
  175. package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
  176. package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
  177. package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
  178. package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
  179. package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
  180. package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
  181. package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
  182. package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
  183. package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
  184. package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
  185. package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
  186. package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
  187. package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
  188. package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
  189. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
  190. package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
  191. package/thirdparty/OpenXLSX/vcpkg.json +24 -0
  192. package/thirdparty/README.md +42 -0
  193. package/thirdparty/miniz/.clang-format +47 -0
  194. package/thirdparty/miniz/.travis.yml +2 -0
  195. package/thirdparty/miniz/CMakeLists.txt +333 -0
  196. package/thirdparty/miniz/CMakePresets.json +31 -0
  197. package/thirdparty/miniz/ChangeLog.md +272 -0
  198. package/thirdparty/miniz/Config.cmake.in +1 -0
  199. package/thirdparty/miniz/LICENSE +22 -0
  200. package/thirdparty/miniz/amalgamate.sh +57 -0
  201. package/thirdparty/miniz/examples/example1.c +105 -0
  202. package/thirdparty/miniz/examples/example2.c +164 -0
  203. package/thirdparty/miniz/examples/example3.c +269 -0
  204. package/thirdparty/miniz/examples/example4.c +102 -0
  205. package/thirdparty/miniz/examples/example5.c +327 -0
  206. package/thirdparty/miniz/examples/example6.c +189 -0
  207. package/thirdparty/miniz/meson.build +21 -0
  208. package/thirdparty/miniz/miniz.c +646 -0
  209. package/thirdparty/miniz/miniz.h +615 -0
  210. package/thirdparty/miniz/miniz.pc.in +13 -0
  211. package/thirdparty/miniz/miniz_common.h +89 -0
  212. package/thirdparty/miniz/miniz_export.h +20 -0
  213. package/thirdparty/miniz/miniz_tdef.c +1602 -0
  214. package/thirdparty/miniz/miniz_tdef.h +199 -0
  215. package/thirdparty/miniz/miniz_tinfl.c +778 -0
  216. package/thirdparty/miniz/miniz_tinfl.h +150 -0
  217. package/thirdparty/miniz/miniz_zip.c +4895 -0
  218. package/thirdparty/miniz/miniz_zip.h +454 -0
  219. package/thirdparty/miniz/readme.md +46 -0
  220. package/thirdparty/miniz/test.sh +36 -0
  221. package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
  222. package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
  223. package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
  224. package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
  225. package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
  226. package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
  227. package/thirdparty/miniz/tests/fuzz_main.c +55 -0
  228. package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
  229. package/thirdparty/miniz/tests/main.cpp +185 -0
  230. package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
  231. package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
  232. package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
  233. package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
  234. package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
  235. package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
  236. package/thirdparty/miniz/tests/timer.cpp +152 -0
  237. package/thirdparty/miniz/tests/timer.h +40 -0
  238. package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
  239. package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
  240. package/thirdparty/miniz/tests/zip.dict +9 -0
  241. package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
  242. package/thirdparty/pugixml/.codecov.yml +7 -0
  243. package/thirdparty/pugixml/.gitattributes +1 -0
  244. package/thirdparty/pugixml/CMakeLists.txt +330 -0
  245. package/thirdparty/pugixml/LICENSE.md +24 -0
  246. package/thirdparty/pugixml/Makefile +98 -0
  247. package/thirdparty/pugixml/README.md +81 -0
  248. package/thirdparty/pugixml/SECURITY.md +9 -0
  249. package/thirdparty/pugixml/appveyor.yml +50 -0
  250. package/thirdparty/pugixml/docs/config.adoc +7 -0
  251. package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
  252. package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
  253. package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
  254. package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
  255. package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
  256. package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
  257. package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
  258. package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
  259. package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
  260. package/thirdparty/pugixml/docs/manual.adoc +3326 -0
  261. package/thirdparty/pugixml/docs/manual.html +6395 -0
  262. package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
  263. package/thirdparty/pugixml/docs/quickstart.html +1107 -0
  264. package/thirdparty/pugixml/docs/samples/character.xml +8 -0
  265. package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
  266. package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
  267. package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
  268. package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
  269. package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
  270. package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
  271. package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
  272. package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
  273. package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
  274. package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
  275. package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
  276. package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
  277. package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
  278. package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
  279. package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
  280. package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
  281. package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
  282. package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
  283. package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
  284. package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
  285. package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
  286. package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
  287. package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
  288. package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
  289. package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
  290. package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
  291. package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
  292. package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
  293. package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
  294. package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
  295. package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
  296. package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
  297. package/thirdparty/pugixml/readme.txt +50 -0
  298. package/thirdparty/pugixml/scripts/archive.py +54 -0
  299. package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
  300. package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
  301. package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
  302. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
  303. package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
  304. package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
  305. package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
  306. package/thirdparty/pugixml/scripts/premake4.lua +92 -0
  307. package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
  308. package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
  309. package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
  310. package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
  311. package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
  312. package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
  313. package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
  314. package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
  315. package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
  316. package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
  317. package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
  318. package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
  319. package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
  320. package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
  321. package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
  322. package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
  323. package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
  324. package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
  325. package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
  326. package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
  327. package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
  328. package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
  329. package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
  330. package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
  331. package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
  332. package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
  333. package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
  334. package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
  335. package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
  336. package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
  337. package/thirdparty/pugixml/tests/allocator.cpp +175 -0
  338. package/thirdparty/pugixml/tests/allocator.hpp +10 -0
  339. package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
  340. package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
  341. package/thirdparty/pugixml/tests/data/empty.xml +0 -0
  342. package/thirdparty/pugixml/tests/data/large.xml +1 -0
  343. package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
  344. package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
  345. package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
  346. package/thirdparty/pugixml/tests/data/small.xml +1 -0
  347. package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
  348. package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
  349. package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
  350. package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
  351. package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
  352. package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
  353. package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
  354. package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
  355. package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
  356. package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
  357. package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
  358. package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
  359. package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
  360. package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
  361. package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
  362. package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
  363. package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
  364. package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
  365. package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
  366. package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
  367. package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
  368. package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
  369. package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
  370. package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
  371. package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
  372. package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
  373. package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
  374. package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
  375. package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
  376. package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
  377. package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
  378. package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
  379. package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
  380. package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
  381. package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
  382. package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
  383. package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
  384. package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
  385. package/thirdparty/pugixml/tests/helpers.hpp +114 -0
  386. package/thirdparty/pugixml/tests/main.cpp +218 -0
  387. package/thirdparty/pugixml/tests/test.cpp +220 -0
  388. package/thirdparty/pugixml/tests/test.hpp +175 -0
  389. package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
  390. package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
  391. package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
  392. package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
  393. package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
  394. package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
  395. package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
  396. package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
  397. package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
  398. package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
  399. package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
  400. package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
  401. package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
  402. package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
  403. package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
  404. package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
  405. package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
  406. package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
  407. package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
  408. package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
  409. package/thirdparty/pugixml/tests/test_version.cpp +5 -0
  410. package/thirdparty/pugixml/tests/test_write.cpp +757 -0
  411. package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
  412. package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
  413. package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
  414. package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
  415. package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
  416. package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
  417. package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
  418. package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
  419. package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
  420. package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
  421. package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
  422. package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
  423. package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
  424. package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
  425. package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
  426. package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
  427. package/ios/dummy.swift +0 -2
  428. package/scripts/prepare-openxlsx.js +0 -109
@@ -1,5 +1,9 @@
1
1
  #include "HybridXlsxWorksheet.hpp"
2
+ #include "XlsxError.hpp"
3
+ #include "XlsxJson.hpp"
4
+ #include <OpenXLSX/XLCellReference.hpp>
2
5
  #include <cstring>
6
+ #include <cmath>
3
7
  #include <fstream>
4
8
  #include <chrono>
5
9
 
@@ -23,71 +27,93 @@ void HybridXlsxWorksheet::applyFormat(OpenXLSX::XLCell& cell, const std::optiona
23
27
  }
24
28
 
25
29
  void HybridXlsxWorksheet::writeString(double row, double col, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
26
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
27
- cell.value() = value;
28
- applyFormat(cell, format);
30
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
31
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
32
+ cell.value() = value;
33
+ applyFormat(cell, format);
34
+ });
29
35
  }
30
36
 
31
37
  void HybridXlsxWorksheet::writeNumber(double row, double col, double value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
32
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
33
- cell.value() = value;
34
- applyFormat(cell, format);
38
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
39
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
40
+ cell.value() = value;
41
+ applyFormat(cell, format);
42
+ });
35
43
  }
36
44
 
37
45
  void HybridXlsxWorksheet::writeBoolean(double row, double col, bool value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
38
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
39
- cell.value() = value;
40
- applyFormat(cell, format);
46
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
47
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
48
+ cell.value() = value;
49
+ applyFormat(cell, format);
50
+ });
41
51
  }
42
52
 
43
53
  void HybridXlsxWorksheet::writeBlank(double row, double col, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
44
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
45
- applyFormat(cell, format);
54
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
55
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
56
+ applyFormat(cell, format);
57
+ });
46
58
  }
47
59
 
48
60
  void HybridXlsxWorksheet::writeFormula(double row, double col, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
49
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
50
- cell.formula() = formula;
51
- applyFormat(cell, format);
61
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
62
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
63
+ cell.formula() = formula;
64
+ applyFormat(cell, format);
65
+ });
52
66
  }
53
67
 
54
68
  void HybridXlsxWorksheet::writeFormulaNum(double row, double col, const std::string& formula, double number, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
55
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
56
- cell.formula() = formula;
57
- cell.value() = number;
58
- applyFormat(cell, format);
69
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
70
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
71
+ cell.formula() = formula;
72
+ cell.value() = number;
73
+ applyFormat(cell, format);
74
+ });
59
75
  }
60
76
 
61
77
  void HybridXlsxWorksheet::writeFormulaString(double row, double col, const std::string& formula, const std::string& str, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
62
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
63
- cell.formula() = formula;
64
- cell.value() = str;
65
- applyFormat(cell, format);
78
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
79
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
80
+ cell.formula() = formula;
81
+ cell.value() = str;
82
+ applyFormat(cell, format);
83
+ });
66
84
  }
67
85
 
68
86
  void HybridXlsxWorksheet::writeFormulaBoolean(double row, double col, const std::string& formula, bool boolVal, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
69
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
70
- cell.formula() = formula;
71
- cell.value() = boolVal;
72
- applyFormat(cell, format);
87
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
88
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
89
+ cell.formula() = formula;
90
+ cell.value() = boolVal;
91
+ applyFormat(cell, format);
92
+ });
73
93
  }
74
94
 
75
95
  void HybridXlsxWorksheet::writeArrayFormula(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& formula, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
76
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
77
- cell.formula() = formula;
78
- applyFormat(cell, format);
96
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
97
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
98
+ cell.formula() = formula;
99
+ applyFormat(cell, format);
100
+ });
79
101
  }
80
102
 
81
103
  void HybridXlsxWorksheet::writeDatetime(double row, double col, double datetime, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
82
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
83
- cell.value() = datetime;
84
- applyFormat(cell, format);
104
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
105
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
106
+ cell.value() = datetime;
107
+ applyFormat(cell, format);
108
+ });
85
109
  }
86
110
 
87
111
  void HybridXlsxWorksheet::writeURL(double row, double col, const std::string& url, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
88
- OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
89
- cell.value() = url;
90
- applyFormat(cell, format);
112
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
113
+ OpenXLSX::XLCell cell = _worksheet.cell(static_cast<unsigned int>(row), static_cast<unsigned int>(col));
114
+ cell.value() = url;
115
+ applyFormat(cell, format);
116
+ });
91
117
  }
92
118
 
93
119
  void HybridXlsxWorksheet::setColumn(double firstCol, double lastCol, double width, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
@@ -123,6 +149,54 @@ void HybridXlsxWorksheet::setRow(double row, double height, const std::optional<
123
149
  }
124
150
  }
125
151
 
152
+ bool HybridXlsxWorksheet::deleteRow(double row) {
153
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
154
+ return _worksheet.deleteRow(static_cast<uint32_t>(row));
155
+ });
156
+ }
157
+
158
+ bool HybridXlsxWorksheet::deleteColumn(double col) {
159
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
160
+ unsigned int targetCol = static_cast<unsigned int>(col);
161
+ if (targetCol < 1) {
162
+ throw XlsxError(xlsx_error::INVALID_ARGUMENT, "Column index must be >= 1");
163
+ }
164
+
165
+ unsigned int lastCol = _worksheet.columnCount();
166
+ unsigned int lastRow = _worksheet.rowCount();
167
+ if (targetCol > lastCol) {
168
+ return false;
169
+ }
170
+
171
+ // Shift cell contents left for every row
172
+ for (unsigned int r = 1; r <= lastRow; ++r) {
173
+ for (unsigned int c = targetCol + 1; c <= lastCol; ++c) {
174
+ OpenXLSX::XLCell src = _worksheet.cell(r, c);
175
+ OpenXLSX::XLCell dst = _worksheet.cell(r, c - 1);
176
+ if (!src.empty()) {
177
+ dst.copyFrom(src);
178
+ dst.setCellFormat(src.cellFormat());
179
+ } else {
180
+ dst.clear(0);
181
+ }
182
+ }
183
+ // Clear the trailing column
184
+ OpenXLSX::XLCell trailing = _worksheet.cell(r, lastCol);
185
+ trailing.clear(0);
186
+ }
187
+
188
+ // Shift column widths / hidden state left
189
+ for (unsigned int c = targetCol + 1; c <= lastCol; ++c) {
190
+ OpenXLSX::XLColumn srcCol = _worksheet.column(c);
191
+ OpenXLSX::XLColumn dstCol = _worksheet.column(c - 1);
192
+ dstCol.setWidth(srcCol.width());
193
+ dstCol.setHidden(srcCol.isHidden());
194
+ }
195
+
196
+ return true;
197
+ });
198
+ }
199
+
126
200
  void HybridXlsxWorksheet::mergeRange(double firstRow, double firstCol, double lastRow, double lastCol, const std::string& value, const std::optional<std::shared_ptr<HybridXlsxCellFormatSpec>>& format) {
127
201
  OpenXLSX::XLCellReference topLeft(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
128
202
  OpenXLSX::XLCellReference bottomRight(static_cast<unsigned int>(lastRow), static_cast<unsigned int>(lastCol));
@@ -143,75 +217,251 @@ void HybridXlsxWorksheet::mergeRangeNum(double firstRow, double firstCol, double
143
217
  applyFormat(cell, format);
144
218
  }
145
219
 
146
- void HybridXlsxWorksheet::insertImage(double row, double col, const std::string& path, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) {
220
+ void HybridXlsxWorksheet::unmergeCells(double firstRow, double firstCol, double lastRow, double lastCol) {
221
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
222
+ OpenXLSX::XLCellReference topLeft(static_cast<unsigned int>(firstRow), static_cast<unsigned int>(firstCol));
223
+ OpenXLSX::XLCellReference bottomRight(static_cast<unsigned int>(lastRow), static_cast<unsigned int>(lastCol));
224
+ std::string rangeRef = topLeft.address() + ":" + bottomRight.address();
225
+ _worksheet.unmergeCells(rangeRef);
226
+ });
227
+ }
228
+
229
+ void HybridXlsxWorksheet::hide() {
230
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
231
+ _worksheet.setVisibility(OpenXLSX::XLSheetState::Hidden);
232
+ });
233
+ }
234
+
235
+ void HybridXlsxWorksheet::activate() {
236
+ _worksheet.setActive();
147
237
  }
148
238
 
149
- void HybridXlsxWorksheet::insertImageBuffer(double row, double col, const std::shared_ptr<ArrayBuffer>& buffer, const std::string& extension, std::optional<double> xOffset, std::optional<double> yOffset, std::optional<double> xScale, std::optional<double> yScale) {
239
+ // ========== Sheet protection ==========
240
+
241
+ namespace {
242
+ // OpenXLSX defaults `set` to true when the argument is omitted
243
+ bool resolveSet(const std::optional<bool>& set) {
244
+ return set.value_or(true);
245
+ }
150
246
  }
151
247
 
152
- void HybridXlsxWorksheet::autofilter(double firstRow, double firstCol, double lastRow, double lastCol) {
248
+ void HybridXlsxWorksheet::protect(const std::optional<std::string>& password) {
249
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
250
+ if (password.has_value() && !password->empty()) {
251
+ if (!_worksheet.setPassword(*password)) {
252
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set sheet password");
253
+ }
254
+ }
255
+ if (!_worksheet.protectSheet()) {
256
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to protect sheet");
257
+ }
258
+ });
153
259
  }
154
260
 
155
- void HybridXlsxWorksheet::freezePanes(double row, double col) {
261
+ void HybridXlsxWorksheet::protectSheet(std::optional<bool> set) {
262
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
263
+ if (!_worksheet.protectSheet(resolveSet(set))) {
264
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set protectSheet");
265
+ }
266
+ });
156
267
  }
157
268
 
158
- void HybridXlsxWorksheet::splitPanes(double row, double col) {
269
+ void HybridXlsxWorksheet::protectObjects(std::optional<bool> set) {
270
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
271
+ if (!_worksheet.protectObjects(resolveSet(set))) {
272
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set protectObjects");
273
+ }
274
+ });
159
275
  }
160
276
 
161
- void HybridXlsxWorksheet::setTabColor(double color) {
277
+ void HybridXlsxWorksheet::protectScenarios(std::optional<bool> set) {
278
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
279
+ if (!_worksheet.protectScenarios(resolveSet(set))) {
280
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set protectScenarios");
281
+ }
282
+ });
162
283
  }
163
284
 
164
- void HybridXlsxWorksheet::hide() {
285
+ // ========== Password ==========
286
+
287
+ void HybridXlsxWorksheet::setPassword(const std::string& password) {
288
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
289
+ if (!_worksheet.setPassword(password)) {
290
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set password");
291
+ }
292
+ });
165
293
  }
166
294
 
167
- void HybridXlsxWorksheet::activate() {
168
- _worksheet.setActive();
295
+ void HybridXlsxWorksheet::setPasswordHash(const std::string& hash) {
296
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
297
+ if (!_worksheet.setPasswordHash(hash)) {
298
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set password hash");
299
+ }
300
+ });
169
301
  }
170
302
 
171
- void HybridXlsxWorksheet::setFirstSheet() {
303
+ void HybridXlsxWorksheet::clearPassword() {
304
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
305
+ if (!_worksheet.clearPassword()) {
306
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to clear password");
307
+ }
308
+ });
172
309
  }
173
310
 
174
- void HybridXlsxWorksheet::protect(const std::optional<std::string>& password) {
175
- if (password.has_value() && !password->empty()) {
176
- _worksheet.setPassword(*password);
177
- }
178
- _worksheet.protectSheet();
311
+ void HybridXlsxWorksheet::clearSheetProtection() {
312
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
313
+ if (!_worksheet.clearSheetProtection()) {
314
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to clear sheet protection");
315
+ }
316
+ });
317
+ }
318
+
319
+ // ========== Fine-grained permissions ==========
320
+
321
+ void HybridXlsxWorksheet::allowInsertColumns(std::optional<bool> set) {
322
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
323
+ if (!_worksheet.allowInsertColumns(resolveSet(set))) {
324
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowInsertColumns");
325
+ }
326
+ });
327
+ }
328
+
329
+ void HybridXlsxWorksheet::allowInsertRows(std::optional<bool> set) {
330
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
331
+ if (!_worksheet.allowInsertRows(resolveSet(set))) {
332
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowInsertRows");
333
+ }
334
+ });
335
+ }
336
+
337
+ void HybridXlsxWorksheet::allowDeleteColumns(std::optional<bool> set) {
338
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
339
+ if (!_worksheet.allowDeleteColumns(resolveSet(set))) {
340
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowDeleteColumns");
341
+ }
342
+ });
343
+ }
344
+
345
+ void HybridXlsxWorksheet::allowDeleteRows(std::optional<bool> set) {
346
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
347
+ if (!_worksheet.allowDeleteRows(resolveSet(set))) {
348
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowDeleteRows");
349
+ }
350
+ });
179
351
  }
180
352
 
181
- void HybridXlsxWorksheet::setPortrait() {
353
+ void HybridXlsxWorksheet::allowSelectLockedCells(std::optional<bool> set) {
354
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
355
+ if (!_worksheet.allowSelectLockedCells(resolveSet(set))) {
356
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowSelectLockedCells");
357
+ }
358
+ });
182
359
  }
183
360
 
184
- void HybridXlsxWorksheet::setLandscape() {
361
+ void HybridXlsxWorksheet::allowSelectUnlockedCells(std::optional<bool> set) {
362
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
363
+ if (!_worksheet.allowSelectUnlockedCells(resolveSet(set))) {
364
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set allowSelectUnlockedCells");
365
+ }
366
+ });
185
367
  }
186
368
 
187
- void HybridXlsxWorksheet::setPaper(double paperType) {
369
+ void HybridXlsxWorksheet::denyInsertColumns() {
370
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
371
+ if (!_worksheet.denyInsertColumns()) {
372
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denyInsertColumns");
373
+ }
374
+ });
188
375
  }
189
376
 
190
- void HybridXlsxWorksheet::setHeader(const std::string& header) {
377
+ void HybridXlsxWorksheet::denyInsertRows() {
378
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
379
+ if (!_worksheet.denyInsertRows()) {
380
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denyInsertRows");
381
+ }
382
+ });
191
383
  }
192
384
 
193
- void HybridXlsxWorksheet::setFooter(const std::string& footer) {
385
+ void HybridXlsxWorksheet::denyDeleteColumns() {
386
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
387
+ if (!_worksheet.denyDeleteColumns()) {
388
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denyDeleteColumns");
389
+ }
390
+ });
194
391
  }
195
392
 
196
- void HybridXlsxWorksheet::setPrintArea(double firstRow, double firstCol, double lastRow, double lastCol) {
393
+ void HybridXlsxWorksheet::denyDeleteRows() {
394
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
395
+ if (!_worksheet.denyDeleteRows()) {
396
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denyDeleteRows");
397
+ }
398
+ });
197
399
  }
198
400
 
199
- void HybridXlsxWorksheet::fitToPages(double width, double height) {
401
+ void HybridXlsxWorksheet::denySelectLockedCells() {
402
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
403
+ if (!_worksheet.denySelectLockedCells()) {
404
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denySelectLockedCells");
405
+ }
406
+ });
200
407
  }
201
408
 
202
- void HybridXlsxWorksheet::setZoom(double scale) {
409
+ void HybridXlsxWorksheet::denySelectUnlockedCells() {
410
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
411
+ if (!_worksheet.denySelectUnlockedCells()) {
412
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to denySelectUnlockedCells");
413
+ }
414
+ });
203
415
  }
204
416
 
205
- void HybridXlsxWorksheet::setGridlines(double option) {
417
+ // ========== Protection state ==========
418
+
419
+ bool HybridXlsxWorksheet::sheetProtected() {
420
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.sheetProtected(); });
421
+ }
422
+
423
+ bool HybridXlsxWorksheet::objectsProtected() {
424
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.objectsProtected(); });
425
+ }
426
+
427
+ bool HybridXlsxWorksheet::scenariosProtected() {
428
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.scenariosProtected(); });
429
+ }
430
+
431
+ bool HybridXlsxWorksheet::insertColumnsAllowed() {
432
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.insertColumnsAllowed(); });
206
433
  }
207
434
 
208
- void HybridXlsxWorksheet::centerHorizontally() {
435
+ bool HybridXlsxWorksheet::insertRowsAllowed() {
436
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.insertRowsAllowed(); });
209
437
  }
210
438
 
211
- void HybridXlsxWorksheet::centerVertically() {
439
+ bool HybridXlsxWorksheet::deleteColumnsAllowed() {
440
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.deleteColumnsAllowed(); });
212
441
  }
213
442
 
214
- void HybridXlsxWorksheet::setOutline(double level) {
443
+ bool HybridXlsxWorksheet::deleteRowsAllowed() {
444
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.deleteRowsAllowed(); });
445
+ }
446
+
447
+ bool HybridXlsxWorksheet::selectLockedCellsAllowed() {
448
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.selectLockedCellsAllowed(); });
449
+ }
450
+
451
+ bool HybridXlsxWorksheet::selectUnlockedCellsAllowed() {
452
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.selectUnlockedCellsAllowed(); });
453
+ }
454
+
455
+ bool HybridXlsxWorksheet::passwordIsSet() {
456
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.passwordIsSet(); });
457
+ }
458
+
459
+ std::string HybridXlsxWorksheet::passwordHash() {
460
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.passwordHash(); });
461
+ }
462
+
463
+ std::string HybridXlsxWorksheet::sheetProtectionSummary() {
464
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] { return _worksheet.sheetProtectionSummary(); });
215
465
  }
216
466
 
217
467
  void HybridXlsxWorksheet::setColumnHidden(double firstCol, double lastCol, bool hidden) {
@@ -341,4 +591,125 @@ std::string HybridXlsxWorksheet::getName() {
341
591
  return _worksheet.name();
342
592
  }
343
593
 
594
+ void HybridXlsxWorksheet::applyRename(const std::string& oldName, const std::string& newName) {
595
+ _worksheet.setName(newName);
596
+ _worksheet.updateSheetName(oldName, newName);
597
+ }
598
+
599
+ void HybridXlsxWorksheet::rewriteSheetNameRef(const std::string& oldName, const std::string& newName) {
600
+ _worksheet.updateSheetName(oldName, newName);
601
+ }
602
+
603
+ // ========== JSON import / export (this worksheet) ==========
604
+
605
+ std::vector<std::shared_ptr<AnyMap>> HybridXlsxWorksheet::toJSON(const std::optional<std::vector<std::string>>& keys) {
606
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
607
+ return worksheetToRecords(_worksheet, keys);
608
+ });
609
+ }
610
+
611
+ void HybridXlsxWorksheet::fromJSON(const std::vector<std::shared_ptr<AnyMap>>& data) {
612
+ withXlsxError(xlsx_error::INVALID_ARGUMENT, [&] {
613
+ recordsToWorksheet(_worksheet, data);
614
+ });
615
+ }
616
+
617
+ std::string HybridXlsxWorksheet::cellAddress(double row, double col) {
618
+ return OpenXLSX::XLCellReference(static_cast<uint32_t>(row), static_cast<uint16_t>(col)).address();
619
+ }
620
+
621
+ // ========== Comments ==========
622
+
623
+ void HybridXlsxWorksheet::setComment(double row, double col, const std::string& text, std::optional<double> authorId) {
624
+ withXlsxError(xlsx_error::XLSX_ERROR, [&] {
625
+ std::string ref = cellAddress(row, col);
626
+ auto& comments = _worksheet.comments();
627
+ // Excel requires every comment's authorId to reference a real <author> entry.
628
+ // OpenXLSX does not auto-register authors, so ensure at least one exists here;
629
+ // otherwise the generated comments.xml has an empty <authors> + a dangling authorId,
630
+ // which Excel flags as "We found a problem with some content".
631
+ if (comments.authorCount() == 0) {
632
+ comments.addAuthor("Author"); // becomes index 0
633
+ }
634
+ uint16_t author = authorId.has_value() ? static_cast<uint16_t>(*authorId) : 0;
635
+ if (author >= comments.authorCount()) {
636
+ author = 0; // fall back to a valid author
637
+ }
638
+ if (!comments.set(ref, text, author)) {
639
+ throw XlsxError(xlsx_error::XLSX_ERROR, "Failed to set comment for cell " + ref);
640
+ }
641
+ });
642
+ }
643
+
644
+ std::string HybridXlsxWorksheet::getComment(double row, double col) {
645
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
646
+ return _worksheet.comments().get(cellAddress(row, col));
647
+ });
648
+ }
649
+
650
+ bool HybridXlsxWorksheet::hasComment(double row, double col) {
651
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
652
+ std::string text = _worksheet.comments().get(cellAddress(row, col));
653
+ return !text.empty();
654
+ });
655
+ }
656
+
657
+ bool HybridXlsxWorksheet::deleteComment(double row, double col) {
658
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
659
+ return _worksheet.comments().deleteComment(cellAddress(row, col));
660
+ });
661
+ }
662
+
663
+ double HybridXlsxWorksheet::getCommentCount() {
664
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
665
+ return static_cast<double>(_worksheet.comments().count());
666
+ });
667
+ }
668
+
669
+ double HybridXlsxWorksheet::addCommentAuthor(const std::string& author) {
670
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
671
+ return static_cast<double>(_worksheet.comments().addAuthor(author));
672
+ });
673
+ }
674
+
675
+ std::string HybridXlsxWorksheet::getCommentAuthor(double authorId) {
676
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
677
+ return _worksheet.comments().author(static_cast<uint16_t>(authorId));
678
+ });
679
+ }
680
+
681
+ // ========== Conditional formatting ==========
682
+
683
+ std::shared_ptr<HybridXlsxConditionalFormatsSpec> HybridXlsxWorksheet::getConditionalFormats() {
684
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
685
+ return std::static_pointer_cast<HybridXlsxConditionalFormatsSpec>(
686
+ std::make_shared<HybridXlsxConditionalFormats>(_worksheet.conditionalFormats()));
687
+ });
688
+ }
689
+
690
+ // ========== Formula / findCell ==========
691
+
692
+ bool HybridXlsxWorksheet::hasFormula(double row, double col) {
693
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
694
+ OpenXLSX::XLCellAssignable cell = _worksheet.findCell(static_cast<uint32_t>(row), static_cast<uint16_t>(col));
695
+ if (cell.empty()) return false;
696
+ return cell.hasFormula();
697
+ });
698
+ }
699
+
700
+ std::string HybridXlsxWorksheet::formula(double row, double col) {
701
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
702
+ OpenXLSX::XLCellAssignable cell = _worksheet.findCell(static_cast<uint32_t>(row), static_cast<uint16_t>(col));
703
+ if (cell.empty() || !cell.hasFormula()) return std::string();
704
+ return cell.formula().get();
705
+ });
706
+ }
707
+
708
+ bool HybridXlsxWorksheet::findCell(double row, double col) {
709
+ return withXlsxError(xlsx_error::XLSX_ERROR, [&] {
710
+ OpenXLSX::XLCellAssignable cell = _worksheet.findCell(static_cast<uint32_t>(row), static_cast<uint16_t>(col));
711
+ return !cell.empty();
712
+ });
713
+ }
714
+
344
715
  }