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.
- package/NitroXlsx.podspec +27 -27
- package/Package.swift +35 -10
- package/README.md +220 -58
- package/android/CMakeLists.txt +24 -27
- package/android/cpp-adapter.cpp +12 -0
- package/android/src/main/java/com/margelo/nitro/xlsx/NitroXlsxPackage.kt +9 -0
- package/cpp/HybridNitroXlsx.cpp +25 -179
- package/cpp/HybridNitroXlsx.hpp +2 -2
- package/cpp/HybridXlsxConditionalFormat.cpp +252 -0
- package/cpp/HybridXlsxConditionalFormat.hpp +62 -0
- package/cpp/HybridXlsxConditionalFormats.cpp +46 -0
- package/cpp/HybridXlsxConditionalFormats.hpp +28 -0
- package/cpp/HybridXlsxWorkbook.cpp +159 -196
- package/cpp/HybridXlsxWorkbook.hpp +7 -2
- package/cpp/HybridXlsxWorksheet.cpp +433 -62
- package/cpp/HybridXlsxWorksheet.hpp +73 -26
- package/cpp/XlsxCacheDir.cpp +76 -0
- package/cpp/XlsxCacheDir.hpp +27 -0
- package/cpp/XlsxError.hpp +68 -0
- package/cpp/XlsxJson.cpp +185 -0
- package/cpp/XlsxJson.hpp +36 -0
- package/ios/XlsxCacheDir.mm +60 -0
- package/nitrogen/generated/android/NitroXlsx+autolinking.cmake +2 -0
- package/nitrogen/generated/shared/c++/HybridNitroXlsxSpec.hpp +5 -3
- package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.cpp +54 -0
- package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatSpec.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridXlsxConditionalFormatsSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.cpp +3 -0
- package/nitrogen/generated/shared/c++/HybridXlsxWorkbookSpec.hpp +6 -1
- package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.cpp +47 -19
- package/nitrogen/generated/shared/c++/HybridXlsxWorksheetSpec.hpp +52 -20
- package/package.json +3 -3
- package/scripts/run-cpp-tests.sh +14 -0
- package/src/__mocks__/react-native-nitro-modules.ts +1 -0
- package/src/__tests__/index.test.ts +76 -7
- package/src/index.ts +107 -18
- package/src/specs/NitroXlsx.nitro.ts +141 -44
- package/thirdparty/OpenXLSX/.clang-format +118 -0
- package/thirdparty/OpenXLSX/.clang-tidy +28 -0
- package/thirdparty/OpenXLSX/.gitignore +130 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_before_XMLNode_wrappers +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_and_stripping +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_char_support +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespace_support +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-07-29-benchmarks_with_XMLNode_wrappers_and_namespaced_name_disabled +49 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-08-11-benchmarks_post-XLCellIterator-Rework +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-08-14-benchmarks_post-default-row-column-style-support +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-09-02-benchmarks +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-12-19-benchmarks +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2024-12-30-benchmarks-post-XLSharedStrings-by-ref +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-09-benchmarks-post-conditionalFormatsAndSheetProtection +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-10-benchmarks-post-XLCellValue-bugfix +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-01-31-benchmarks-post-XLComments-implementation +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-02-02-benchmarks-post-XLRowIterator-Rework +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-07-20-benchmarks-after-hiding-pugixml-internals +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/2025-08-29-benchmarks-after-code-review-with-libzip +46 -0
- package/thirdparty/OpenXLSX/Benchmarks/Benchmark.cpp +249 -0
- package/thirdparty/OpenXLSX/Benchmarks/CMakeLists.txt +19 -0
- package/thirdparty/OpenXLSX/CMakeLists.txt +466 -0
- package/thirdparty/OpenXLSX/Documentation/CMakeLists.txt +31 -0
- package/thirdparty/OpenXLSX/Documentation/Doxyfile.in +2471 -0
- package/thirdparty/OpenXLSX/Documentation/DoxygenLayout.xml +194 -0
- package/thirdparty/OpenXLSX/Documentation/customdoxygen.css +1355 -0
- package/thirdparty/OpenXLSX/Examples/CMakeLists.txt +103 -0
- package/thirdparty/OpenXLSX/Examples/Demo1.cpp +279 -0
- package/thirdparty/OpenXLSX/Examples/Demo10.cpp +545 -0
- package/thirdparty/OpenXLSX/Examples/Demo1A.cpp +137 -0
- package/thirdparty/OpenXLSX/Examples/Demo2.cpp +65 -0
- package/thirdparty/OpenXLSX/Examples/Demo3.cpp +89 -0
- package/thirdparty/OpenXLSX/Examples/Demo4.cpp +86 -0
- package/thirdparty/OpenXLSX/Examples/Demo5.cpp +77 -0
- package/thirdparty/OpenXLSX/Examples/Demo6.cpp +103 -0
- package/thirdparty/OpenXLSX/Examples/Demo7.cpp +79 -0
- package/thirdparty/OpenXLSX/Examples/Demo8.cpp +117 -0
- package/thirdparty/OpenXLSX/Examples/Demo9.cpp +363 -0
- package/thirdparty/OpenXLSX/Examples/cmake/FindLIBZIP.cmake +61 -0
- package/thirdparty/OpenXLSX/Examples/external/CustomZip/CustomZip.hpp +256 -0
- package/thirdparty/OpenXLSX/LICENSE.md +29 -0
- package/thirdparty/OpenXLSX/Makefile.GNU +530 -0
- package/thirdparty/OpenXLSX/Notes/TBDs.txt +16 -0
- package/thirdparty/OpenXLSX/Notes/confirmed-TBCs.txt +8 -0
- package/thirdparty/OpenXLSX/Notes/styles-missing-support.xml +12 -0
- package/thirdparty/OpenXLSX/Notes/todo-list.txt +108 -0
- package/thirdparty/OpenXLSX/OpenXLSX/CMakeLists.txt +631 -0
- package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSX.hpp +63 -0
- package/thirdparty/OpenXLSX/OpenXLSX/OpenXLSXConfig.cmake +11 -0
- package/thirdparty/OpenXLSX/OpenXLSX/cmake/bundle_static_library.cmake +198 -0
- package/thirdparty/OpenXLSX/OpenXLSX/cmake/patch_pkg_config.cmake +69 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/IZipArchive.hpp +361 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/OpenXLSX-Exports.hpp +12 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCell.hpp +367 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellIterator.hpp +252 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellRange.hpp +223 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellReference.hpp +317 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCellValue.hpp +793 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColor.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLColumn.hpp +159 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLCommandQuery.hpp +228 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLComments.hpp +270 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLConstants.hpp +18 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLContentTypes.hpp +264 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDateTime.hpp +175 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDocument.hpp +505 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLDrawing.hpp +452 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLException.hpp +161 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLFormula.hpp +375 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLIterator.hpp +40 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLMergeCells.hpp +216 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLProperties.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRelationships.hpp +348 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRow.hpp +721 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLRowData.hpp +488 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSharedStrings.hpp +204 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLSheet.hpp +1640 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLStyles.hpp +2390 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLTables.hpp +132 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLWorkbook.hpp +404 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlData.hpp +283 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlFile.hpp +194 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParser.hpp +282 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLXmlParserForwardDeclarations.hpp +85 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/XLZipArchive.hpp +232 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/LibZip.hpp +447 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/OpenXLSXFileSystemTools.hpp +207 -0
- package/thirdparty/OpenXLSX/OpenXLSX/headers/detail/Zippy.hpp +1375 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCell.cpp +340 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellIterator.cpp +427 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellRange.cpp +221 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellReference.cpp +408 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLCellValue.cpp +519 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColor.cpp +202 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLColumn.cpp +141 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLComments.cpp +637 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLContentTypes.cpp +329 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDateTime.cpp +269 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDocument.cpp +1678 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLDrawing.cpp +784 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLFormula.cpp +201 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLMergeCells.cpp +357 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLProperties.cpp +810 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRelationships.cpp +529 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRow.cpp +918 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLRowData.cpp +508 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSharedStrings.cpp +220 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLSheet.cpp +1970 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLStyles.cpp +3014 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLTables.cpp +125 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLWorkbook.cpp +784 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlData.cpp +247 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlFile.cpp +160 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLXmlParser.cpp +261 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/XLZipArchive.cpp +266 -0
- package/thirdparty/OpenXLSX/OpenXLSX/sources/utilities/XLUtilities.hpp +478 -0
- package/thirdparty/OpenXLSX/README.md +1279 -0
- package/thirdparty/OpenXLSX/Scripts/cmake-cleanup.sh +102 -0
- package/thirdparty/OpenXLSX/Scripts/compile.sh +23 -0
- package/thirdparty/OpenXLSX/Scripts/demos-cleanup.sh +25 -0
- package/thirdparty/OpenXLSX/Scripts/demos-run-all.sh +60 -0
- package/thirdparty/OpenXLSX/Scripts/guarded-xml-format.sh +47 -0
- package/thirdparty/OpenXLSX/Scripts/make-gnu.sh +11 -0
- package/thirdparty/OpenXLSX/Scripts/uninstall-manifest.sh +48 -0
- package/thirdparty/OpenXLSX/Scripts/xml-format-all.sh +19 -0
- package/thirdparty/OpenXLSX/Scripts/xml-format.sh +38 -0
- package/thirdparty/OpenXLSX/Tests/CMakeLists.txt +37 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch.hpp +17799 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_automake.hpp +68 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_sonarqube.hpp +182 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_tap.hpp +278 -0
- package/thirdparty/OpenXLSX/Tests/catch/catch_reporter_teamcity.hpp +212 -0
- package/thirdparty/OpenXLSX/Tests/main.cpp +55 -0
- package/thirdparty/OpenXLSX/Tests/testXLCell.cpp +176 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellRange.cpp +180 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellReference.cpp +160 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellValue.cpp +366 -0
- package/thirdparty/OpenXLSX/Tests/testXLCellValueProxy.cpp +255 -0
- package/thirdparty/OpenXLSX/Tests/testXLColor.cpp +75 -0
- package/thirdparty/OpenXLSX/Tests/testXLDateTime.cpp +229 -0
- package/thirdparty/OpenXLSX/Tests/testXLDocument.cpp +197 -0
- package/thirdparty/OpenXLSX/Tests/testXLFormula.cpp +131 -0
- package/thirdparty/OpenXLSX/Tests/testXLRow.cpp +597 -0
- package/thirdparty/OpenXLSX/Tests/testXLSheet.cpp +77 -0
- package/thirdparty/OpenXLSX/Tests/ziptest-with-libs.cpp +88 -0
- package/thirdparty/OpenXLSX/Tests/ziptest.cpp +735 -0
- package/thirdparty/OpenXLSX/cmake/get-git-HEAD-ID.cmake +45 -0
- package/thirdparty/OpenXLSX/cmake/libopenxlsxCPackOptions.cmake.in +20 -0
- package/thirdparty/OpenXLSX/cmake/manage_dependency.cmake +813 -0
- package/thirdparty/OpenXLSX/cmake/recursive_library_type_test.cmake +52 -0
- package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-shared.hpp +42 -0
- package/thirdparty/OpenXLSX/gnu-make-crutch/OpenXLSX-Exports-static.hpp +42 -0
- package/thirdparty/OpenXLSX/vcpkg.json +24 -0
- package/thirdparty/README.md +42 -0
- package/thirdparty/miniz/.clang-format +47 -0
- package/thirdparty/miniz/.travis.yml +2 -0
- package/thirdparty/miniz/CMakeLists.txt +333 -0
- package/thirdparty/miniz/CMakePresets.json +31 -0
- package/thirdparty/miniz/ChangeLog.md +272 -0
- package/thirdparty/miniz/Config.cmake.in +1 -0
- package/thirdparty/miniz/LICENSE +22 -0
- package/thirdparty/miniz/amalgamate.sh +57 -0
- package/thirdparty/miniz/examples/example1.c +105 -0
- package/thirdparty/miniz/examples/example2.c +164 -0
- package/thirdparty/miniz/examples/example3.c +269 -0
- package/thirdparty/miniz/examples/example4.c +102 -0
- package/thirdparty/miniz/examples/example5.c +327 -0
- package/thirdparty/miniz/examples/example6.c +189 -0
- package/thirdparty/miniz/meson.build +21 -0
- package/thirdparty/miniz/miniz.c +646 -0
- package/thirdparty/miniz/miniz.h +615 -0
- package/thirdparty/miniz/miniz.pc.in +13 -0
- package/thirdparty/miniz/miniz_common.h +89 -0
- package/thirdparty/miniz/miniz_export.h +20 -0
- package/thirdparty/miniz/miniz_tdef.c +1602 -0
- package/thirdparty/miniz/miniz_tdef.h +199 -0
- package/thirdparty/miniz/miniz_tinfl.c +778 -0
- package/thirdparty/miniz/miniz_tinfl.h +150 -0
- package/thirdparty/miniz/miniz_zip.c +4895 -0
- package/thirdparty/miniz/miniz_zip.h +454 -0
- package/thirdparty/miniz/readme.md +46 -0
- package/thirdparty/miniz/test.sh +36 -0
- package/thirdparty/miniz/tests/add_in_place_fuzzer.c +87 -0
- package/thirdparty/miniz/tests/catch_amalgamated.cpp +10795 -0
- package/thirdparty/miniz/tests/catch_amalgamated.hpp +13143 -0
- package/thirdparty/miniz/tests/checksum_fuzzer.c +26 -0
- package/thirdparty/miniz/tests/compress_fuzzer.c +91 -0
- package/thirdparty/miniz/tests/flush_fuzzer.c +88 -0
- package/thirdparty/miniz/tests/fuzz_main.c +55 -0
- package/thirdparty/miniz/tests/large_fuzzer.c +133 -0
- package/thirdparty/miniz/tests/main.cpp +185 -0
- package/thirdparty/miniz/tests/miniz_tdefl_fuzzer.cc +115 -0
- package/thirdparty/miniz/tests/miniz_tester.cpp +1881 -0
- package/thirdparty/miniz/tests/miniz_zip_validate_fuzzer.cc +71 -0
- package/thirdparty/miniz/tests/miniz_zip_writer_fuzzer.cc +96 -0
- package/thirdparty/miniz/tests/ossfuzz.sh +48 -0
- package/thirdparty/miniz/tests/small_fuzzer.c +126 -0
- package/thirdparty/miniz/tests/timer.cpp +152 -0
- package/thirdparty/miniz/tests/timer.h +40 -0
- package/thirdparty/miniz/tests/uncompress2_fuzzer.c +21 -0
- package/thirdparty/miniz/tests/uncompress_fuzzer.c +30 -0
- package/thirdparty/miniz/tests/zip.dict +9 -0
- package/thirdparty/miniz/tests/zip_fuzzer.c +63 -0
- package/thirdparty/pugixml/.codecov.yml +7 -0
- package/thirdparty/pugixml/.gitattributes +1 -0
- package/thirdparty/pugixml/CMakeLists.txt +330 -0
- package/thirdparty/pugixml/LICENSE.md +24 -0
- package/thirdparty/pugixml/Makefile +98 -0
- package/thirdparty/pugixml/README.md +81 -0
- package/thirdparty/pugixml/SECURITY.md +9 -0
- package/thirdparty/pugixml/appveyor.yml +50 -0
- package/thirdparty/pugixml/docs/config.adoc +7 -0
- package/thirdparty/pugixml/docs/images/dom_tree.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_link1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_link2.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch2.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch3.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2005_pch4.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2010_link1.png +0 -0
- package/thirdparty/pugixml/docs/images/vs2010_link2.png +0 -0
- package/thirdparty/pugixml/docs/manual.adoc +3326 -0
- package/thirdparty/pugixml/docs/manual.html +6395 -0
- package/thirdparty/pugixml/docs/quickstart.adoc +287 -0
- package/thirdparty/pugixml/docs/quickstart.html +1107 -0
- package/thirdparty/pugixml/docs/samples/character.xml +8 -0
- package/thirdparty/pugixml/docs/samples/custom_memory_management.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/include.cpp +64 -0
- package/thirdparty/pugixml/docs/samples/load_error_handling.cpp +33 -0
- package/thirdparty/pugixml/docs/samples/load_file.cpp +16 -0
- package/thirdparty/pugixml/docs/samples/load_memory.cpp +66 -0
- package/thirdparty/pugixml/docs/samples/load_options.cpp +30 -0
- package/thirdparty/pugixml/docs/samples/load_stream.cpp +97 -0
- package/thirdparty/pugixml/docs/samples/modify_add.cpp +29 -0
- package/thirdparty/pugixml/docs/samples/modify_base.cpp +43 -0
- package/thirdparty/pugixml/docs/samples/modify_remove.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/save_custom_writer.cpp +116 -0
- package/thirdparty/pugixml/docs/samples/save_declaration.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/save_file.cpp +17 -0
- package/thirdparty/pugixml/docs/samples/save_options.cpp +48 -0
- package/thirdparty/pugixml/docs/samples/save_stream.cpp +18 -0
- package/thirdparty/pugixml/docs/samples/save_subtree.cpp +26 -0
- package/thirdparty/pugixml/docs/samples/text.cpp +35 -0
- package/thirdparty/pugixml/docs/samples/transitions.xml +7 -0
- package/thirdparty/pugixml/docs/samples/traverse_base.cpp +51 -0
- package/thirdparty/pugixml/docs/samples/traverse_iter.cpp +27 -0
- package/thirdparty/pugixml/docs/samples/traverse_predicate.cpp +48 -0
- package/thirdparty/pugixml/docs/samples/traverse_rangefor.cpp +32 -0
- package/thirdparty/pugixml/docs/samples/traverse_walker.cpp +35 -0
- package/thirdparty/pugixml/docs/samples/tree.xml +12 -0
- package/thirdparty/pugixml/docs/samples/weekly-shift_jis.xml +78 -0
- package/thirdparty/pugixml/docs/samples/weekly-utf-16.xml +0 -0
- package/thirdparty/pugixml/docs/samples/weekly-utf-8.xml +78 -0
- package/thirdparty/pugixml/docs/samples/xgconsole.xml +12 -0
- package/thirdparty/pugixml/docs/samples/xpath_error.cpp +43 -0
- package/thirdparty/pugixml/docs/samples/xpath_query.cpp +36 -0
- package/thirdparty/pugixml/docs/samples/xpath_select.cpp +28 -0
- package/thirdparty/pugixml/docs/samples/xpath_variables.cpp +38 -0
- package/thirdparty/pugixml/readme.txt +50 -0
- package/thirdparty/pugixml/scripts/archive.py +54 -0
- package/thirdparty/pugixml/scripts/cocoapods_push.sh +4 -0
- package/thirdparty/pugixml/scripts/natvis/pugixml.natvis +77 -0
- package/thirdparty/pugixml/scripts/natvis/pugixml_compact.natvis +506 -0
- package/thirdparty/pugixml/scripts/nuget/build/native/pugixml-propertiesui.xml +17 -0
- package/thirdparty/pugixml/scripts/nuget/build/native/pugixml.targets +28 -0
- package/thirdparty/pugixml/scripts/nuget/pugixml.nuspec +20 -0
- package/thirdparty/pugixml/scripts/nuget_build.ps1 +60 -0
- package/thirdparty/pugixml/scripts/premake4.lua +92 -0
- package/thirdparty/pugixml/scripts/pugixml-config.cmake.in +12 -0
- package/thirdparty/pugixml/scripts/pugixml.pc.in +11 -0
- package/thirdparty/pugixml/scripts/pugixml.podspec +14 -0
- package/thirdparty/pugixml/scripts/pugixml.xcodeproj/project.pbxproj +212 -0
- package/thirdparty/pugixml/scripts/pugixml_airplay.mkf +13 -0
- package/thirdparty/pugixml/scripts/pugixml_codeblocks.cbp +44 -0
- package/thirdparty/pugixml/scripts/pugixml_codelite.project +56 -0
- package/thirdparty/pugixml/scripts/pugixml_dll.rc +45 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2005.vcproj +343 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2005_static.vcproj +343 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2008.vcproj +339 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2008_static.vcproj +339 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2010.vcxproj +191 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2010_static.vcxproj +191 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2013.vcxproj +199 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2013_static.vcxproj +199 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2015.vcxproj +172 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2015_static.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2017.vcxproj +172 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2017_static.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2019.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2019_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2022.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2022_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2026.vcxproj +176 -0
- package/thirdparty/pugixml/scripts/pugixml_vs2026_static.vcxproj +180 -0
- package/thirdparty/pugixml/scripts/sbom.cdx.json +47 -0
- package/thirdparty/pugixml/src/pugiconfig.hpp +81 -0
- package/thirdparty/pugixml/src/pugixml.cpp +13776 -0
- package/thirdparty/pugixml/src/pugixml.hpp +1604 -0
- package/thirdparty/pugixml/tests/allocator.cpp +175 -0
- package/thirdparty/pugixml/tests/allocator.hpp +10 -0
- package/thirdparty/pugixml/tests/autotest-appveyor.ps1 +93 -0
- package/thirdparty/pugixml/tests/cmake-appveyor.ps1 +57 -0
- package/thirdparty/pugixml/tests/data/empty.xml +0 -0
- package/thirdparty/pugixml/tests/data/large.xml +1 -0
- package/thirdparty/pugixml/tests/data/latintest_latin1.xml +1 -0
- package/thirdparty/pugixml/tests/data/latintest_utf8.xml +1 -0
- package/thirdparty/pugixml/tests/data/multiline.xml +3 -0
- package/thirdparty/pugixml/tests/data/small.xml +1 -0
- package/thirdparty/pugixml/tests/data/truncation.xml +19 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_be_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf16_le_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_be_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_bom.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_clean.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf32_le_nodecl.xml +0 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8.xml +87 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_bom.xml +87 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_clean.xml +84 -0
- package/thirdparty/pugixml/tests/data/utftest_utf8_nodecl.xml +86 -0
- package/thirdparty/pugixml/tests/data//321/202/320/265/321/201/321/202.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/basic.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/doctype.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/refs.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/types.xml +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/utf16.xml +0 -0
- package/thirdparty/pugixml/tests/data_fuzz_parse/utf32.xml +0 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/basic.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/functions.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/math.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/path.xpath +1 -0
- package/thirdparty/pugixml/tests/data_fuzz_xpath/predicate.xpath +1 -0
- package/thirdparty/pugixml/tests/fuzz_parse.cpp +14 -0
- package/thirdparty/pugixml/tests/fuzz_parse.dict +72 -0
- package/thirdparty/pugixml/tests/fuzz_setup.sh +11 -0
- package/thirdparty/pugixml/tests/fuzz_xpath.cpp +46 -0
- package/thirdparty/pugixml/tests/fuzz_xpath.dict +72 -0
- package/thirdparty/pugixml/tests/helpers.hpp +114 -0
- package/thirdparty/pugixml/tests/main.cpp +218 -0
- package/thirdparty/pugixml/tests/test.cpp +220 -0
- package/thirdparty/pugixml/tests/test.hpp +175 -0
- package/thirdparty/pugixml/tests/test_compact.cpp +150 -0
- package/thirdparty/pugixml/tests/test_deprecated.cpp +25 -0
- package/thirdparty/pugixml/tests/test_document.cpp +1910 -0
- package/thirdparty/pugixml/tests/test_dom_modify.cpp +2122 -0
- package/thirdparty/pugixml/tests/test_dom_text.cpp +601 -0
- package/thirdparty/pugixml/tests/test_dom_traverse.cpp +1481 -0
- package/thirdparty/pugixml/tests/test_header_guard.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iosfwd_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iosfwd_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iostream_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_iostream_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_only_1.cpp +21 -0
- package/thirdparty/pugixml/tests/test_header_only_2.cpp +21 -0
- package/thirdparty/pugixml/tests/test_header_string_1.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_string_2.cpp +3 -0
- package/thirdparty/pugixml/tests/test_header_string_iostream.cpp +5 -0
- package/thirdparty/pugixml/tests/test_memory.cpp +303 -0
- package/thirdparty/pugixml/tests/test_parse.cpp +1463 -0
- package/thirdparty/pugixml/tests/test_parse_doctype.cpp +366 -0
- package/thirdparty/pugixml/tests/test_unicode.cpp +152 -0
- package/thirdparty/pugixml/tests/test_version.cpp +5 -0
- package/thirdparty/pugixml/tests/test_write.cpp +757 -0
- package/thirdparty/pugixml/tests/test_xpath.cpp +833 -0
- package/thirdparty/pugixml/tests/test_xpath_api.cpp +646 -0
- package/thirdparty/pugixml/tests/test_xpath_functions.cpp +844 -0
- package/thirdparty/pugixml/tests/test_xpath_operators.cpp +566 -0
- package/thirdparty/pugixml/tests/test_xpath_parse.cpp +428 -0
- package/thirdparty/pugixml/tests/test_xpath_paths.cpp +787 -0
- package/thirdparty/pugixml/tests/test_xpath_paths_abbrev_w3c.cpp +219 -0
- package/thirdparty/pugixml/tests/test_xpath_paths_w3c.cpp +312 -0
- package/thirdparty/pugixml/tests/test_xpath_variables.cpp +683 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_1.cpp +411 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_2.cpp +417 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_3.cpp +321 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_4.cpp +300 -0
- package/thirdparty/pugixml/tests/test_xpath_xalan_5.cpp +295 -0
- package/thirdparty/pugixml/tests/writer_string.cpp +79 -0
- package/thirdparty/pugixml/tests/writer_string.hpp +27 -0
- package/ios/dummy.swift +0 -2
- package/scripts/prepare-openxlsx.js +0 -109
|
@@ -0,0 +1,721 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
____ ____ ___ ____ ____ ____ ___
|
|
4
|
+
6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
|
|
5
|
+
8P Y8 `MM. d' MM 6M' ` `MM. d'
|
|
6
|
+
6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
|
|
7
|
+
MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
|
|
8
|
+
MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
|
|
9
|
+
MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
|
|
10
|
+
MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
|
|
11
|
+
YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
|
|
12
|
+
8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
|
|
13
|
+
YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
|
|
14
|
+
MM
|
|
15
|
+
MM
|
|
16
|
+
_MM_
|
|
17
|
+
|
|
18
|
+
Copyright (c) 2018, Kenneth Troldal Balslev
|
|
19
|
+
|
|
20
|
+
All rights reserved.
|
|
21
|
+
|
|
22
|
+
Redistribution and use in source and binary forms, with or without
|
|
23
|
+
modification, are permitted provided that the following conditions are met:
|
|
24
|
+
- Redistributions of source code must retain the above copyright
|
|
25
|
+
notice, this list of conditions and the following disclaimer.
|
|
26
|
+
- Redistributions in binary form must reproduce the above copyright
|
|
27
|
+
notice, this list of conditions and the following disclaimer in the
|
|
28
|
+
documentation and/or other materials provided with the distribution.
|
|
29
|
+
- Neither the name of the author nor the
|
|
30
|
+
names of any contributors may be used to endorse or promote products
|
|
31
|
+
derived from this software without specific prior written permission.
|
|
32
|
+
|
|
33
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
34
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
35
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
36
|
+
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
37
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
38
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
39
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
40
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
41
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
42
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
43
|
+
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
#ifndef OPENXLSX_XLROW_HPP
|
|
47
|
+
#define OPENXLSX_XLROW_HPP
|
|
48
|
+
|
|
49
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
50
|
+
# pragma warning(push)
|
|
51
|
+
# pragma warning(disable : 4251)
|
|
52
|
+
# pragma warning(disable : 4275)
|
|
53
|
+
#endif // _MSC_VER
|
|
54
|
+
|
|
55
|
+
// ===== OpenXLSX Includes ===== //
|
|
56
|
+
#include "OpenXLSX-Exports.hpp"
|
|
57
|
+
#include "XLRowData.hpp"
|
|
58
|
+
|
|
59
|
+
// ========== CLASS AND ENUM TYPE DEFINITIONS ========== //
|
|
60
|
+
namespace OpenXLSX
|
|
61
|
+
{
|
|
62
|
+
class XLRowRange;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @brief The XLRow class represent a row in an Excel spreadsheet. Using XLRow objects, various row formatting
|
|
66
|
+
* options can be set and modified.
|
|
67
|
+
*/
|
|
68
|
+
class OPENXLSX_EXPORT XLRow
|
|
69
|
+
{
|
|
70
|
+
friend class XLRowIterator;
|
|
71
|
+
friend class XLRowReverseIterator;
|
|
72
|
+
friend class XLRowDataProxy;
|
|
73
|
+
friend bool operator==(const XLRow& lhs, const XLRow& rhs);
|
|
74
|
+
friend bool operator!=(const XLRow& lhs, const XLRow& rhs);
|
|
75
|
+
friend bool operator<(const XLRow& lhs, const XLRow& rhs);
|
|
76
|
+
friend bool operator>(const XLRow& lhs, const XLRow& rhs);
|
|
77
|
+
friend bool operator<=(const XLRow& lhs, const XLRow& rhs);
|
|
78
|
+
friend bool operator>=(const XLRow& lhs, const XLRow& rhs);
|
|
79
|
+
|
|
80
|
+
//---------- PUBLIC MEMBER FUNCTIONS ----------//
|
|
81
|
+
public:
|
|
82
|
+
/**
|
|
83
|
+
* @brief Default constructor
|
|
84
|
+
*/
|
|
85
|
+
XLRow();
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @brief
|
|
89
|
+
* @param rowNode
|
|
90
|
+
* @param sharedStrings
|
|
91
|
+
*/
|
|
92
|
+
XLRow(const XMLNode& rowNode, const XLSharedStrings& sharedStrings);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @brief Copy Constructor
|
|
96
|
+
* @note The copy constructor is explicitly deleted
|
|
97
|
+
*/
|
|
98
|
+
XLRow(const XLRow& other);
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @brief Move Constructor
|
|
102
|
+
* @note The move constructor has been explicitly deleted.
|
|
103
|
+
*/
|
|
104
|
+
XLRow(XLRow&& other) noexcept;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @brief Destructor
|
|
108
|
+
* @note The destructor has a default implementation.
|
|
109
|
+
*/
|
|
110
|
+
~XLRow();
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @brief Copy assignment operator.
|
|
114
|
+
*/
|
|
115
|
+
XLRow& operator=(const XLRow& other);
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @brief Move assignment operator.
|
|
119
|
+
*/
|
|
120
|
+
XLRow& operator=(XLRow&& other) noexcept;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @brief test if row object has no (valid) content
|
|
124
|
+
* @return
|
|
125
|
+
*/
|
|
126
|
+
bool empty() const;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @brief opposite of empty()
|
|
130
|
+
* @return
|
|
131
|
+
*/
|
|
132
|
+
explicit operator bool() const;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @brief Get the height of the row.
|
|
136
|
+
* @return the row height.
|
|
137
|
+
*/
|
|
138
|
+
double height() const;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @brief Set the height of the row.
|
|
142
|
+
* @param height The height of the row.
|
|
143
|
+
*/
|
|
144
|
+
void setHeight(float height);
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @brief Get the descent of the row, which is the vertical distance in pixels from the bottom of the cells
|
|
148
|
+
* in the current row to the typographical baseline of the cell content.
|
|
149
|
+
* @return The row descent.
|
|
150
|
+
*/
|
|
151
|
+
float descent() const;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @brief Set the descent of the row, which is he vertical distance in pixels from the bottom of the cells
|
|
155
|
+
* in the current row to the typographical baseline of the cell content.
|
|
156
|
+
* @param descent The row descent.
|
|
157
|
+
*/
|
|
158
|
+
void setDescent(float descent);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @brief Is the row hidden?
|
|
162
|
+
* @return The state of the row.
|
|
163
|
+
*/
|
|
164
|
+
bool isHidden() const;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @brief Set the row to be hidden or visible.
|
|
168
|
+
* @param state The state of the row.
|
|
169
|
+
*/
|
|
170
|
+
void setHidden(bool state);
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @brief
|
|
174
|
+
* @return
|
|
175
|
+
*/
|
|
176
|
+
uint32_t rowNumber() const;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @brief Get the number of cells in the row.
|
|
180
|
+
* @return The number of cells in the row.
|
|
181
|
+
*/
|
|
182
|
+
uint16_t cellCount() const;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @brief
|
|
186
|
+
* @return
|
|
187
|
+
*/
|
|
188
|
+
XLRowDataProxy& values();
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* @brief
|
|
192
|
+
* @return
|
|
193
|
+
*/
|
|
194
|
+
const XLRowDataProxy& values() const;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @brief
|
|
198
|
+
* @tparam T
|
|
199
|
+
* @return
|
|
200
|
+
*/
|
|
201
|
+
template<typename T>
|
|
202
|
+
T values() const
|
|
203
|
+
{
|
|
204
|
+
return static_cast<T>(values());
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* @brief
|
|
209
|
+
* @return
|
|
210
|
+
*/
|
|
211
|
+
XLRowDataRange cells() const;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @brief
|
|
215
|
+
* @param cellCount
|
|
216
|
+
* @return
|
|
217
|
+
*/
|
|
218
|
+
XLRowDataRange cells(uint16_t cellCount) const;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @brief
|
|
222
|
+
* @param firstCell
|
|
223
|
+
* @param lastCell
|
|
224
|
+
* @return
|
|
225
|
+
*/
|
|
226
|
+
XLRowDataRange cells(uint16_t firstCell, uint16_t lastCell) const;
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @brief Find a cell at columNumber, or return an empty cell
|
|
230
|
+
* @param columNumber The column at which to check for an existing cell
|
|
231
|
+
* @return An XLCell object (that bool-evaluates to false if cell was not found)
|
|
232
|
+
*/
|
|
233
|
+
XLCell findCell(uint16_t columNumber);
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @brief Get the array index of xl/styles.xml:<styleSheet>:<cellXfs> for the style assigned to the row.
|
|
237
|
+
* This value is stored in the row attributes like so: s="2"
|
|
238
|
+
* @returns The index of the applicable format style
|
|
239
|
+
*/
|
|
240
|
+
XLStyleIndex format() const;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* @brief Set the row style as a reference to the array index of xl/styles.xml:<styleSheet>:<cellXfs>
|
|
244
|
+
* @param cellFormatIndex The style to set, corresponding to the index of XLStyles::cellStyles()
|
|
245
|
+
* @returns true on success, false on failure
|
|
246
|
+
*/
|
|
247
|
+
bool setFormat(XLStyleIndex cellFormatIndex);
|
|
248
|
+
|
|
249
|
+
private:
|
|
250
|
+
/**
|
|
251
|
+
* @brief
|
|
252
|
+
* @param lhs
|
|
253
|
+
* @param rhs
|
|
254
|
+
* @return
|
|
255
|
+
*/
|
|
256
|
+
static bool isEqual(const XLRow& lhs, const XLRow& rhs);
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* @brief
|
|
260
|
+
* @param lhs
|
|
261
|
+
* @param rhs
|
|
262
|
+
* @return
|
|
263
|
+
*/
|
|
264
|
+
static bool isLessThan(const XLRow& lhs, const XLRow& rhs);
|
|
265
|
+
|
|
266
|
+
//---------- PRIVATE MEMBER VARIABLES ----------//
|
|
267
|
+
std::unique_ptr<XMLNode> m_rowNode; /**< The XMLNode object for the row. */
|
|
268
|
+
XLSharedStringsRef m_sharedStrings; /**< */
|
|
269
|
+
XLRowDataProxy m_rowDataProxy; /**< */
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @brief
|
|
274
|
+
*/
|
|
275
|
+
class OPENXLSX_EXPORT XLRowIterator
|
|
276
|
+
{
|
|
277
|
+
public:
|
|
278
|
+
using iterator_category = std::forward_iterator_tag;
|
|
279
|
+
using value_type = XLRow;
|
|
280
|
+
using difference_type = int64_t;
|
|
281
|
+
using pointer = XLRow*;
|
|
282
|
+
using reference = XLRow&;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @brief constructor
|
|
286
|
+
* @param rowRange
|
|
287
|
+
* @param loc
|
|
288
|
+
*/
|
|
289
|
+
explicit XLRowIterator(const XLRowRange& rowRange, XLIteratorLocation loc);
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* @brief
|
|
293
|
+
*/
|
|
294
|
+
~XLRowIterator();
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @brief copy constructor
|
|
298
|
+
* @param other
|
|
299
|
+
*/
|
|
300
|
+
XLRowIterator(const XLRowIterator& other);
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @brief move constructor
|
|
304
|
+
* @param other
|
|
305
|
+
*/
|
|
306
|
+
XLRowIterator(XLRowIterator&& other) noexcept;
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* @brief copy assignment operator
|
|
310
|
+
* @param other
|
|
311
|
+
* @return
|
|
312
|
+
*/
|
|
313
|
+
XLRowIterator& operator=(const XLRowIterator& other);
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* @brief move assignment operator
|
|
317
|
+
* @param other
|
|
318
|
+
* @return
|
|
319
|
+
*/
|
|
320
|
+
XLRowIterator& operator=(XLRowIterator&& other) noexcept;
|
|
321
|
+
|
|
322
|
+
private: // ===== Switch to private method that is used by the XLRowIterator increment operator++ and the dereference operators * and ->
|
|
323
|
+
static constexpr const bool XLCreateIfMissing = true; // code readability for updateCurrentRow parameter createIfMissing
|
|
324
|
+
static constexpr const bool XLDoNotCreateIfMissing = false; // "
|
|
325
|
+
/**
|
|
326
|
+
* @brief update m_currentRow by fetching (or inserting) a row at m_currentRowNumber
|
|
327
|
+
* @param createIfMissing m_currentRow will only be inserted if createIfMissing is true
|
|
328
|
+
*/
|
|
329
|
+
void updateCurrentRow(bool createIfMissing);
|
|
330
|
+
|
|
331
|
+
public: // ===== Switch back to public methods
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @brief
|
|
335
|
+
* @return
|
|
336
|
+
*/
|
|
337
|
+
XLRowIterator& operator++();
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @brief
|
|
341
|
+
* @return
|
|
342
|
+
*/
|
|
343
|
+
XLRowIterator operator++(int); // NOLINT
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* @brief
|
|
347
|
+
* @return
|
|
348
|
+
*/
|
|
349
|
+
reference operator*();
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* @brief
|
|
353
|
+
* @return
|
|
354
|
+
*/
|
|
355
|
+
pointer operator->();
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @brief
|
|
359
|
+
* @param rhs
|
|
360
|
+
* @return
|
|
361
|
+
*/
|
|
362
|
+
bool operator==(const XLRowIterator& rhs) const;
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* @brief
|
|
366
|
+
* @param rhs
|
|
367
|
+
* @return
|
|
368
|
+
*/
|
|
369
|
+
bool operator!=(const XLRowIterator& rhs) const;
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* @brief
|
|
373
|
+
* @return
|
|
374
|
+
*/
|
|
375
|
+
explicit operator bool() const;
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* @brief determine whether the row that the iterator points to exists (m_currentRowNumber)
|
|
379
|
+
* @return true if XML already has an entry for that cell, otherwise false
|
|
380
|
+
*/
|
|
381
|
+
bool rowExists();
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* @brief determine whether iterator is at 1 beyond the last row in range
|
|
385
|
+
* @return
|
|
386
|
+
*/
|
|
387
|
+
bool endReached() const { return m_endReached; }
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* @brief get the row number corresponding to the current iterator position
|
|
391
|
+
* @return a row number, with m_lastRow + 1 for the beyond-the-end iterator
|
|
392
|
+
*/
|
|
393
|
+
uint32_t rowNumber() const { return m_endReached ? m_lastRow + 1 : m_currentRowNumber; }
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* @brief check the iterator direction
|
|
397
|
+
* @return XLIteratorDirection::Forward
|
|
398
|
+
*/
|
|
399
|
+
constexpr XLIteratorDirection direction() const { return XLIteratorDirection::Forward; }
|
|
400
|
+
|
|
401
|
+
private:
|
|
402
|
+
std::unique_ptr<XMLNode> m_dataNode; /**< */
|
|
403
|
+
uint32_t m_firstRow { 1 }; /**< The cell reference of the first cell in the range */
|
|
404
|
+
uint32_t m_lastRow { 1 }; /**< The cell reference of the last cell in the range */
|
|
405
|
+
XLRow m_currentRow; /**< */
|
|
406
|
+
XLSharedStringsRef m_sharedStrings; /**< */
|
|
407
|
+
|
|
408
|
+
// helper variables for non-creating iterator functionality
|
|
409
|
+
bool m_endReached; /**< */
|
|
410
|
+
std::unique_ptr<XMLNode> m_hintRow; /**< The cell node of the last existing row found up to current iterator position */
|
|
411
|
+
uint32_t m_hintRowNumber; /**< the row number for m_hintRow */
|
|
412
|
+
static constexpr const int XLNotLoaded = 0; // code readability for m_currentRowStatus
|
|
413
|
+
static constexpr const int XLNoSuchRow = 1; // "
|
|
414
|
+
static constexpr const int XLLoaded = 2; // "
|
|
415
|
+
int m_currentRowStatus; /**< Status of m_currentRow: XLNotLoaded, XLNoSuchRow or XLLoaded */
|
|
416
|
+
uint32_t m_currentRowNumber;
|
|
417
|
+
};
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* @brief
|
|
421
|
+
*/
|
|
422
|
+
class OPENXLSX_EXPORT XLRowReverseIterator
|
|
423
|
+
{
|
|
424
|
+
public:
|
|
425
|
+
using iterator_category = std::forward_iterator_tag;
|
|
426
|
+
using value_type = XLRow;
|
|
427
|
+
using difference_type = int64_t;
|
|
428
|
+
using pointer = XLRow*;
|
|
429
|
+
using reference = XLRow&;
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* @brief constructor
|
|
433
|
+
* @param rowRange
|
|
434
|
+
* @param loc
|
|
435
|
+
*/
|
|
436
|
+
explicit XLRowReverseIterator(const XLRowRange& rowRange, XLIteratorLocation loc);
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* @brief
|
|
440
|
+
*/
|
|
441
|
+
~XLRowReverseIterator();
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* @brief copy constructor
|
|
445
|
+
* @param other
|
|
446
|
+
*/
|
|
447
|
+
XLRowReverseIterator(const XLRowReverseIterator& other);
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* @brief move constructor
|
|
451
|
+
* @param other
|
|
452
|
+
*/
|
|
453
|
+
XLRowReverseIterator(XLRowReverseIterator&& other) noexcept;
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* @brief copy assignment operator
|
|
457
|
+
* @param other
|
|
458
|
+
* @return
|
|
459
|
+
*/
|
|
460
|
+
XLRowReverseIterator& operator=(const XLRowReverseIterator& other);
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* @brief move assignment operator
|
|
464
|
+
* @param other
|
|
465
|
+
* @return
|
|
466
|
+
*/
|
|
467
|
+
XLRowReverseIterator& operator=(XLRowReverseIterator&& other) noexcept;
|
|
468
|
+
|
|
469
|
+
private: // ===== Switch to private method that is used by the XLRowReverseIterator increment operator++ and the dereference operators * and ->
|
|
470
|
+
static constexpr const bool XLCreateIfMissing = true; // code readability for updateCurrentRow parameter createIfMissing
|
|
471
|
+
static constexpr const bool XLDoNotCreateIfMissing = false; // "
|
|
472
|
+
/**
|
|
473
|
+
* @brief update m_currentRow by fetching (or inserting) a row at m_currentRowNumber
|
|
474
|
+
* @param createIfMissing m_currentRow will only be inserted if createIfMissing is true
|
|
475
|
+
*/
|
|
476
|
+
void updateCurrentRow(bool createIfMissing);
|
|
477
|
+
|
|
478
|
+
public: // ===== Switch back to public methods
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* @brief
|
|
482
|
+
* @return
|
|
483
|
+
*/
|
|
484
|
+
XLRowReverseIterator& operator++();
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* @brief
|
|
488
|
+
* @return
|
|
489
|
+
*/
|
|
490
|
+
XLRowReverseIterator operator++(int);
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* @brief
|
|
494
|
+
* @return
|
|
495
|
+
*/
|
|
496
|
+
reference operator*();
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* @brief
|
|
500
|
+
* @return
|
|
501
|
+
*/
|
|
502
|
+
pointer operator->();
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* @brief
|
|
506
|
+
* @param rhs
|
|
507
|
+
* @return
|
|
508
|
+
*/
|
|
509
|
+
bool operator==(const XLRowReverseIterator& rhs) const;
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* @brief
|
|
513
|
+
* @param rhs
|
|
514
|
+
* @return
|
|
515
|
+
*/
|
|
516
|
+
bool operator!=(const XLRowReverseIterator& rhs) const;
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* @brief
|
|
520
|
+
* @return
|
|
521
|
+
*/
|
|
522
|
+
explicit operator bool() const;
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* @brief determine whether the row that the iterator points to exists (m_currentRowNumber)
|
|
526
|
+
* @return true if XML already has an entry for that cell, otherwise false
|
|
527
|
+
*/
|
|
528
|
+
bool rowExists();
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* @brief determine whether iterator is at 1 beyond the last row in range
|
|
532
|
+
* @return
|
|
533
|
+
*/
|
|
534
|
+
bool endReached() const { return m_endReached; }
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* @brief get the row number corresponding to the current iterator position
|
|
538
|
+
* @return a row number, with m_lastRow + 1 for the beyond-the-end iterator
|
|
539
|
+
*/
|
|
540
|
+
uint32_t rowNumber() const { return m_endReached ? m_firstRow - 1 : m_currentRowNumber; }
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* @brief check the iterator direction
|
|
544
|
+
* @return XLIteratorDirection::Reverse
|
|
545
|
+
*/
|
|
546
|
+
constexpr XLIteratorDirection direction() const { return XLIteratorDirection::Reverse; }
|
|
547
|
+
|
|
548
|
+
private:
|
|
549
|
+
std::unique_ptr<XMLNode> m_dataNode; /**< */
|
|
550
|
+
uint32_t m_firstRow { 1 }; /**< The cell reference of the first cell in the range */
|
|
551
|
+
uint32_t m_lastRow { 1 }; /**< The cell reference of the last cell in the range */
|
|
552
|
+
XLRow m_currentRow; /**< */
|
|
553
|
+
XLSharedStringsRef m_sharedStrings; /**< */
|
|
554
|
+
|
|
555
|
+
// helper variables for non-creating iterator functionality
|
|
556
|
+
bool m_endReached; /**< */
|
|
557
|
+
std::unique_ptr<XMLNode> m_hintRow; /**< The cell node of the last existing row found up to current iterator position */
|
|
558
|
+
uint32_t m_hintRowNumber; /**< the row number for m_hintRow */
|
|
559
|
+
static constexpr const int XLNotLoaded = 0; // code readability for m_currentRowStatus
|
|
560
|
+
static constexpr const int XLNoSuchRow = 1; // "
|
|
561
|
+
static constexpr const int XLLoaded = 2; // "
|
|
562
|
+
int m_currentRowStatus; /**< Status of m_currentRow: XLNotLoaded, XLNoSuchRow or XLLoaded */
|
|
563
|
+
uint32_t m_currentRowNumber;
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* @brief
|
|
568
|
+
*/
|
|
569
|
+
class OPENXLSX_EXPORT XLRowRange
|
|
570
|
+
{
|
|
571
|
+
friend class XLRowIterator;
|
|
572
|
+
friend class XLRowReverseIterator;
|
|
573
|
+
|
|
574
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
575
|
+
// Public Member Functions
|
|
576
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
577
|
+
|
|
578
|
+
public:
|
|
579
|
+
typedef XLRowReverseIterator reverse_iterator; // to be used by templated class XLReverseRange
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* @brief constructor
|
|
583
|
+
* @param dataNode
|
|
584
|
+
* @param first
|
|
585
|
+
* @param last
|
|
586
|
+
* @param sharedStrings
|
|
587
|
+
*/
|
|
588
|
+
explicit XLRowRange(const XMLNode& dataNode, uint32_t first, uint32_t last, const XLSharedStrings& sharedStrings);
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* @brief copy constructor
|
|
592
|
+
* @param other
|
|
593
|
+
*/
|
|
594
|
+
XLRowRange(const XLRowRange& other);
|
|
595
|
+
|
|
596
|
+
/**
|
|
597
|
+
* @brief move constructor
|
|
598
|
+
* @param other
|
|
599
|
+
*/
|
|
600
|
+
XLRowRange(XLRowRange&& other) noexcept;
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* @brief destructor
|
|
604
|
+
*/
|
|
605
|
+
~XLRowRange();
|
|
606
|
+
|
|
607
|
+
/**
|
|
608
|
+
* @brief copy assignment operator
|
|
609
|
+
* @param other
|
|
610
|
+
* @return
|
|
611
|
+
*/
|
|
612
|
+
XLRowRange& operator=(const XLRowRange& other);
|
|
613
|
+
|
|
614
|
+
/**
|
|
615
|
+
* @brief move assignment operator
|
|
616
|
+
* @param other
|
|
617
|
+
* @return
|
|
618
|
+
*/
|
|
619
|
+
XLRowRange& operator=(XLRowRange&& other) noexcept;
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* @brief
|
|
623
|
+
* @return
|
|
624
|
+
*/
|
|
625
|
+
uint32_t rowCount() const;
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* @brief
|
|
629
|
+
* @return
|
|
630
|
+
*/
|
|
631
|
+
XLRowIterator begin();
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* @brief
|
|
635
|
+
* @return
|
|
636
|
+
*/
|
|
637
|
+
XLRowIterator end();
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* @brief provide a means to reverse-iterate through a row range
|
|
641
|
+
* @return the reverse begin of the range (iterator to the last row in the range)
|
|
642
|
+
*/
|
|
643
|
+
XLRowReverseIterator rbegin();
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* @brief provide a means to reverse-iterate through a row range
|
|
647
|
+
* @return the reverse end of the range (iterator to 1 before the first row in the range)
|
|
648
|
+
*/
|
|
649
|
+
XLRowReverseIterator rend();
|
|
650
|
+
|
|
651
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
652
|
+
// Private Member Variables
|
|
653
|
+
//----------------------------------------------------------------------------------------------------------------------
|
|
654
|
+
|
|
655
|
+
private:
|
|
656
|
+
std::unique_ptr<XMLNode> m_dataNode; /**< */
|
|
657
|
+
uint32_t m_firstRow; /**< The cell reference of the first cell in the range */
|
|
658
|
+
uint32_t m_lastRow; /**< The cell reference of the last cell in the range */
|
|
659
|
+
XLSharedStringsRef m_sharedStrings; /**< */
|
|
660
|
+
};
|
|
661
|
+
|
|
662
|
+
} // namespace OpenXLSX
|
|
663
|
+
|
|
664
|
+
// ========== FRIEND FUNCTION IMPLEMENTATIONS ========== //
|
|
665
|
+
namespace OpenXLSX
|
|
666
|
+
{
|
|
667
|
+
/**
|
|
668
|
+
* @brief
|
|
669
|
+
* @param lhs
|
|
670
|
+
* @param rhs
|
|
671
|
+
* @return
|
|
672
|
+
*/
|
|
673
|
+
inline bool operator==(const XLRow& lhs, const XLRow& rhs) { return XLRow::isEqual(lhs, rhs); }
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* @brief
|
|
677
|
+
* @param lhs
|
|
678
|
+
* @param rhs
|
|
679
|
+
* @return
|
|
680
|
+
*/
|
|
681
|
+
inline bool operator!=(const XLRow& lhs, const XLRow& rhs) { return !(lhs.m_rowNode == rhs.m_rowNode); }
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* @brief
|
|
685
|
+
* @param lhs
|
|
686
|
+
* @param rhs
|
|
687
|
+
* @return
|
|
688
|
+
*/
|
|
689
|
+
inline bool operator<(const XLRow& lhs, const XLRow& rhs) { return XLRow::isLessThan(lhs, rhs); }
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* @brief
|
|
693
|
+
* @param lhs
|
|
694
|
+
* @param rhs
|
|
695
|
+
* @return
|
|
696
|
+
*/
|
|
697
|
+
inline bool operator>(const XLRow& lhs, const XLRow& rhs) { return (rhs < lhs); }
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* @brief
|
|
701
|
+
* @param lhs
|
|
702
|
+
* @param rhs
|
|
703
|
+
* @return
|
|
704
|
+
*/
|
|
705
|
+
inline bool operator<=(const XLRow& lhs, const XLRow& rhs) { return !(lhs > rhs); }
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* @brief
|
|
709
|
+
* @param lhs
|
|
710
|
+
* @param rhs
|
|
711
|
+
* @return
|
|
712
|
+
*/
|
|
713
|
+
inline bool operator>=(const XLRow& lhs, const XLRow& rhs) { return !(lhs < rhs); }
|
|
714
|
+
|
|
715
|
+
} // namespace OpenXLSX
|
|
716
|
+
|
|
717
|
+
#ifdef _MSC_VER // conditionally enable MSVC specific pragmas to avoid other compilers warning about unknown pragmas
|
|
718
|
+
# pragma warning(pop)
|
|
719
|
+
#endif // _MSC_VER
|
|
720
|
+
|
|
721
|
+
#endif // OPENXLSX_XLROW_HPP
|