react-native-nitro-xlsx 0.2.5 → 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 +26 -27
- package/Package.swift +31 -10
- package/README.md +1 -1
- package/android/CMakeLists.txt +20 -27
- package/package.json +2 -2
- package/scripts/run-cpp-tests.sh +1 -1
- 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/scripts/prepare-openxlsx.js +0 -126
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#=======================================================================================================================
|
|
2
|
+
# Preamble
|
|
3
|
+
#=======================================================================================================================
|
|
4
|
+
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
|
|
5
|
+
project(OpenXLSX.Examples)
|
|
6
|
+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
#=======================================================================================================================
|
|
10
|
+
# Define Demo1 target
|
|
11
|
+
#=======================================================================================================================
|
|
12
|
+
add_executable(Demo1 Demo1.cpp)
|
|
13
|
+
# NOTE: Linking against OpenXLSX-bundled does not yet work
|
|
14
|
+
# if(${OPENXLSX_BUNDLED_STATIC_LIB})
|
|
15
|
+
# # target_include_directories(Demo1
|
|
16
|
+
# # PUBLIC
|
|
17
|
+
# # $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/OpenXLSX>
|
|
18
|
+
# # $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/OpenXLSX/headers>
|
|
19
|
+
# # # ${Boost_INCLUDE_DIR} # just in case
|
|
20
|
+
# # # ${NOWIDE_INCLUDE_DIR} # includes {Boost_INCLUDE_DIR}/boost
|
|
21
|
+
# # $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/OpenXLSX>) # For export header
|
|
22
|
+
# target_link_libraries(Demo1 PRIVATE OpenXLSX-bundled)
|
|
23
|
+
# else()
|
|
24
|
+
target_link_libraries(Demo1 PRIVATE OpenXLSX::OpenXLSX)
|
|
25
|
+
# endif()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
#=======================================================================================================================
|
|
29
|
+
# Define Demo1A target
|
|
30
|
+
#=======================================================================================================================
|
|
31
|
+
if(${OPENXLSX_ENABLE_LIBZIP_EXAMPLE})
|
|
32
|
+
find_package(LIBZIP MODULE REQUIRED)
|
|
33
|
+
add_executable(Demo1A Demo1A.cpp)
|
|
34
|
+
target_link_libraries(Demo1A PRIVATE OpenXLSX::OpenXLSX libzip::zip)
|
|
35
|
+
if (${OPENXLSX_ENABLE_NOWIDE})
|
|
36
|
+
target_compile_definitions(Demo1A PRIVATE ENABLE_NOWIDE)
|
|
37
|
+
target_include_directories(Demo1A PRIVATE ${EXAMPLES_NOWIDE_INCLUDE})
|
|
38
|
+
target_link_libraries(Demo1A PRIVATE ${NOWIDE_ALIAS})
|
|
39
|
+
endif()
|
|
40
|
+
endif()
|
|
41
|
+
|
|
42
|
+
#=======================================================================================================================
|
|
43
|
+
# Define Demo2 target
|
|
44
|
+
#=======================================================================================================================
|
|
45
|
+
add_executable(Demo2 Demo2.cpp)
|
|
46
|
+
target_link_libraries(Demo2 PRIVATE OpenXLSX::OpenXLSX)
|
|
47
|
+
|
|
48
|
+
#=======================================================================================================================
|
|
49
|
+
# Define Demo3 target
|
|
50
|
+
#=======================================================================================================================
|
|
51
|
+
add_executable(Demo3 Demo3.cpp)
|
|
52
|
+
target_link_libraries(Demo3 PRIVATE OpenXLSX::OpenXLSX)
|
|
53
|
+
|
|
54
|
+
#=======================================================================================================================
|
|
55
|
+
# Define Demo4 target
|
|
56
|
+
#=======================================================================================================================
|
|
57
|
+
add_executable(Demo4 Demo4.cpp)
|
|
58
|
+
target_link_libraries(Demo4 PRIVATE OpenXLSX::OpenXLSX)
|
|
59
|
+
if (${OPENXLSX_ENABLE_NOWIDE})
|
|
60
|
+
target_compile_definitions(Demo4 PRIVATE ENABLE_NOWIDE)
|
|
61
|
+
target_include_directories(Demo4 PRIVATE ${EXAMPLES_NOWIDE_INCLUDE})
|
|
62
|
+
target_link_libraries(Demo4 PRIVATE ${NOWIDE_ALIAS})
|
|
63
|
+
endif()
|
|
64
|
+
|
|
65
|
+
#=======================================================================================================================
|
|
66
|
+
# Define Demo9 target
|
|
67
|
+
#=======================================================================================================================
|
|
68
|
+
add_executable(Demo5 Demo5.cpp)
|
|
69
|
+
target_link_libraries(Demo5 PRIVATE OpenXLSX::OpenXLSX)
|
|
70
|
+
|
|
71
|
+
#=======================================================================================================================
|
|
72
|
+
# Define Demo6 target
|
|
73
|
+
#=======================================================================================================================
|
|
74
|
+
add_executable(Demo6 Demo6.cpp)
|
|
75
|
+
target_link_libraries(Demo6 PRIVATE OpenXLSX::OpenXLSX)
|
|
76
|
+
|
|
77
|
+
#=======================================================================================================================
|
|
78
|
+
# Define Demo7 target
|
|
79
|
+
#=======================================================================================================================
|
|
80
|
+
add_executable(Demo7 Demo7.cpp)
|
|
81
|
+
target_link_libraries(Demo7 PRIVATE OpenXLSX::OpenXLSX)
|
|
82
|
+
|
|
83
|
+
#=======================================================================================================================
|
|
84
|
+
# Define Demo8 target
|
|
85
|
+
#=======================================================================================================================
|
|
86
|
+
add_executable(Demo8 Demo8.cpp)
|
|
87
|
+
target_link_libraries(Demo8 PRIVATE OpenXLSX::OpenXLSX)
|
|
88
|
+
|
|
89
|
+
#=======================================================================================================================
|
|
90
|
+
# Define Demo9 target
|
|
91
|
+
#=======================================================================================================================
|
|
92
|
+
add_executable(Demo9 Demo9.cpp)
|
|
93
|
+
target_link_libraries(Demo9 PRIVATE OpenXLSX::OpenXLSX)
|
|
94
|
+
if (${OPENXLSX_ENABLE_NOWIDE})
|
|
95
|
+
target_compile_definitions(Demo9 PRIVATE ENABLE_NOWIDE)
|
|
96
|
+
target_link_libraries(Demo9 PRIVATE ${NOWIDE_ALIAS})
|
|
97
|
+
endif()
|
|
98
|
+
|
|
99
|
+
#=======================================================================================================================
|
|
100
|
+
# Define Demo10 target
|
|
101
|
+
#=======================================================================================================================
|
|
102
|
+
add_executable(Demo10 Demo10.cpp)
|
|
103
|
+
target_link_libraries(Demo10 PRIVATE OpenXLSX::OpenXLSX)
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#include <OpenXLSX.hpp>
|
|
2
|
+
#include <iostream>
|
|
3
|
+
#include <cmath>
|
|
4
|
+
|
|
5
|
+
using namespace std;
|
|
6
|
+
using namespace OpenXLSX;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @brief demo how to iterate over all worksheet comments by sequence in XML - for few comments, this is substantially faster than testing each cell for a non-empty comment
|
|
10
|
+
* @param doc the XLDocument
|
|
11
|
+
* @return n/a
|
|
12
|
+
*/
|
|
13
|
+
void printAllDocumentComments(XLDocument const & doc)
|
|
14
|
+
{
|
|
15
|
+
for( size_t i = 1; i <= doc.workbook().worksheetCount(); ++i ) {
|
|
16
|
+
auto wks = doc.workbook().worksheet(i);
|
|
17
|
+
if( wks.hasComments() ) {
|
|
18
|
+
std::cout << "worksheet(" << i << ") with name \"" << wks.name() << "\" has comments" << std::endl;
|
|
19
|
+
XLComments wksComments = wks.comments();
|
|
20
|
+
size_t commentCount = wksComments.count();
|
|
21
|
+
for( size_t idx = 0; idx < commentCount; ++idx ) {
|
|
22
|
+
XLComment com = wksComments.get(idx);
|
|
23
|
+
std::cout << "comment in " << com.ref() << ": \"" << com.text() << "\" (author: " << wksComments.author(com.authorId()) << ")" << std::endl;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
int main()
|
|
30
|
+
{
|
|
31
|
+
cout << "********************************************************************************\n";
|
|
32
|
+
cout << "DEMO PROGRAM #01: Basic Usage and XLWorksheet protection\n";
|
|
33
|
+
cout << "********************************************************************************\n";
|
|
34
|
+
|
|
35
|
+
// This example program illustrates basic usage of OpenXLSX, for example creation of a new workbook, and read/write
|
|
36
|
+
// of cell values.
|
|
37
|
+
|
|
38
|
+
// First, create a new document and access the sheet named 'Sheet1'.
|
|
39
|
+
// New documents contain a single worksheet named 'Sheet1'
|
|
40
|
+
XLDocument doc;
|
|
41
|
+
doc.create("./Demo01.xlsx", XLForceOverwrite);
|
|
42
|
+
auto wks = doc.workbook().worksheet("Sheet1");
|
|
43
|
+
|
|
44
|
+
// The individual cells can be accessed by using the .cell() method on the worksheet object.
|
|
45
|
+
// The .cell() method can take the cell address as a string, or alternatively take a XLCellReference
|
|
46
|
+
// object. By using an XLCellReference object, the cells can be accessed by row/column coordinates.
|
|
47
|
+
// The .cell() method returns an XLCell object.
|
|
48
|
+
|
|
49
|
+
// The .value() method of an XLCell object can be used for both getting and setting the cell value.
|
|
50
|
+
// Setting the value of a cell can be done by using the assignment operator on the .value() method
|
|
51
|
+
// as shown below. Alternatively, a .set() can be used. The cell values can be floating point numbers,
|
|
52
|
+
// integers, strings, and booleans. It can also accept XLDateTime objects, but this requires special
|
|
53
|
+
// handling (see later).
|
|
54
|
+
wks.cell("A1").value() = 3.14159265358979323846;
|
|
55
|
+
wks.cell("B1").value() = 42;
|
|
56
|
+
wks.cell("C1").value() = " Hello OpenXLSX! ";
|
|
57
|
+
wks.cell("D1").value() = true;
|
|
58
|
+
wks.cell("E1").value() = std::sqrt(-2); // Result is NAN, resulting in an error value in the Excel spreadsheet.
|
|
59
|
+
|
|
60
|
+
// As mentioned, the .value() method can also be used for getting tha value of a cell.
|
|
61
|
+
// The .value() method returns a proxy object that cannot be copied or assigned, but
|
|
62
|
+
// it can be implicitly converted to an XLCellValue object, as shown below.
|
|
63
|
+
// Unfortunately, it is not possible to use the 'auto' keyword, so the XLCellValue
|
|
64
|
+
// type has to be explicitly stated.
|
|
65
|
+
XLCellValue A1 = wks.cell("A1").value();
|
|
66
|
+
XLCellValue B1 = wks.cell("B1").value();
|
|
67
|
+
XLCellValue C1 = wks.cell("C1").value();
|
|
68
|
+
XLCellValue D1 = wks.cell("D1").value();
|
|
69
|
+
XLCellValue E1 = wks.cell("E1").value();
|
|
70
|
+
|
|
71
|
+
// The cell value can be implicitly converted to a basic c++ type. However, if the type does not
|
|
72
|
+
// match the type contained in the XLCellValue object (if, for example, floating point value is
|
|
73
|
+
// assigned to a std::string), then an XLValueTypeError exception will be thrown.
|
|
74
|
+
// To check which type is contained, use the .type() method, which will return a XLValueType enum
|
|
75
|
+
// representing the type. As a convenience, the .typeAsString() method returns the type as a string,
|
|
76
|
+
// which can be useful when printing to console.
|
|
77
|
+
double vA1 = wks.cell("A1").value();
|
|
78
|
+
int vB1 = wks.cell("B1").value();
|
|
79
|
+
std::string vC1 = wks.cell("C1").value();
|
|
80
|
+
bool vD1 = wks.cell("D1").value();
|
|
81
|
+
double vE1 = wks.cell("E1").value();
|
|
82
|
+
|
|
83
|
+
cout << "Cell A1: (" << A1.typeAsString() << ") " << vA1 << endl;
|
|
84
|
+
cout << "Cell B1: (" << B1.typeAsString() << ") " << vB1 << endl;
|
|
85
|
+
cout << "Cell C1: (" << C1.typeAsString() << ") " << vC1 << endl;
|
|
86
|
+
cout << "Cell D1: (" << D1.typeAsString() << ") " << vD1 << endl;
|
|
87
|
+
cout << "Cell E1: (" << E1.typeAsString() << ") " << vE1 << endl << endl;
|
|
88
|
+
|
|
89
|
+
// Instead of using implicit (or explicit) conversion, the underlying value can also be retrieved
|
|
90
|
+
// using the .get() method. This is a templated member function, which takes the desired type
|
|
91
|
+
// as a template argument.
|
|
92
|
+
cout << "Cell A1: (" << A1.typeAsString() << ") " << A1.get<double>() << endl;
|
|
93
|
+
cout << "Cell B1: (" << B1.typeAsString() << ") " << B1.get<int64_t>() << endl;
|
|
94
|
+
cout << "Cell C1: (" << C1.typeAsString() << ") " << C1.get<std::string>() << endl;
|
|
95
|
+
cout << "Cell D1: (" << D1.typeAsString() << ") " << D1.get<bool>() << endl;
|
|
96
|
+
cout << "Cell E1: (" << E1.typeAsString() << ") " << E1.get<double>() << endl << endl;
|
|
97
|
+
|
|
98
|
+
// XLCellValue objects can also be copied and assigned to other cells. This following line
|
|
99
|
+
// will copy and assign the value of cell C1 to cell E1. Note that only the value is copied;
|
|
100
|
+
// other cell properties of the target cell remain unchanged.
|
|
101
|
+
|
|
102
|
+
wks.cell("F1").value() = wks.cell(XLCellReference("C1")).value();
|
|
103
|
+
|
|
104
|
+
XLCellValue F1 = wks.cell("F1").value();
|
|
105
|
+
cout << "Cell F1: (" << F1.typeAsString() << ") " << F1.get<std::string>() << endl << endl;
|
|
106
|
+
|
|
107
|
+
// Date/time values is a special case. In Excel, date/time values are essentially just a
|
|
108
|
+
// 64-bit floating point value, that is rendered as a date/time string using special
|
|
109
|
+
// formatting. When retrieving the cell value, it is just a floating point value,
|
|
110
|
+
// and there is no way to identify it as a date/time value.
|
|
111
|
+
// If, however, you know it to be a date time value, or if you want to assign a date/time
|
|
112
|
+
// value to a cell, you can use the XLDateTime class, which falilitates conversion between
|
|
113
|
+
// Excel date/time serial numbers, and the std::tm struct, that is used to store
|
|
114
|
+
// date/time data. See https://en.cppreference.com/w/cpp/chrono/c/tm for more information.
|
|
115
|
+
|
|
116
|
+
// An XLDateTime object can be created from a std::tm object:
|
|
117
|
+
std::tm tm;
|
|
118
|
+
tm.tm_year = 121;
|
|
119
|
+
tm.tm_mon = 8;
|
|
120
|
+
tm.tm_mday = 1;
|
|
121
|
+
tm.tm_hour = 12;
|
|
122
|
+
tm.tm_min = 0;
|
|
123
|
+
tm.tm_sec = 0;
|
|
124
|
+
XLDateTime dt (tm);
|
|
125
|
+
// XLDateTime dt (43791.583333333299);
|
|
126
|
+
|
|
127
|
+
// The std::tm object can be assigned to a cell value in the same way as shown previously.
|
|
128
|
+
wks.cell("G1").value() = dt;
|
|
129
|
+
|
|
130
|
+
// And as seen previously, an XLCellValue object can be retrieved. However, the object
|
|
131
|
+
// will just contain a floating point value; there is no way to identify it as a date/time value.
|
|
132
|
+
XLCellValue G1 = wks.cell("G1").value();
|
|
133
|
+
cout << "Cell G1: (" << G1.typeAsString() << ") " << G1.get<double>() << endl;
|
|
134
|
+
|
|
135
|
+
// If it is known to be a date/time value, the cell value can be converted to an XLDateTime object.
|
|
136
|
+
auto result = G1.get<XLDateTime>();
|
|
137
|
+
|
|
138
|
+
// The Excel date/time serial number can be retrieved using the .serial() method.
|
|
139
|
+
cout << "Cell G1: (" << G1.typeAsString() << ") " << result.serial() << endl;
|
|
140
|
+
|
|
141
|
+
// Using the .tm() method, the corresponding std::tm object can be retrieved.
|
|
142
|
+
auto tmo = result.tm();
|
|
143
|
+
cout << "Cell G1: (" << G1.typeAsString() << ") " << std::asctime(&tmo);
|
|
144
|
+
|
|
145
|
+
// Setting and deleting formula nodes
|
|
146
|
+
wks.cell("D2").formula().set("=A1+B1");
|
|
147
|
+
wks.cell("E2").formula().set(""); // setting an empty (zero-length) formula string will delete the formula node
|
|
148
|
+
|
|
149
|
+
std::cout << std::endl;
|
|
150
|
+
std::cout << "XLWorksheet comments demo" << std::endl;
|
|
151
|
+
std::cout << "=========================" << std::endl;
|
|
152
|
+
std::cout << "wks.hasComments() is " << (wks.hasComments() ? " TRUE" : "FALSE")
|
|
153
|
+
<< ", wks.hasVmlDrawing() is " << (wks.hasVmlDrawing() ? " TRUE" : "FALSE")
|
|
154
|
+
<< ", wks.hasTables() is " << (wks.hasTables() ? " TRUE" : "FALSE") << std::endl;
|
|
155
|
+
|
|
156
|
+
XLComments &wksComments = wks.comments(); // fetch comments (and create if missing)
|
|
157
|
+
std::cout << "wks.comments() is " << (wksComments.valid() ? "valid" : "not valid") << std::endl;
|
|
158
|
+
XLTables &wksTables = wks.tables(); // fetch tables (and create if missing)
|
|
159
|
+
std::cout << "wks.tables() is " << (wksTables.valid() ? "valid" : "not valid") << std::endl;
|
|
160
|
+
|
|
161
|
+
std::cout << "wks.hasComments() is " << (wks.hasComments() ? " TRUE" : "FALSE")
|
|
162
|
+
<< ", wks.hasVmlDrawing() is " << (wks.hasVmlDrawing() ? " TRUE" : "FALSE")
|
|
163
|
+
<< ", wks.hasTables() is " << (wks.hasTables() ? " TRUE" : "FALSE") << std::endl;
|
|
164
|
+
|
|
165
|
+
// 2025-01-17: LibreOffice displays all comments with the same, LibreOffice, author - regardless of author id - to be tested with MS Office
|
|
166
|
+
std::string authors[10] { "Edgar Allan Poe", "Agatha Christie", "J.R.R. Tolkien", "David Eddings", "Daniel Suarez",
|
|
167
|
+
/**/ "Mary Shelley", "George Orwell", "Stanislaw Lem", "Ray Bradbury", "William Shakespeare" };
|
|
168
|
+
|
|
169
|
+
for( std::string author : authors ) {
|
|
170
|
+
wksComments.addAuthor( author );
|
|
171
|
+
uint16_t authorCount = wksComments.authorCount();
|
|
172
|
+
std::cout << "wksComments.authorCount is " << authorCount << std::endl;
|
|
173
|
+
std::cout << "wksComments.author(" << (authorCount - 1) << ") is " << wksComments.author(authorCount - 1) << std::endl;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
wksComments.deleteAuthor(7);
|
|
177
|
+
wksComments.deleteAuthor(5);
|
|
178
|
+
wksComments.deleteAuthor(3);
|
|
179
|
+
uint16_t authorCount = wksComments.authorCount();
|
|
180
|
+
std::cout << "wksComments.authorCount is " << authorCount << " after deleting authors 7, 5 and 3" << std::endl;
|
|
181
|
+
for( uint16_t index = 0; index < authorCount; ++index )
|
|
182
|
+
std::cout << "wksComments.author(" << (index) << ") is " << wksComments.author(index) << std::endl;
|
|
183
|
+
|
|
184
|
+
wksComments.set("A1", "this comment is for author #0", 0);
|
|
185
|
+
wksComments.set("B2", "this comment is for author #1", 1);
|
|
186
|
+
wksComments.shape("B2").style().show(); // bit cumbersome to access, but it reflects the XML: <v:shape style="[..];visibility=visible">[..]</v:shape>
|
|
187
|
+
wksComments.set("C3", "this comment is for author #2", 2);
|
|
188
|
+
wksComments.set("C3", "this is an updated comment for author #2", 2); // overwrite a comment
|
|
189
|
+
wksComments.shape("C3").style().show();
|
|
190
|
+
wksComments.set("D1", "this comment is for author #4", 4);
|
|
191
|
+
wksComments.set("E2", "this comment is also for author #4", 4);
|
|
192
|
+
bool deleteSuccess = wksComments.deleteComment("E2");
|
|
193
|
+
std::cout << "Deleting the comment in cell E2 " << ( deleteSuccess ? "succeeded" : "did not succeed" ) << "." << std::endl;
|
|
194
|
+
std::cout << std::endl;
|
|
195
|
+
std::cout << "the comment in cell C4 is \"" << wksComments.get("C4") << "\"" << std::endl;
|
|
196
|
+
std::cout << "the comment in cell B2 is \"" << wksComments.get("B2") << "\"" << std::endl;
|
|
197
|
+
std::cout << std::endl;
|
|
198
|
+
printAllDocumentComments(doc);
|
|
199
|
+
|
|
200
|
+
std::cout << std::endl;
|
|
201
|
+
std::cout << "XLWorksheet protection settings demo" << std::endl;
|
|
202
|
+
std::cout << "====================================" << std::endl;
|
|
203
|
+
std::cout << "Default worksheet " << wks.name() << " protection settings: " << std::endl
|
|
204
|
+
/**/ << wks.sheetProtectionSummary() << std::endl;
|
|
205
|
+
std::string password = "test";
|
|
206
|
+
std::string pwHash = ExcelPasswordHashAsString(password);
|
|
207
|
+
wks.setPassword(password); // set password directly
|
|
208
|
+
wks.setPasswordHash(pwHash); // set password via hash
|
|
209
|
+
wks.protectSheet(); // protects all cells that have protected=true
|
|
210
|
+
// protectObjects(bool set = false); // not sure what this would do
|
|
211
|
+
// protectScenarios(bool set = false); // not sure what this would do
|
|
212
|
+
wks.allowSelectUnlockedCells(); // user can select unlocked cells (default)
|
|
213
|
+
wks.denySelectLockedCells(); // user can not select any cells except those that are explicitly unlocked
|
|
214
|
+
// wks.denySelectUnlockedCells(); // somehow this setting REALLY does not make any sense
|
|
215
|
+
// wks.clearPassword(); // clear a password - this will not(!) disable sheet protection but will no longer require a password to unprotect the sheet in a GUI
|
|
216
|
+
// wks.protectSheet(false); // remove sheet protection - this will disable the other protect settings
|
|
217
|
+
// wks.clearSheetProtection(); // this will ALL protection settings, including the password hash
|
|
218
|
+
std::cout << "---" << std::endl;
|
|
219
|
+
std::cout << "Configured worksheet " << wks.name() << " protection settings: " << std::endl
|
|
220
|
+
/**/ << wks.sheetProtectionSummary() << std::endl;
|
|
221
|
+
|
|
222
|
+
// Create a new cell format that unlocks cells
|
|
223
|
+
XLCellFormats & cellFormats = doc.styles().cellFormats();
|
|
224
|
+
XLStyleIndex newCellFormatIndex = cellFormats.create( cellFormats[ wks.cell("C1").cellFormat() ] );
|
|
225
|
+
// cellFormats[ newCellFormatIndex ].setApplyProtection( true ); // seems to be irrelevant
|
|
226
|
+
// cellFormats[ newCellFormatIndex ].setLocked( true ); // locked seems to be default behavior if attribute is not set
|
|
227
|
+
cellFormats[ newCellFormatIndex ].setLocked( false ); // unprotect a cell
|
|
228
|
+
|
|
229
|
+
// wks.cell("D1").setCellFormat(newCellFormatIndex);
|
|
230
|
+
wks.range("C1:D1").setFormat(newCellFormatIndex); // unlock two cells
|
|
231
|
+
std::cout << "====================================" << std::endl;
|
|
232
|
+
std::cout << "==> the worksheet " << wks.name() << " is now protected with the password " << password << std::endl;
|
|
233
|
+
std::cout << std::endl;
|
|
234
|
+
|
|
235
|
+
std::cout << std::endl;
|
|
236
|
+
std::cout << "XLWorksheet testing for empty cells demo.." << std::endl;
|
|
237
|
+
std::cout << "==========================================" << std::endl;
|
|
238
|
+
std::cout << " using an XLCellIterator (recommended)" << std::endl;
|
|
239
|
+
std::cout << " -----------------------------------" << std::endl;
|
|
240
|
+
XLCellRange cellRange = wks.range("A1:G2");
|
|
241
|
+
for (XLCellIterator cellIt = cellRange.begin(); cellIt != cellRange.end(); ++cellIt) {
|
|
242
|
+
if (!cellIt.cellExists()) continue; // prevent cell creation by access for non-existing cells
|
|
243
|
+
std::cout << "cell " << cellIt.address() << " exists!" << std::endl;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
std::cout << std::endl;
|
|
247
|
+
std::cout << " using XLSheet::findCell (lazy method, not recommended)" << std::endl;
|
|
248
|
+
std::cout << " NOTE: this method should only be used for tests of individual cells when performance is not an issue" << std::endl;
|
|
249
|
+
std::cout << " ------------------------------------------------------" << std::endl;
|
|
250
|
+
for (int row = 1; row < 4; ++row) {
|
|
251
|
+
for (int col = 1; col < 8; ++col) {
|
|
252
|
+
XLCellReference ref(row, col);
|
|
253
|
+
XLCellAssignable c = wks.findCell(ref);
|
|
254
|
+
if (c.empty())
|
|
255
|
+
continue;
|
|
256
|
+
|
|
257
|
+
// It is up to the implementation to decide which tests shall be performed on a cell that exists - here are a few exemplary tests
|
|
258
|
+
std::string valueAsString = c.getString();
|
|
259
|
+
if (valueAsString == "" && !c.hasFormula())
|
|
260
|
+
cout << "cell " << ref.address() << " exists but has no value or formula" << std::endl;
|
|
261
|
+
else {
|
|
262
|
+
// cout << "cell " << ref.address() << " value is |" << c.value() << "|" << std::endl;
|
|
263
|
+
if (valueAsString.length() > 0)
|
|
264
|
+
cout << "cell " << ref.address() << " value is |" << valueAsString << "|" << std::endl;
|
|
265
|
+
if (c.hasFormula()) {
|
|
266
|
+
if (c.formula().get().length() > 0)
|
|
267
|
+
cout << "cell " << ref.address() << " formula is |" << c.formula().get() << "|" << std::endl;
|
|
268
|
+
else // NOTE: this state can not be created with OpenXLSX setter functions, but possibly by other libraries / programs
|
|
269
|
+
cout << "cell " << ref.address() << " has an empty formula" << std::endl;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
doc.save();
|
|
276
|
+
doc.close();
|
|
277
|
+
|
|
278
|
+
return 0;
|
|
279
|
+
}
|