Symbolic link
374 lines
11 KiB
C++
Symbolic link
374 lines
11 KiB
C++
/*
|
|
|
|
____ ____ ___ ____ ____ ____ ___
|
|
6MMMMb `MM( )M' `MM' 6MMMMb\`MM( )M'
|
|
8P Y8 `MM. d' MM 6M' ` `MM. d'
|
|
6M Mb __ ____ ____ ___ __ `MM. d' MM MM `MM. d'
|
|
MM MM `M6MMMMb 6MMMMb `MM 6MMb `MM. d' MM YM. `MM. d'
|
|
MM MM MM' `Mb 6M' `Mb MMM9 `Mb `MMd MM YMMMMb `MMd
|
|
MM MM MM MM MM MM MM' MM dMM. MM `Mb dMM.
|
|
MM MM MM MM MMMMMMMM MM MM d'`MM. MM MM d'`MM.
|
|
YM M9 MM MM MM MM MM d' `MM. MM MM d' `MM.
|
|
8b d8 MM. ,M9 YM d9 MM MM d' `MM. MM / L ,M9 d' `MM.
|
|
YMMMM9 MMYMMM9 YMMMM9 _MM_ _MM_M(_ _)MM_ _MMMMMMM MYMMMM9 _M(_ _)MM_
|
|
MM
|
|
MM
|
|
_MM_
|
|
|
|
Copyright (c) 2018, Kenneth Troldal Balslev
|
|
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
- Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
- Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
- Neither the name of the author nor the
|
|
names of any contributors may be used to endorse or promote products
|
|
derived from this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
#ifndef OPENXLSX_XLWORKBOOK_HPP
|
|
#define OPENXLSX_XLWORKBOOK_HPP
|
|
|
|
#pragma warning(push)
|
|
#pragma warning(disable : 4251)
|
|
#pragma warning(disable : 4275)
|
|
|
|
// ===== External Includes ===== //
|
|
#include <variant>
|
|
#include <vector>
|
|
|
|
// ===== OpenXLSX Includes ===== //
|
|
#include "OpenXLSX-Exports.hpp"
|
|
#include "XLCommandQuery.hpp"
|
|
#include "XLContentTypes.hpp"
|
|
#include "XLException.hpp"
|
|
#include "XLRelationships.hpp"
|
|
#include "XLXmlFile.hpp"
|
|
|
|
namespace OpenXLSX
|
|
{
|
|
class XLSharedStrings;
|
|
|
|
class XLSheet;
|
|
|
|
class XLWorksheet;
|
|
|
|
class XLChartsheet;
|
|
|
|
/**
|
|
* @brief The XLSheetType class is an enumeration of the available sheet types, e.g. Worksheet (ordinary
|
|
* spreadsheets), and Chartsheet (sheets with only a chart).
|
|
*/
|
|
enum class XLSheetType { Worksheet, Chartsheet, Dialogsheet, Macrosheet };
|
|
|
|
/**
|
|
* @brief This class encapsulates the concept of a Workbook. It provides access to the individual sheets
|
|
* (worksheets or chartsheets), as well as functionality for adding, deleting, moving and renaming sheets.
|
|
*/
|
|
class OPENXLSX_EXPORT XLWorkbook : public XLXmlFile
|
|
{
|
|
friend class XLSheet;
|
|
friend class XLDocument;
|
|
|
|
public: // ---------- Public Member Functions ---------- //
|
|
/**
|
|
* @brief Default constructor. Creates an empty ('null') XLWorkbook object.
|
|
*/
|
|
XLWorkbook() = default;
|
|
|
|
/**
|
|
* @brief Constructor. Takes a pointer to an XLXmlData object (stored in the parent XLDocument object).
|
|
* @param xmlData A pointer to the underlying XLXmlData object, which holds the XML data.
|
|
* @note Do not create an XLWorkbook object directly. Get access through the an XLDocument object.
|
|
*/
|
|
explicit XLWorkbook(XLXmlData* xmlData);
|
|
|
|
/**
|
|
* @brief Copy Constructor.
|
|
* @param other The XLWorkbook object to be copied.
|
|
* @note The copy constructor has been explicitly defaulted.
|
|
*/
|
|
XLWorkbook(const XLWorkbook& other) = default;
|
|
|
|
/**
|
|
* @brief Move constructor.
|
|
* @param other The XLWorkbook to be moved.
|
|
* @note The move constructor has been explicitly defaulted.
|
|
*/
|
|
XLWorkbook(XLWorkbook&& other) = default;
|
|
|
|
/**
|
|
* @brief Destructor
|
|
* @note Default destructor specified
|
|
*/
|
|
~XLWorkbook();
|
|
|
|
/**
|
|
* @brief Copy assignment operator.
|
|
* @param other The XLWorkbook object to be assigned to the current.
|
|
* @return A reference to *this
|
|
* @note The copy assignment operator has been explicitly deleted, as XLWorkbook objects should not be copied.
|
|
*/
|
|
XLWorkbook& operator=(const XLWorkbook& other) = default;
|
|
|
|
/**
|
|
* @brief Move assignment operator.
|
|
* @param other The XLWorkbook to be move assigned.
|
|
* @return A reference to *this
|
|
* @note The move assignment operator has been explicitly deleted, as XLWorkbook objects should not be moved.
|
|
*/
|
|
XLWorkbook& operator=(XLWorkbook&& other) = default;
|
|
|
|
/**
|
|
* @brief Get the sheet (worksheet or chartsheet) at the given index.
|
|
* @param index The index at which the desired sheet is located.
|
|
* @return A pointer to an XLAbstractSheet with the sheet at the index.
|
|
* @note The index must be 1-based (rather than 0-based) as this is the default for Excel spreadsheets.
|
|
*/
|
|
XLSheet sheet(uint16_t index);
|
|
|
|
/**
|
|
* @brief Get the sheet (worksheet or chartsheet) with the given name.
|
|
* @param sheetName The name at which the desired sheet is located.
|
|
* @return A pointer to an XLAbstractSheet with the sheet at the index.
|
|
*/
|
|
XLSheet sheet(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
XLWorksheet worksheet(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
XLChartsheet chartsheet(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief Delete sheet (worksheet or chartsheet) from the workbook.
|
|
* @param sheetName Name of the sheet to delete.
|
|
* @throws XLException An exception will be thrown if trying to delete the last worksheet in the workbook
|
|
* @warning A workbook must contain at least one worksheet. Trying to delete the last worksheet from the
|
|
* workbook will trow an exception.
|
|
*/
|
|
void deleteSheet(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
*/
|
|
void addWorksheet(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param existingName
|
|
* @param newName
|
|
*/
|
|
void cloneSheet(const std::string& existingName, const std::string& newName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @param index
|
|
*/
|
|
void setSheetIndex(const std::string& sheetName, unsigned int index);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
unsigned int indexOfSheet(const std::string& sheetName) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
XLSheetType typeOfSheet(const std::string& sheetName) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param index
|
|
* @return
|
|
*/
|
|
XLSheetType typeOfSheet(unsigned int index) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
unsigned int sheetCount() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
unsigned int worksheetCount() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
unsigned int chartsheetCount() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
std::vector<std::string> sheetNames() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
std::vector<std::string> worksheetNames() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
std::vector<std::string> chartsheetNames() const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
bool sheetExists(const std::string& sheetName) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
bool worksheetExists(const std::string& sheetName) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
bool chartsheetExists(const std::string& sheetName) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param oldName
|
|
* @param newName
|
|
*/
|
|
void updateSheetReferences(const std::string& oldName, const std::string& newName);
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
XLSharedStrings sharedStrings();
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
bool hasSharedStrings() const;
|
|
|
|
/**
|
|
* @brief
|
|
*/
|
|
void deleteNamedRanges();
|
|
|
|
/**
|
|
* @brief set a flag to force full calculation upon loading the file in Excel
|
|
*/
|
|
void setFullCalculationOnLoad();
|
|
|
|
private: // ---------- Private Member Functions ---------- //
|
|
|
|
/**
|
|
* @brief
|
|
* @return
|
|
*/
|
|
uint16_t createInternalSheetID();
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @return
|
|
*/
|
|
std::string sheetID(const std::string& sheetName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetID
|
|
* @return
|
|
*/
|
|
std::string sheetName(const std::string& sheetID) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetID
|
|
* @return
|
|
*/
|
|
std::string sheetVisibility(const std::string& sheetID) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetName
|
|
* @param internalID
|
|
*/
|
|
void prepareSheetMetadata(const std::string& sheetName, uint16_t internalID);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetRID
|
|
* @param newName
|
|
*/
|
|
void setSheetName(const std::string& sheetRID, const std::string& newName);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetRID
|
|
* @param state
|
|
*/
|
|
void setSheetVisibility(const std::string& sheetRID, const std::string& state);
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetRID
|
|
* @return
|
|
*/
|
|
bool sheetIsActive(const std::string& sheetRID) const;
|
|
|
|
/**
|
|
* @brief
|
|
* @param sheetRID
|
|
* @param state
|
|
*/
|
|
void setSheetActive(const std::string& sheetRID);
|
|
|
|
|
|
};
|
|
} // namespace OpenXLSX
|
|
|
|
#pragma warning(pop)
|
|
#endif // OPENXLSX_XLWORKBOOK_HPP
|