33 #include <unordered_map> 36 #include <xlnt/xlnt_config.hpp> 37 #include <xlnt/internal/features.hpp> 39 #if XLNT_HAS_INCLUDE(<string_view>) && XLNT_HAS_FEATURE(U8_STRING_VIEW) 40 #include <string_view> 52 class calculation_properties;
56 class const_worksheet_iterator;
62 class metadata_property;
69 class range_reference;
71 class streaming_workbook_reader;
73 class style_serializer;
78 class worksheet_iterator;
87 struct worksheet_impl;
158 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 173 workbook(std::istream &data,
const std::string &password);
175 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 176 workbook(std::istream &data, std::u8string_view password);
216 worksheet create_sheet(std::size_t index);
245 void active_sheet(std::size_t index);
252 worksheet sheet_by_title(
const std::string &title);
259 const worksheet sheet_by_title(
const std::string &title)
const;
265 worksheet sheet_by_index(std::size_t index);
271 const worksheet sheet_by_index(std::size_t index)
const;
283 const worksheet sheet_by_id(std::size_t
id)
const;
290 bool sheet_hidden_by_index(std::size_t index)
const;
295 bool contains(
const std::string &title)
const;
361 void apply_to_cells(std::function<
void(
cell)> f);
367 std::vector<std::string> sheet_titles()
const;
372 std::size_t sheet_count()
const;
385 std::vector<xlnt::core_property> core_properties()
const;
406 std::vector<xlnt::extended_property> extended_properties()
const;
421 bool has_custom_property(
const std::string &property_name)
const;
427 std::vector<std::string> custom_properties()
const;
432 variant custom_property(
const std::string &property_name)
const;
437 void custom_property(
const std::string &property_name,
const variant &value);
455 bool has_title()
const;
460 std::string title()
const;
465 void title(
const std::string &title);
470 void abs_path(
const std::string &
path);
475 void arch_id_flags(
const std::size_t flags);
482 std::vector<xlnt::named_range> named_ranges()
const;
492 void create_named_range(
const std::string &name,
worksheet worksheet,
const std::string &reference_string);
497 bool has_named_range(
const std::string &name)
const;
507 void remove_named_range(const std::string &name);
515 void save(std::vector<std::uint8_t> &data) const;
521 void save(std::vector<std::uint8_t> &data, const std::string &password) const;
523 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 524 void save(std::vector<std::uint8_t> &data, std::u8string_view password) const;
535 void save(const std::string &filename) const;
541 void save(const std::string &filename, const std::string &password) const;
543 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 544 void save(std::u8string_view filename) const;
554 void save(std::u8string_view filename, std::u8string_view password) const;
558 void save(const std::wstring &filename) const;
568 void save(const std::wstring &filename, const std::string &password) const;
575 void save(const xlnt::path &filename) const;
581 void save(const xlnt::path &filename, const std::string &password) const;
583 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 584 void save(const xlnt::path &filename, std::u8string_view password) const;
594 void save(std::ostream &stream) const;
600 void save(std::ostream &stream, const std::string &password) const;
602 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 603 void save(std::ostream &stream, std::u8string_view password) const;
614 void load(const std::vector<std::uint8_t> &data);
620 void load(const std::vector<std::uint8_t> &data, const std::string &password);
622 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 623 void load(const std::vector<std::uint8_t> &data, std::u8string_view password);
634 void load(const std::string &filename);
640 void load(const std::string &filename, const std::string &password);
642 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 643 void load(std::u8string_view filename);
653 void load(std::u8string_view filename, std::u8string_view password);
658 void load(const std::wstring &filename);
668 void load(const std::wstring &filename, const std::string &password);
675 void load(const xlnt::path &filename);
681 void load(const xlnt::path &filename, const std::string &password);
683 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 684 void load(const xlnt::path &filename, std::u8string_view password);
695 void load(std::istream &stream);
701 void load(std::istream &stream, const std::string &password);
703 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 704 void load(std::istream &stream, std::u8string_view password);
716 bool has_view() const;
726 void view(const workbook_view &view);
733 bool has_code_name() const;
738 std::string code_name() const;
743 void code_name(const std::string &code_name);
748 bool has_file_version() const;
753 std::string app_name() const;
758 std::size_t last_edited() const;
763 std::size_t lowest_edited() const;
768 std::size_t rup_build() const;
775 bool has_theme() const;
785 void
theme(const class theme &value);
804 xlnt::format create_format(bool default_format = false);
810 void clear_formats();
817 bool has_style(const std::string &name) const;
827 const class
style style(const std::string &name) const;
832 class
style create_style(const std::string &name);
837 class
style create_builtin_style(std::size_t builtin_id);
849 void default_slicer_style(const std::string &value);
854 std::string default_slicer_style() const;
859 void enable_known_fonts();
864 void disable_known_fonts();
869 bool known_fonts_enabled() const;
891 std::size_t add_shared_string(const rich_text &shared, bool allow_duplicates = false);
896 const
rich_text &shared_strings(std::size_t index) const;
902 std::vector<rich_text> &shared_strings();
908 const std::vector<rich_text> &shared_strings() const;
916 void thumbnail(const std::vector<std::uint8_t> &thumbnail,
917 const std::string &extension, const std::string &content_type);
922 const std::vector<std::uint8_t> &thumbnail() const;
927 const std::unordered_map<std::string, std::vector<std::uint8_t>>& binaries() const;
934 bool has_calculation_properties() const;
951 bool compare(const workbook &other, bool compare_by_reference) const;
959 workbook &operator=(const workbook &other) = default;
965 workbook &operator=(workbook &&other) = default;
970 worksheet operator[](const std::string &name);
981 bool operator==(const workbook &rhs) const;
987 bool operator!=(const workbook &rhs) const;
992 friend class detail::xlsx_consumer;
993 friend class detail::xlsx_producer;
994 friend struct detail::worksheet_impl;
1000 workbook(std::shared_ptr<detail::workbook_impl> impl);
1006 workbook(std::weak_ptr<detail::workbook_impl> impl);
1011 void set_impl(std::shared_ptr<detail::workbook_impl> impl);
1016 template <typename T>
1017 void construct(const xlnt::path &file, const T &password);
1022 template <typename T>
1023 void construct(std::istream &data, const T &password);
1029 template <typename T>
1030 void save_internal(std::vector<std::uint8_t> &data, const T &password) const;
1036 template <typename T>
1037 void save_internal(const T &filename) const;
1043 template <typename T>
1044 void save_internal(const T &filename, const T &password) const;
1050 template <typename T>
1051 void save_internal(const xlnt::path &filename, const T &password) const;
1057 template <typename T>
1058 void save_internal(std::ostream &stream, const T &password) const;
1064 template <typename T>
1065 void load_internal(const std::vector<std::uint8_t> &data, const T &password);
1071 template <typename T>
1072 void load_internal(const T &filename);
1078 template <typename T>
1079 void load_internal(const T &filename, const T &password);
1085 template <typename T>
1086 void load_internal(const xlnt::path &filename, const T &password);
1092 template <typename T>
1093 void load_internal(std::istream &stream, const T &password);
1099 detail::workbook_impl &impl();
1105 const detail::workbook_impl &impl() const;
1112 void register_package_part(relationship_type type);
1120 void register_workbook_part(relationship_type type);
1128 void register_worksheet_part(worksheet ws, relationship_type type);
1133 void garbage_collect_formulae();
1138 void update_sheet_properties();
1143 void swap(workbook &other);
1148 void reorder_relationships();
1153 std::shared_ptr<detail::workbook_impl> d_;
core_property
Every core property in a workbook must be one of these types.
Definition: metadata_property.hpp:34
A range is a 2D collection of cells with defined extens that can be iterated upon.
Definition: range.hpp:53
Represents an association between a source Package or part, and a target object which can be a part o...
Definition: relationship.hpp:103
Represents an object that can have variable type.
Definition: variant.hpp:40
Definition: cell_reference.hpp:261
A workbook can be opened in multiple windows with different views. This class represents a particular...
Definition: workbook_view.hpp:37
Enumerates the possible types a cell can be determined by it's current value.
Definition: cell.hpp:36
extended_property
Every extended property in a workbook must be one of these types.
Definition: metadata_property.hpp:56
std::reverse_iterator< iterator > reverse_iterator
typedef for the iterator used for iterating through this workbook (non-const) in a range-based for lo...
Definition: workbook.hpp:125
A worksheet is a 2D array of cells starting with cell A1 in the top-left corner and extending indefin...
Definition: worksheet.hpp:75
A theme is a combination of fonts, colors, and effects. This isn't really supported yet...
Definition: theme.hpp:35
Describes a unit of data in a worksheet at a specific coordinate and its associated properties...
Definition: cell.hpp:83
Encapsulates zero or more formatted text runs where a text run is a string of text with the same defi...
Definition: rich_text.hpp:41
An iterator which is used to iterate over the worksheets in a workbook.
Definition: worksheet_iterator.hpp:44
Encapsulates a path that points to location in a filesystem.
Definition: path.hpp:43
relationship_type
All package relationships must be one of these defined types.
Definition: relationship.hpp:54
Workbook file properties relating to calculations.
Definition: calculation_properties.hpp:36
An iterator which is used to iterate over the worksheets in a const workbook.
Definition: worksheet_iterator.hpp:154
A 2D range of cells in a worksheet that is referred to by name. ws->range("A1:B2") could be replaced ...
Definition: named_range.hpp:42
workbook is the container for all other parts of the document.
Definition: streaming_workbook_reader.hpp:55
The manifest keeps track of all files in the OOXML package and their type and relationships.
Definition: manifest.hpp:41
A range_reference describes a rectangular area of a worksheet with positive width and height defined ...
Definition: range_reference.hpp:36
Describes a style which has a name and can be applied to multiple individual formats. In Excel this is a "Cell Style".
Definition: style.hpp:55
std::reverse_iterator< const_iterator > const_reverse_iterator
typedef for the iterator used for iterating through this workbook (const) in a range-based for loop i...
Definition: workbook.hpp:132
workbook is the container for all other parts of the document.
Definition: workbook.hpp:96
calendar
An enumeration of possible base dates. Dates in Excel are stored as days since this base date...
Definition: calendar.hpp:35
clone_method
The method for cloning workbooks.
Definition: workbook.hpp:102