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;
148 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 163 workbook(std::istream &data,
const std::string &password);
165 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 166 workbook(std::istream &data, std::u8string_view password);
199 worksheet create_sheet(std::size_t index);
228 void active_sheet(std::size_t index);
235 worksheet sheet_by_title(
const std::string &title);
242 const worksheet sheet_by_title(
const std::string &title)
const;
248 worksheet sheet_by_index(std::size_t index);
254 const worksheet sheet_by_index(std::size_t index)
const;
266 const worksheet sheet_by_id(std::size_t
id)
const;
273 bool sheet_hidden_by_index(std::size_t index)
const;
278 bool contains(
const std::string &title)
const;
339 void apply_to_cells(std::function<
void(
cell)> f);
345 std::vector<std::string> sheet_titles()
const;
350 std::size_t sheet_count()
const;
363 std::vector<xlnt::core_property> core_properties()
const;
384 std::vector<xlnt::extended_property> extended_properties()
const;
399 bool has_custom_property(
const std::string &property_name)
const;
405 std::vector<std::string> custom_properties()
const;
410 variant custom_property(
const std::string &property_name)
const;
415 void custom_property(
const std::string &property_name,
const variant &value);
433 bool has_title()
const;
438 std::string title()
const;
443 void title(
const std::string &title);
448 void abs_path(
const std::string &
path);
453 void arch_id_flags(
const std::size_t flags);
460 std::vector<xlnt::named_range> named_ranges()
const;
470 void create_named_range(
const std::string &name,
worksheet worksheet,
const std::string &reference_string);
475 bool has_named_range(
const std::string &name)
const;
485 void remove_named_range(const std::string &name);
493 void save(std::vector<std::uint8_t> &data) const;
499 void save(std::vector<std::uint8_t> &data, const std::string &password) const;
501 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 502 void save(std::vector<std::uint8_t> &data, std::u8string_view password) const;
513 void save(const std::string &filename) const;
519 void save(const std::string &filename, const std::string &password) const;
521 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 522 void save(std::u8string_view filename) const;
532 void save(std::u8string_view filename, std::u8string_view password) const;
536 void save(const std::wstring &filename) const;
546 void save(const std::wstring &filename, const std::string &password) const;
553 void save(const xlnt::path &filename) const;
559 void save(const xlnt::path &filename, const std::string &password) const;
561 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 562 void save(const xlnt::path &filename, std::u8string_view password) const;
572 void save(std::ostream &stream) const;
578 void save(std::ostream &stream, const std::string &password) const;
580 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 581 void save(std::ostream &stream, std::u8string_view password) const;
592 void load(const std::vector<std::uint8_t> &data);
598 void load(const std::vector<std::uint8_t> &data, const std::string &password);
600 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 601 void load(const std::vector<std::uint8_t> &data, std::u8string_view password);
612 void load(const std::string &filename);
618 void load(const std::string &filename, const std::string &password);
620 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 621 void load(std::u8string_view filename);
631 void load(std::u8string_view filename, std::u8string_view password);
636 void load(const std::wstring &filename);
646 void load(const std::wstring &filename, const std::string &password);
653 void load(const xlnt::path &filename);
659 void load(const xlnt::path &filename, const std::string &password);
661 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 662 void load(const xlnt::path &filename, std::u8string_view password);
673 void load(std::istream &stream);
679 void load(std::istream &stream, const std::string &password);
681 #if XLNT_HAS_FEATURE(U8_STRING_VIEW) 682 void load(std::istream &stream, std::u8string_view password);
694 bool has_view() const;
704 void view(const workbook_view &view);
711 bool has_code_name() const;
716 std::string code_name() const;
721 void code_name(const std::string &code_name);
726 bool has_file_version() const;
731 std::string app_name() const;
736 std::size_t last_edited() const;
741 std::size_t lowest_edited() const;
746 std::size_t rup_build() const;
753 bool has_theme() const;
763 void
theme(const class theme &value);
782 xlnt::format create_format(bool default_format = false);
788 void clear_formats();
795 bool has_style(const std::string &name) const;
805 const class
style style(const std::string &name) const;
810 class
style create_style(const std::string &name);
815 class
style create_builtin_style(std::size_t builtin_id);
827 void default_slicer_style(const std::string &value);
832 std::string default_slicer_style() const;
837 void enable_known_fonts();
842 void disable_known_fonts();
847 bool known_fonts_enabled() const;
869 std::size_t add_shared_string(const rich_text &shared, bool allow_duplicates = false);
874 const
rich_text &shared_strings(std::size_t index) const;
880 std::vector<rich_text> &shared_strings();
886 const std::vector<rich_text> &shared_strings() const;
894 void thumbnail(const std::vector<std::uint8_t> &thumbnail,
895 const std::string &extension, const std::string &content_type);
900 const std::vector<std::uint8_t> &thumbnail() const;
905 const std::unordered_map<std::string, std::vector<std::uint8_t>>& binaries() const;
912 bool has_calculation_properties() const;
930 workbook &operator=(workbook other);
935 worksheet operator[](const std::string &name);
946 bool operator==(const workbook &rhs) const;
952 bool operator!=(const workbook &rhs) const;
957 friend class detail::xlsx_consumer;
958 friend class detail::xlsx_producer;
964 workbook(detail::workbook_impl *impl);
969 template <typename T>
970 void construct(const xlnt::path &file, const T &password);
975 template <typename T>
976 void construct(std::istream &data, const T &password);
982 template <typename T>
983 void save_internal(std::vector<std::uint8_t> &data, const T &password) const;
989 template <typename T>
990 void save_internal(const T &filename) const;
996 template <typename T>
997 void save_internal(const T &filename, const T &password) const;
1003 template <typename T>
1004 void save_internal(const xlnt::path &filename, const T &password) const;
1010 template <typename T>
1011 void save_internal(std::ostream &stream, const T &password) const;
1017 template <typename T>
1018 void load_internal(const std::vector<std::uint8_t> &data, const T &password);
1024 template <typename T>
1025 void load_internal(const T &filename);
1031 template <typename T>
1032 void load_internal(const T &filename, const T &password);
1038 template <typename T>
1039 void load_internal(const xlnt::path &filename, const T &password);
1045 template <typename T>
1046 void load_internal(std::istream &stream, const T &password);
1052 detail::workbook_impl &impl();
1058 const detail::workbook_impl &impl() const;
1065 void register_package_part(relationship_type type);
1073 void register_workbook_part(relationship_type type);
1081 void register_worksheet_part(worksheet ws, relationship_type type);
1086 void garbage_collect_formulae();
1091 void update_sheet_properties();
1096 void swap(workbook &other);
1101 void reorder_relationships();
1106 std::unique_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:55
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:262
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:37
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:115
A worksheet is a 2D array of cells starting with cell A1 in the top-left corner and extending indefin...
Definition: worksheet.hpp:77
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:84
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:34
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:56
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:122
workbook is the container for all other parts of the document.
Definition: workbook.hpp:95
calendar
An enumeration of possible base dates. Dates in Excel are stored as days since this base date...
Definition: calendar.hpp:35