xlnt/include/xlnt/workbook/workbook.hpp

768 lines
18 KiB
C++
Raw Normal View History

2015-12-25 06:10:02 +08:00
// Copyright (c) 2014-2016 Thomas Fussell
// Copyright (c) 2010-2015 openpyxl
2014-06-06 04:19:31 +08:00
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, WRISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE
//
// @license: http://www.opensource.org/licenses/mit-license.php
// @author: see AUTHORS file
2016-12-04 20:29:10 +08:00
2014-05-21 22:20:30 +08:00
#pragma once
2016-06-11 01:40:50 +08:00
#include <functional>
#include <iterator>
2014-06-14 03:05:24 +08:00
#include <memory>
2014-05-21 22:20:30 +08:00
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include <xlnt/xlnt_config.hpp>
2014-07-20 02:43:48 +08:00
2014-05-21 22:20:30 +08:00
namespace xlnt {
2016-11-20 14:01:32 +08:00
enum class calendar;
enum class relationship_type;
2015-10-15 06:05:13 +08:00
class alignment;
class border;
class calculation_properties;
2016-06-11 01:40:50 +08:00
class cell;
class cell_style;
2015-10-15 06:05:13 +08:00
class color;
2016-01-25 00:15:49 +08:00
class const_worksheet_iterator;
2014-05-21 22:20:30 +08:00
class drawing;
2015-10-15 06:05:13 +08:00
class fill;
class font;
class format;
class rich_text;
2015-10-30 01:46:56 +08:00
class manifest;
2015-10-15 06:05:13 +08:00
class named_range;
2015-10-19 03:30:46 +08:00
class number_format;
2016-08-03 12:12:18 +08:00
class path;
2015-10-15 06:05:13 +08:00
class pattern_fill;
class protection;
class range;
2014-05-21 22:20:30 +08:00
class range_reference;
class relationship;
2016-05-15 01:57:07 +08:00
class style;
class style_serializer;
2015-10-30 07:37:07 +08:00
class theme;
class workbook_view;
2014-05-21 22:20:30 +08:00
class worksheet;
2016-01-25 00:15:49 +08:00
class worksheet_iterator;
2015-10-15 06:05:13 +08:00
class zip_file;
2016-08-03 12:12:18 +08:00
struct datetime;
2016-01-18 14:23:31 +08:00
namespace detail {
2016-11-20 14:01:32 +08:00
2016-08-05 13:52:05 +08:00
struct stylesheet;
2016-01-18 14:23:31 +08:00
struct workbook_impl;
2016-08-05 13:52:05 +08:00
class xlsx_consumer;
class xlsx_producer;
2016-11-20 14:01:32 +08:00
2016-01-18 14:23:31 +08:00
} // namespace detail
2014-06-13 23:41:32 +08:00
/// <summary>
/// workbook is the container for all other parts of the document.
/// </summary>
class XLNT_API workbook
2014-05-21 22:20:30 +08:00
{
2016-01-18 14:23:31 +08:00
public:
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-01-25 00:15:49 +08:00
using iterator = worksheet_iterator;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-01-25 00:15:49 +08:00
using const_iterator = const_worksheet_iterator;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
using reverse_iterator = std::reverse_iterator<iterator>;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
2016-07-22 10:14:00 +08:00
/// <summary>
/// Swap the data held in workbooks "left" and "right".
/// </summary>
friend void swap(workbook &left, workbook &right);
2014-07-25 05:31:46 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
static workbook empty();
2016-08-03 12:12:18 +08:00
// constructors
2016-07-22 10:14:00 +08:00
/// <summary>
/// Create a workbook containing a single empty worksheet.
/// </summary>
workbook();
2016-07-22 10:14:00 +08:00
/// <summary>
/// Move construct this workbook from existing workbook "other".
/// </summary>
2014-07-24 08:51:28 +08:00
workbook(workbook &&other);
2016-07-22 10:14:00 +08:00
/// <summary>
/// Copy construct this workbook from existing workbook "other".
/// </summary>
2014-07-24 08:51:28 +08:00
workbook(const workbook &other);
2016-07-22 10:14:00 +08:00
/// <summary>
/// Destroy this workbook.
/// </summary>
~workbook();
2014-07-24 08:51:28 +08:00
2016-07-22 10:14:00 +08:00
// add worksheets
2016-12-04 20:29:10 +08:00
/// <summary>
/// Create a sheet after the last sheet in this workbook and return it.
/// </summary>
2014-05-21 22:20:30 +08:00
worksheet create_sheet();
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Create a sheet at the specified index and return it.
/// </summary>
2014-05-21 22:20:30 +08:00
worksheet create_sheet(std::size_t index);
2016-12-04 20:29:10 +08:00
/// <summary>
/// This should be private...
/// </summary>
2016-08-02 06:33:43 +08:00
worksheet create_sheet_with_rel(const std::string &title, const relationship &rel);
2016-12-04 20:29:10 +08:00
/// <summary>
/// Create a new sheet initializing it with all of the data from the provided worksheet.
/// </summary>
2016-07-22 10:14:00 +08:00
void copy_sheet(worksheet worksheet);
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Create a new sheet at the specified index initializing it with all of the data
/// from the provided worksheet.
2016-07-22 10:14:00 +08:00
void copy_sheet(worksheet worksheet, std::size_t index);
2016-07-22 10:14:00 +08:00
// get worksheets
2016-07-22 10:14:00 +08:00
/// <summary>
/// Returns the worksheet that was most recently accessed.
/// This is also the sheet that will be shown when the workbook is opened
/// in the spreadsheet editor program.
/// </summary>
worksheet active_sheet();
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return the worksheet with the given name.
/// This may throw an exception if the sheet isn't found.
/// Use workbook::contains(const std::string &) to make sure the sheet exists.
/// </summary>
worksheet sheet_by_title(const std::string &sheet_name);
2016-12-04 20:29:10 +08:00
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return the const worksheet with the given name.
/// This may throw an exception if the sheet isn't found.
/// Use workbook::contains(const std::string &) to make sure the sheet exists.
/// </summary>
const worksheet sheet_by_title(const std::string &sheet_name) const;
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return the worksheet at the given index.
/// </summary>
worksheet sheet_by_index(std::size_t index);
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return the const worksheet at the given index.
/// </summary>
const worksheet sheet_by_index(std::size_t index) const;
2016-07-22 10:14:00 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Return the worksheet with a sheetId of id.
/// </summary>
worksheet sheet_by_id(std::size_t id);
2016-08-05 13:52:05 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Return the const worksheet with a sheetId of id.
/// </summary>
const worksheet sheet_by_id(std::size_t id) const;
2016-08-05 13:52:05 +08:00
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return true if this workbook contains a sheet with the given name.
/// </summary>
bool contains(const std::string &key) const;
2016-07-22 10:14:00 +08:00
/// <summary>
/// Return the index of the given worksheet.
/// The worksheet must be owned by this workbook.
/// </summary>
std::size_t index(worksheet worksheet);
2016-07-22 10:14:00 +08:00
// remove worksheets
2016-12-04 20:29:10 +08:00
/// <summary>
/// Remove the given worksheet from this workbook.
/// </summary>
2016-07-22 10:14:00 +08:00
void remove_sheet(worksheet worksheet);
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Delete every cell in this worksheet. After this is called, the
/// worksheet will be equivalent to a newly created sheet at the same
/// index and with the same title.
/// </summary>
2016-07-22 10:14:00 +08:00
void clear();
// iterators
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns an iterator to the first worksheet in this workbook.
/// </summary>
iterator begin();
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns an iterator to the worksheet following the last worksheet of the workbook.
/// This worksheet acts as a placeholder; attempting to access it will cause an
/// exception to be thrown.
/// </summary>
iterator end();
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns a const iterator to the first worksheet in this workbook.
/// </summary>
2015-11-23 01:41:27 +08:00
const_iterator begin() const;
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns a const iterator to the worksheet following the last worksheet of the workbook.
/// This worksheet acts as a placeholder; attempting to access it will cause an
/// exception to be thrown.
/// </summary>
2015-11-23 01:41:27 +08:00
const_iterator end() const;
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns an iterator to the first worksheet in this workbook.
/// </summary>
const_iterator cbegin() const;
2016-08-02 06:33:43 +08:00
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns a const iterator to the worksheet following the last worksheet of the workbook.
/// This worksheet acts as a placeholder; attempting to access it will cause an
/// exception to be thrown.
/// </summary>
const_iterator cend() const;
2016-12-04 20:29:10 +08:00
/// <summary>
/// Apply the function "f" to every non-empty cell in every worksheet in this workbook.
/// </summary>
void apply_to_cells(std::function<void(cell)> f);
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns a temporary vector containing the titles of each sheet in the order
/// of the sheets in the workbook.
/// </summary>
std::vector<std::string> sheet_titles() const;
2016-12-04 20:29:10 +08:00
/// <summary>
/// Returns the number of sheets in this workbook.
/// </summary>
std::size_t sheet_count() const;
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
/// Returns true if the workbook has the core property with the given name.
2016-11-20 14:01:32 +08:00
/// </summary>
bool has_core_property(const std::string &property_name) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
template <typename T = std::string>
T core_property(const std::string &property_name) const;
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
template <typename T = std::string>
void core_property(const std::string &property_name, const T value);
2016-11-20 14:01:32 +08:00
/// <summary>
/// Returns true if the workbook has the extended property with the given name.
/// </summary>
bool has_extended_property(const std::string &property_name) const;
/// <summary>
///
/// </summary>
template <typename T = std::string>
T extended_property(const std::string &property_name) const;
/// <summary>
///
/// </summary>
template <typename T = std::string>
void extended_property(const std::string &property_name, const T value);
/// <summary>
/// Returns true if the workbook has the custom property with the given name.
/// </summary>
bool has_custom_property(const std::string &property_name) const;
/// <summary>
///
/// </summary>
template <typename T = std::string>
T custom_property(const std::string &property_name) const;
/// <summary>
///
/// </summary>
template <typename T = std::string>
void custom_property(const std::string &property_name, const T value);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
calendar base_date() const;
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void base_date(calendar base_date);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
bool has_title() const;
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::string title() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void title(const std::string &title);
// named ranges
2016-07-22 10:14:00 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-03 23:31:10 +08:00
std::vector<xlnt::named_range> named_ranges() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void create_named_range(const std::string &name, worksheet worksheet, const range_reference &reference);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2015-11-11 08:47:31 +08:00
void create_named_range(const std::string &name, worksheet worksheet, const std::string &reference_string);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
bool has_named_range(const std::string &name) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-03 23:31:10 +08:00
class range named_range(const std::string &name);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void remove_named_range(const std::string &name);
// serialization
2016-07-22 10:14:00 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(std::vector<std::uint8_t> &data) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(const std::string &filename) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(const xlnt::path &filename) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(std::ostream &stream) const;
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(const std::string &filename, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(const xlnt::path &filename, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(std::ostream &stream, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void save(const std::vector<std::uint8_t> &data, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(const std::vector<std::uint8_t> &data);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(const std::string &filename);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(const xlnt::path &filename);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(std::istream &stream);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void load(const std::string &filename, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(const xlnt::path &filename, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(std::istream &stream, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void load(const std::vector<std::uint8_t> &data, const std::string &password);
2016-11-20 08:41:21 +08:00
#ifdef _MSC_VER
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void save(const std::wstring &filename);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void save(const std::wstring &filename, const std::string &password);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void load(const std::wstring &filename);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void load(const std::wstring &filename, const std::string &password);
#endif
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
bool has_view() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
workbook_view view() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void view(const workbook_view &view);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
bool has_code_name() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::string code_name() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void code_name(const std::string &code_name);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
bool has_file_version() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::string app_name() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::size_t last_edited() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::size_t lowest_edited() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
std::size_t rup_build() const;
2016-07-22 10:14:00 +08:00
// theme
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-08-03 12:12:18 +08:00
bool has_theme() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const xlnt::theme &theme() const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void theme(const class theme &value);
2016-07-22 10:14:00 +08:00
// formats
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
xlnt::format format(std::size_t format_index);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const xlnt::format format(std::size_t format_index) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
xlnt::format create_format(bool default_format = false);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-05-15 01:57:07 +08:00
void clear_formats();
2016-07-22 10:14:00 +08:00
// styles
2016-07-22 10:14:00 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-06-11 01:40:50 +08:00
bool has_style(const std::string &name) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
class style style(const std::string &name);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const class style style(const std::string &name) const;
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
class style create_style(const std::string &name);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void clear_styles();
2016-07-22 10:14:00 +08:00
// manifest
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-03 23:31:10 +08:00
class manifest &manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const class manifest &manifest() const;
2016-07-22 10:14:00 +08:00
// shared strings
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void add_shared_string(const rich_text &shared, bool allow_duplicates = false);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
std::vector<rich_text> &shared_strings();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const std::vector<rich_text> &shared_strings() const;
2016-10-29 22:23:04 +08:00
2016-07-22 10:14:00 +08:00
// thumbnail
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
void thumbnail(const std::vector<std::uint8_t> &thumbnail,
const std::string &extension, const std::string &content_type);
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
const std::vector<std::uint8_t> &thumbnail() const;
// calculation properties
/// <summary>
///
/// </summary>
bool has_calculation_properties() const;
/// <summary>
///
/// </summary>
class calculation_properties calculation_properties() const;
/// <summary>
///
/// </summary>
void calculation_properties(const class calculation_properties &props);
2016-07-22 10:14:00 +08:00
// operators
/// <summary>
/// Set the contents of this workbook to be equal to those of "other".
/// Other is passed as value to allow for copy-swap idiom.
/// </summary>
workbook &operator=(workbook other);
/// <summary>
/// Return the worksheet with a title of "name".
/// </summary>
worksheet operator[](const std::string &name);
/// <summary>
/// Return the worksheet at "index".
/// </summary>
worksheet operator[](std::size_t index);
/// <summary>
/// Return true if this workbook internal implementation points to the same
/// memory as rhs's.
/// </summary>
bool operator==(const workbook &rhs) const;
/// <summary>
/// Return true if this workbook internal implementation doesn't point to the same
/// memory as rhs's.
/// </summary>
bool operator!=(const workbook &rhs) const;
2016-01-18 14:23:31 +08:00
private:
2016-10-29 22:23:04 +08:00
friend class worksheet;
friend class detail::xlsx_consumer;
friend class detail::xlsx_producer;
2016-07-22 10:14:00 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
workbook(detail::workbook_impl *impl);
2016-08-03 12:12:18 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
detail::workbook_impl &impl();
2016-08-05 13:52:05 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
const detail::workbook_impl &impl() const;
2016-07-22 10:14:00 +08:00
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
void register_app_properties_in_manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
void register_core_properties_in_manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
void register_shared_string_table_in_manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
void register_stylesheet_in_manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-10-29 22:23:04 +08:00
void register_theme_in_manifest();
2016-11-20 14:01:32 +08:00
/// <summary>
///
/// </summary>
2016-12-04 20:29:10 +08:00
void register_comments_in_manifest(worksheet ws);
2016-07-22 10:14:00 +08:00
/// <summary>
/// An opaque pointer to a structure that holds all of the data relating to this workbook.
/// </summary>
std::unique_ptr<detail::workbook_impl> d_;
2014-05-21 22:20:30 +08:00
};
2014-05-21 22:20:30 +08:00
} // namespace xlnt