projects/ExcelToXMLTool/Source/ThirdParty/OpenXLSX/include/XLDocument.hpp

Symbolic link
314 lines
10 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_XLDOCUMENT_HPP
#define OPENXLSX_XLDOCUMENT_HPP
#pragma warning(push)
#pragma warning(disable : 4251)
#pragma warning(disable : 4275)
// ===== External Includes ===== //
#include <algorithm>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <string>
// ===== OpenXLSX Includes ===== //
#include "OpenXLSX-Exports.hpp"
#include "XLCommandQuery.hpp"
#include "XLContentTypes.hpp"
#include "XLException.hpp"
#include "XLProperties.hpp"
#include "XLRelationships.hpp"
#include "XLSharedStrings.hpp"
#include "XLWorkbook.hpp"
#include "XLXmlData.hpp"
#include "XLZipArchive.hpp"
namespace OpenXLSX
{
/**
* @brief The XLDocumentProperties class is an enumeration of the possible properties (metadata) that can be set
* for a XLDocument object (and .xlsx file)
*/
enum class XLProperty {
Title,
Subject,
Creator,
Keywords,
Description,
LastModifiedBy,
LastPrinted,
CreationDate,
ModificationDate,
Category,
Application,
DocSecurity,
ScaleCrop,
Manager,
Company,
LinksUpToDate,
SharedDoc,
HyperlinkBase,
HyperlinksChanged,
AppVersion
};
/**
* @brief This class encapsulates the concept of an excel file. It is different from the XLWorkbook, in that an
* XLDocument holds an XLWorkbook together with its metadata, as well as methods for opening,
* closing and saving the document.\n<b><em>The XLDocument is the entrypoint for clients
* using the RapidXLSX library.</em></b>
*/
class OPENXLSX_EXPORT XLDocument final
{
//----- Friends
friend class XLXmlFile;
friend class XLWorkbook;
friend class XLSheet;
friend class XLXmlData;
//---------- Public Member Functions
public:
/**
* @brief Constructor. The default constructor with no arguments.
*/
XLDocument() = default;
/**
* @brief Constructor. An alternative constructor, taking the path to the .xlsx file as an argument.
* @param docPath A std::string with the path to the .xlsx file.
*/
explicit XLDocument(const std::string& docPath);
/**
* @brief Copy constructor
* @param other The object to copy
* @note Copy constructor explicitly deleted.
*/
XLDocument(const XLDocument& other) = delete;
/**
* @brief
* @param other
*/
XLDocument(XLDocument&& other) noexcept = default;
/**
* @brief Destructor
*/
~XLDocument();
/**
* @brief
* @param other
* @return
*/
XLDocument& operator=(const XLDocument& other) = delete;
/**
* @brief
* @param other
* @return
*/
XLDocument& operator=(XLDocument&& other) noexcept = default;
/**
* @brief Open the .xlsx file with the given path
* @param fileName The path of the .xlsx file to open
*/
void open(const std::string& fileName);
/**
* @brief Create a new .xlsx file with the given name.
* @param fileName The path of the new .xlsx file.
*/
void create(const std::string& fileName);
/**
* @brief Close the current document
*/
void close();
/**
* @brief Save the current document using the current filename, overwriting the existing file.
* @return true if successful; otherwise false.
*/
void save();
/**
* @brief Save the document with a new name. If a file exists with that name, it will be overwritten.
* @param fileName The path of the file
* @return true if successful; otherwise false.
*/
void saveAs(const std::string& fileName);
/**
* @brief Get the filename of the current document, e.g. "spreadsheet.xlsx".
* @return A std::string with the filename.
*/
const std::string& name() const;
/**
* @brief Get the full path of the current document, e.g. "drive/blah/spreadsheet.xlsx"
* @return A std::string with the path.
*/
const std::string& path() const;
/**
* @brief Get the underlying workbook object, as a const object.
* @return A const pointer to the XLWorkbook object.
*/
XLWorkbook workbook() const;
/**
* @brief Get the requested document property.
* @param prop The name of the property to get.
* @return The property as a string
*/
std::string property(XLProperty prop) const;
/**
* @brief Set a property
* @param prop The property to set.
* @param value The getValue of the property, as a string
*/
void setProperty(XLProperty prop, const std::string& value);
/**
* @brief
* @return
*/
explicit operator bool() const;
/**
* @brief Delete the property from the document
* @param theProperty The property to delete from the document
*/
void deleteProperty(XLProperty theProperty);
/**
* @brief
* @param command
*/
void execCommand(const XLCommand& command);
/**
* @brief
* @param query
* @return
*/
XLQuery execQuery(const XLQuery& query) const;
/**
* @brief
* @param query
* @return
*/
XLQuery execQuery(const XLQuery& query);
//----------------------------------------------------------------------------------------------------------------------
// Protected Member Functions
//----------------------------------------------------------------------------------------------------------------------
protected:
/**
* @brief Get an XML file from the .xlsx archive.
* @param path The relative path of the file.
* @return A std::string with the content of the file
*/
std::string extractXmlFromArchive(const std::string& path);
/**
* @brief
* @param path
* @return
*/
XLXmlData* getXmlData(const std::string& path);
/**
* @brief
* @param path
* @return
*/
const XLXmlData* getXmlData(const std::string& path) const;
/**
* @brief
* @param path
* @return
*/
bool hasXmlData(const std::string& path) const;
//----------------------------------------------------------------------------------------------------------------------
// Private Member Variables
//----------------------------------------------------------------------------------------------------------------------
private:
std::string m_filePath {}; /**< The path to the original file*/
std::string m_realPath {}; /**< */
mutable std::list<XLXmlData> m_data {}; /**< */
mutable std::deque<std::string> m_sharedStringCache {}; /**< */
mutable XLSharedStrings m_sharedStrings {}; /**< */
XLRelationships m_docRelationships {}; /**< A pointer to the document relationships object*/
XLRelationships m_wbkRelationships {}; /**< A pointer to the document relationships object*/
XLContentTypes m_contentTypes {}; /**< A pointer to the content types object*/
XLAppProperties m_appProperties {}; /**< A pointer to the App properties object */
XLProperties m_coreProperties {}; /**< A pointer to the Core properties object*/
XLWorkbook m_workbook {}; /**< A pointer to the workbook object */
XLZipArchive m_archive {}; /**< */
};
} // namespace OpenXLSX
#pragma warning(pop)
#endif // OPENXLSX_XLDOCUMENT_HPP