2015-12-25 06:10:02 +08:00
|
|
|
// Copyright (c) 2014-2016 Thomas Fussell
|
2015-10-02 06:14:42 +08:00
|
|
|
// 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
|
2014-05-21 22:20:30 +08:00
|
|
|
#pragma once
|
|
|
|
|
2016-06-11 01:40:50 +08:00
|
|
|
#include <functional>
|
2016-06-14 11:36:26 +08:00
|
|
|
#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>
|
|
|
|
|
2015-11-20 11:54:54 +08:00
|
|
|
#include <xlnt/xlnt_config.hpp>
|
2014-07-20 02:43:48 +08:00
|
|
|
|
2014-05-21 22:20:30 +08:00
|
|
|
namespace xlnt {
|
|
|
|
|
2015-10-15 06:05:13 +08:00
|
|
|
class alignment;
|
|
|
|
class border;
|
2016-06-11 01:40:50 +08:00
|
|
|
class cell;
|
2016-05-01 04:19:45 +08:00
|
|
|
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;
|
2016-03-10 17:12:51 +08:00
|
|
|
class format;
|
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;
|
2014-05-30 08:52:14 +08:00
|
|
|
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;
|
2016-05-16 03:03:02 +08:00
|
|
|
class style_serializer;
|
2016-05-15 03:19:08 +08:00
|
|
|
class text;
|
2015-10-30 07:37:07 +08:00
|
|
|
class theme;
|
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;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-03 12:12:18 +08:00
|
|
|
struct datetime;
|
|
|
|
|
|
|
|
enum class calendar;
|
2016-07-22 11:04:36 +08:00
|
|
|
enum class relationship_type;
|
|
|
|
|
2016-01-18 14:23:31 +08:00
|
|
|
namespace detail {
|
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-01-18 14:23:31 +08:00
|
|
|
} // namespace detail
|
2014-06-16 01:06:47 +08:00
|
|
|
|
2014-06-13 23:41:32 +08:00
|
|
|
/// <summary>
|
|
|
|
/// workbook is the container for all other parts of the document.
|
|
|
|
/// </summary>
|
2015-11-04 13:36:14 +08:00
|
|
|
class XLNT_CLASS workbook
|
2014-05-21 22:20:30 +08:00
|
|
|
{
|
2016-01-18 14:23:31 +08:00
|
|
|
public:
|
2016-01-25 00:15:49 +08:00
|
|
|
using iterator = worksheet_iterator;
|
|
|
|
using const_iterator = const_worksheet_iterator;
|
2016-06-14 11:36:26 +08:00
|
|
|
using reverse_iterator = std::reverse_iterator<iterator>;
|
|
|
|
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-08-03 12:12:18 +08:00
|
|
|
static workbook minimal();
|
|
|
|
|
|
|
|
static workbook empty_excel();
|
|
|
|
|
|
|
|
static workbook empty_libre_office();
|
|
|
|
|
|
|
|
static workbook empty_numbers();
|
|
|
|
|
2015-11-01 22:43:01 +08:00
|
|
|
// constructors
|
2016-07-22 10:14:00 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Create a workbook containing a single empty worksheet.
|
|
|
|
/// </summary>
|
2014-06-16 01:06:47 +08:00
|
|
|
workbook();
|
2015-11-01 22:43:01 +08:00
|
|
|
|
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);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
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
|
|
|
// general properties
|
2014-07-25 05:31:46 +08:00
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns true if guess_types is enabled for this workbook.
|
|
|
|
/// </summary>
|
2014-05-30 08:52:14 +08:00
|
|
|
bool get_guess_types() const;
|
2016-08-02 06:33:43 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Set to true to guess the type represented by a string set as the value
|
|
|
|
/// for a cell and then set the actual value of the cell to that type.
|
|
|
|
/// For example, cell.set_value("1") with guess_types enabled will set
|
|
|
|
/// type of the cell to numeric and it's value to the number 1.
|
|
|
|
/// </summary>
|
2014-07-25 05:31:46 +08:00
|
|
|
void set_guess_types(bool guess);
|
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// ?
|
|
|
|
/// </summary>
|
2014-05-30 08:52:14 +08:00
|
|
|
bool get_data_only() const;
|
2016-08-02 06:33:43 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// ?
|
|
|
|
/// </summary>
|
2014-07-25 05:31:46 +08:00
|
|
|
void set_data_only(bool data_only);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// add worksheets
|
|
|
|
|
2016-08-02 06:33:43 +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
|
|
|
|
|
|
|
/// <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);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// This should be private...
|
|
|
|
/// </summary>
|
|
|
|
worksheet create_sheet_with_rel(const std::string &title, const relationship &rel);
|
|
|
|
|
|
|
|
/// <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
|
|
|
|
|
|
|
/// <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);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// get worksheets
|
2015-11-01 22:43:01 +08:00
|
|
|
|
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 get_active_sheet();
|
|
|
|
|
|
|
|
/// <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>
|
2016-08-05 13:52:05 +08:00
|
|
|
worksheet get_sheet_by_title(const std::string &sheet_name);
|
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>
|
2016-08-05 13:52:05 +08:00
|
|
|
const worksheet get_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>
|
2014-05-30 08:52:14 +08:00
|
|
|
worksheet get_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>
|
2014-05-30 08:52:14 +08:00
|
|
|
const worksheet get_sheet_by_index(std::size_t index) const;
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2016-08-05 13:52:05 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Return the worksheet with a sheetId of id.
|
|
|
|
/// </summary>
|
|
|
|
worksheet get_sheet_by_id(std::size_t id);
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Return the const worksheet with a sheetId of id.
|
|
|
|
/// </summary>
|
|
|
|
const worksheet get_sheet_by_id(std::size_t id) const;
|
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Return true if this workbook contains a sheet with the given name.
|
|
|
|
/// </summary>
|
2015-11-11 07:58:54 +08:00
|
|
|
bool contains(const std::string &key) const;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
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 get_index(worksheet worksheet);
|
|
|
|
|
|
|
|
// remove worksheets
|
|
|
|
|
2016-08-02 06:33:43 +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
|
|
|
|
|
|
|
/// <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
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns an iterator to the first worksheet in this workbook.
|
|
|
|
/// </summary>
|
2014-05-30 08:52:14 +08:00
|
|
|
iterator begin();
|
2016-08-02 06:33:43 +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>
|
2014-05-30 08:52:14 +08:00
|
|
|
iterator end();
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-02 06:33:43 +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
|
|
|
|
|
|
|
/// <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;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns an iterator to the first worksheet in this workbook.
|
|
|
|
/// </summary>
|
2014-05-30 08:52:14 +08:00
|
|
|
const_iterator cbegin() const;
|
2016-08-02 06:33:43 +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>
|
2014-05-30 08:52:14 +08:00
|
|
|
const_iterator cend() const;
|
2016-06-14 11:36:26 +08:00
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns a reverse iterator to the last worksheet in this workbook.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
reverse_iterator rbegin();
|
2016-08-02 06:33:43 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns an iterator to the worksheet preceeding the first worksheet of the workbook.
|
|
|
|
/// This worksheet acts as a placeholder; attempting to access it will cause an
|
|
|
|
/// exception to be thrown.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
reverse_iterator rend();
|
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns a const reverse iterator to the last worksheet in this workbook.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
const_reverse_iterator rbegin() const;
|
2016-08-02 06:33:43 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns a const reverse iterator to the worksheet preceeding the first worksheet of the workbook.
|
|
|
|
/// This worksheet acts as a placeholder; attempting to access it will cause an
|
|
|
|
/// exception to be thrown.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
const_reverse_iterator rend() const;
|
|
|
|
|
2016-08-02 06:33:43 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Returns a const reverse iterator to the last worksheet in this workbook.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
const_reverse_iterator crbegin() const;
|
2016-08-02 06:33:43 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns a const reverse iterator to the worksheet preceeding the first worksheet of the workbook.
|
|
|
|
/// This worksheet acts as a placeholder; attempting to access it will cause an
|
|
|
|
/// exception to be thrown.
|
|
|
|
/// </summary>
|
2016-06-14 11:36:26 +08:00
|
|
|
const_reverse_iterator crend() const;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-02 06:33:43 +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> get_sheet_titles() const;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-03 12:12:18 +08:00
|
|
|
std::string get_application() const;
|
|
|
|
void set_application(const std::string &application);
|
|
|
|
|
|
|
|
calendar get_base_date() const;
|
|
|
|
void set_base_date(calendar base_date);
|
|
|
|
|
|
|
|
std::string get_creator() const;
|
|
|
|
void set_creator(const std::string &creator);
|
|
|
|
|
|
|
|
std::string get_last_modified_by() const;
|
|
|
|
void set_last_modified_by(const std::string &last_modified_by);
|
|
|
|
|
|
|
|
datetime get_created() const;
|
|
|
|
void set_created(const datetime &when);
|
|
|
|
|
|
|
|
datetime get_modified() const;
|
|
|
|
void set_modified(const datetime &when);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-08-03 12:12:18 +08:00
|
|
|
int get_doc_security() const;
|
|
|
|
void set_doc_security(int doc_security);
|
|
|
|
|
|
|
|
bool get_scale_crop() const;
|
|
|
|
void set_scale_crop(bool scale_crop);
|
|
|
|
|
|
|
|
std::string get_company() const;
|
|
|
|
void set_company(const std::string &company);
|
|
|
|
|
|
|
|
bool links_up_to_date() const;
|
|
|
|
void set_links_up_to_date(bool links_up_to_date);
|
|
|
|
|
|
|
|
bool is_shared_doc() const;
|
|
|
|
void set_shared_doc(bool shared_doc);
|
|
|
|
|
|
|
|
bool hyperlinks_changed() const;
|
|
|
|
void set_hyperlinks_changed(bool hyperlinks_changed);
|
|
|
|
|
|
|
|
std::string get_app_version() const;
|
|
|
|
void set_app_version(const std::string &version);
|
|
|
|
|
|
|
|
std::string get_title() const;
|
|
|
|
void set_title(const std::string &title);
|
2016-03-09 11:32:32 +08:00
|
|
|
|
2015-11-01 22:43:01 +08:00
|
|
|
// named ranges
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2015-10-15 06:05:13 +08:00
|
|
|
std::vector<named_range> get_named_ranges() const;
|
2015-11-11 07:58:54 +08:00
|
|
|
void create_named_range(const std::string &name, worksheet worksheet, const range_reference &reference);
|
2015-11-11 08:47:31 +08:00
|
|
|
void create_named_range(const std::string &name, worksheet worksheet, const std::string &reference_string);
|
2015-11-11 07:58:54 +08:00
|
|
|
bool has_named_range(const std::string &name) const;
|
|
|
|
range get_named_range(const std::string &name);
|
|
|
|
void remove_named_range(const std::string &name);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
|
|
|
// serialization
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2016-08-06 22:40:17 +08:00
|
|
|
void save(std::vector<std::uint8_t> &data) const;
|
|
|
|
void save(const std::string &filename) const;
|
|
|
|
void save(const xlnt::path &filename) const;
|
|
|
|
void save(std::ostream &stream) const;
|
2016-08-03 12:12:18 +08:00
|
|
|
|
2016-08-05 13:52:05 +08:00
|
|
|
void load(const std::vector<std::uint8_t> &data);
|
|
|
|
void load(const std::string &filename);
|
|
|
|
void load(const xlnt::path &filename);
|
|
|
|
void load(std::istream &stream);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2015-11-11 07:58:54 +08:00
|
|
|
void set_code_name(const std::string &code_name);
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// theme
|
|
|
|
|
2016-08-03 12:12:18 +08:00
|
|
|
bool has_theme() const;
|
|
|
|
const theme &get_theme() const;
|
|
|
|
void set_theme(const theme &value);
|
2016-07-22 10:14:00 +08:00
|
|
|
|
|
|
|
// formats
|
2016-03-10 17:12:51 +08:00
|
|
|
|
2016-05-15 01:57:07 +08:00
|
|
|
format &get_format(std::size_t format_index);
|
|
|
|
const format &get_format(std::size_t format_index) const;
|
|
|
|
std::size_t add_format(const format &new_format);
|
|
|
|
void clear_formats();
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2016-07-24 07:43:24 +08:00
|
|
|
// styles
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2016-06-11 01:40:50 +08:00
|
|
|
bool has_style(const std::string &name) const;
|
2016-05-15 01:57:07 +08:00
|
|
|
style &get_style(const std::string &name);
|
|
|
|
const style &get_style(const std::string &name) const;
|
2016-06-20 02:43:41 +08:00
|
|
|
style &get_style_by_id(std::size_t style_id);
|
|
|
|
const style &get_style_by_id(std::size_t style_id) const;
|
2016-06-11 01:40:50 +08:00
|
|
|
std::size_t get_style_id(const std::string &name) const;
|
2016-05-15 01:57:07 +08:00
|
|
|
style &create_style(const std::string &name);
|
2016-06-11 01:40:50 +08:00
|
|
|
std::size_t add_style(const style &new_style);
|
2016-05-16 03:03:02 +08:00
|
|
|
void clear_styles();
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// manifest
|
|
|
|
|
2015-10-30 01:46:56 +08:00
|
|
|
manifest &get_manifest();
|
|
|
|
const manifest &get_manifest() const;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// shared strings
|
|
|
|
|
2016-05-15 03:19:08 +08:00
|
|
|
void add_shared_string(const text &shared, bool allow_duplicates=false);
|
|
|
|
std::vector<text> &get_shared_strings();
|
|
|
|
const std::vector<text> &get_shared_strings() const;
|
2016-03-10 17:12:51 +08:00
|
|
|
|
2016-07-22 10:14:00 +08:00
|
|
|
// thumbnail
|
|
|
|
|
2016-08-06 22:40:17 +08:00
|
|
|
void set_thumbnail(const std::vector<std::uint8_t> &thumbnail,
|
|
|
|
const std::string &extension, const std::string &content_type);
|
2016-03-10 17:12:51 +08:00
|
|
|
const std::vector<std::uint8_t> &get_thumbnail() const;
|
2015-11-01 22:43:01 +08:00
|
|
|
|
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-08-02 06:33:43 +08:00
|
|
|
friend class worksheet;
|
2016-08-05 13:52:05 +08:00
|
|
|
friend class detail::xlsx_consumer;
|
|
|
|
friend class detail::xlsx_producer;
|
2016-07-22 10:14:00 +08:00
|
|
|
|
2016-08-03 12:12:18 +08:00
|
|
|
workbook(detail::workbook_impl *impl);
|
|
|
|
|
2016-08-05 13:52:05 +08:00
|
|
|
detail::workbook_impl &impl();
|
|
|
|
|
|
|
|
const detail::workbook_impl &impl() const;
|
2016-07-22 10:14:00 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Apply the function "f" to every cell in every worksheet in this workbook.
|
|
|
|
/// </summary>
|
2016-06-11 01:40:50 +08:00
|
|
|
void apply_to_cells(std::function<void(cell)> f);
|
2016-05-16 03:03:02 +08:00
|
|
|
|
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>
|
2016-05-01 04:19:45 +08:00
|
|
|
std::unique_ptr<detail::workbook_impl> d_;
|
2014-05-21 22:20:30 +08:00
|
|
|
};
|
2015-11-01 22:43:01 +08:00
|
|
|
|
2014-05-21 22:20:30 +08:00
|
|
|
} // namespace xlnt
|