diff --git a/OOXML/Binary/Sheets/Reader/XMLReader/XML2TableConverter.h b/OOXML/Binary/Sheets/Reader/XMLReader/XML2TableConverter.h index f961d60d45..895df2de06 100644 --- a/OOXML/Binary/Sheets/Reader/XMLReader/XML2TableConverter.h +++ b/OOXML/Binary/Sheets/Reader/XMLReader/XML2TableConverter.h @@ -32,6 +32,8 @@ #pragma once +#include "columnNamesController.h" + #include "../../../../DesktopEditor/xml/include/xmlutils.h" #include "../../../../Base/Base.h" diff --git a/OOXML/Binary/Sheets/Reader/XMLReader/columnNameController.cpp b/OOXML/Binary/Sheets/Reader/XMLReader/columnNameController.cpp new file mode 100644 index 0000000000..02d58edb97 --- /dev/null +++ b/OOXML/Binary/Sheets/Reader/XMLReader/columnNameController.cpp @@ -0,0 +1,59 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "columnNamesController.h" + +_UINT32 ColumnNameController::CreateColumnName(std::wstring &column) +{ + + if(colNames_.find(column) != colNames_.end()) + { + column += std::to_wstring(colNamePostfix_); + colNamePostfix_++; + } + + colNames_.emplace(column, colNumber_); + auto colNumber = colNumber_; + colNumber_ ++; + return colNumber; + +} + +_INT64 ColumnNameController::GetColumnNumber(const std::wstring &columnName) +{ + if(colNames_.find(columnName) != colNames_.end()) + { + return colNames_.at(columnName); + } + + return -1; +} diff --git a/OOXML/Binary/Sheets/Reader/XMLReader/columnNamesController.h b/OOXML/Binary/Sheets/Reader/XMLReader/columnNamesController.h new file mode 100644 index 0000000000..840e5de893 --- /dev/null +++ b/OOXML/Binary/Sheets/Reader/XMLReader/columnNamesController.h @@ -0,0 +1,69 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ +#pragma once + +#include "../../../../Base/Base.h" + +#include +#include + +/// @brief класс контролирующий уникальность имен столбцов при открытии xml документов +class ColumnNameController +{ + +public: + /// @brief Создание уникального имени столбца и установка его номера + /// @param column строка с именем столбца + /// @return номер, который будет у столбца с этим именем + _UINT32 CreateColumnName(std::wstring &column); + + /// @brief Поиск номера столбца с указанным именем + /// @param columnName строка с именем столбца + /// @return номер столбца, если такой есть и -1, если такого столбца нет + _INT64 GetColumnNumber(const std::wstring &columnName); + +private: + +/// @brief хранит уникальные имена столбцов вместе с их номерами +std::map colNames_; + +/// @brief цифра добавляющаяся к повторяющимся именам столбцов для их уникальности +_UINT32 colNamePostfix_ = 2; + + +/// @brief максимальный номер столбца, который присваивается при получении нового имени +_UINT32 colNumber_ = 0; + + + + +}; diff --git a/OOXML/Projects/Linux/BinDocument/BinDocument.pro b/OOXML/Projects/Linux/BinDocument/BinDocument.pro index f19f3a5eca..cde1d57a72 100644 --- a/OOXML/Projects/Linux/BinDocument/BinDocument.pro +++ b/OOXML/Projects/Linux/BinDocument/BinDocument.pro @@ -62,7 +62,8 @@ SOURCES += \ ../../../Binary/Document/BinReader/webSettingsWriter.cpp \ ../../../Binary/Sheets/Reader/XMLReader/XMLReader.cpp \ ../../../Binary/Sheets/Reader/XMLReader/XML2TableConverter.cpp \ - ../../../Binary/Sheets/Reader/XMLReader/XLSXTableController.cpp + ../../../Binary/Sheets/Reader/XMLReader/XLSXTableController.cpp \ + ../../../Binary/Sheets/Reader/XMLReader/columnNameController.cpp HEADERS += \ ../../../Binary/Document/DocWrapper/DocxSerializer.h \ @@ -102,4 +103,5 @@ HEADERS += \ ../../../Binary/Document/BinReader/CustomXmlWriter.h\ ../../../Binary/Sheets/Reader/XMLReader/XMLReader.h \ ../../../Binary/Sheets/Reader/XMLReader/XML2TableConverter.h \ - ../../../Binary/Sheets/Reader/XMLReader/XLSXTableController.h + ../../../Binary/Sheets/Reader/XMLReader/XLSXTableController.h \ + ../../../Binary/Sheets/Reader/XMLReader/columnNameController.h