Compare commits

...

4 Commits

Author SHA1 Message Date
310cff0dfe change non-defined temp directory to unique 2017-12-23 14:48:44 +03:00
7f6611ab21 .. 2017-12-23 14:35:52 +03:00
bb37e348f5 . 2017-12-23 13:26:11 +03:00
6b5e03df5e . 2017-12-23 12:29:40 +03:00
6 changed files with 135 additions and 132 deletions

View File

@ -51,18 +51,17 @@ namespace OOX
{
public:
WritingElement_AdditionConstructors(CComment)
CComment()
CComment()
{
}
virtual ~CComment()
{
}
public:
virtual void fromXML(XmlUtils::CXmlNode& oNode)
virtual void fromXML(XmlUtils::CXmlNode& oNode)
{
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
@ -75,74 +74,74 @@ namespace OOX
std::wstring sName = oReader.GetName();
WritingElement *pItem = NULL;
/*if ( _T("w:altChunk") == sName )
/*if ( L"w:altChunk" ==sName )
pItem = new Logic::AltChunk( oItem );
else */if ( _T("w:bookmarkEnd") == sName )
else */if ( L"w:bookmarkEnd" ==sName )
pItem = new Logic::CBookmarkEnd( oReader );
else if ( _T("w:bookmarkStart") == sName )
else if ( L"w:bookmarkStart" ==sName )
pItem = new Logic::CBookmarkStart( oReader );
else if ( _T("w:commentRangeEnd") == sName )
else if ( L"w:commentRangeEnd" ==sName )
pItem = new Logic::CCommentRangeEnd( oReader );
else if ( _T("w:commentRangeStart") == sName )
else if ( L"w:commentRangeStart" ==sName )
pItem = new Logic::CCommentRangeStart( oReader );
//else if ( _T("w:customXml") == sName )
//else if ( L"w:customXml" ==sName )
// pItem = new Logic::CCustomXml( oReader );
else if ( _T("w:customXmlDelRangeEnd") == sName )
else if ( L"w:customXmlDelRangeEnd" ==sName )
pItem = new Logic::CCustomXmlDelRangeEnd( oReader );
else if ( _T("w:customXmlDelRangeStart") == sName )
else if ( L"w:customXmlDelRangeStart" ==sName )
pItem = new Logic::CCustomXmlDelRangeStart( oReader );
else if ( _T("w:customXmlInsRangeEnd") == sName )
else if ( L"w:customXmlInsRangeEnd" ==sName )
pItem = new Logic::CCustomXmlInsRangeEnd( oReader );
else if ( _T("w:customXmlInsRangeStart") == sName )
else if ( L"w:customXmlInsRangeStart" ==sName )
pItem = new Logic::CCustomXmlInsRangeStart( oReader );
else if ( _T("w:customXmlMoveFromRangeEnd") == sName )
else if ( L"w:customXmlMoveFromRangeEnd" ==sName )
pItem = new Logic::CCustomXmlMoveFromRangeEnd( oReader );
else if ( _T("w:customXmlMoveFromRangeStart") == sName )
else if ( L"w:customXmlMoveFromRangeStart" ==sName )
pItem = new Logic::CCustomXmlMoveFromRangeStart( oReader );
else if ( _T("w:customXmlMoveToRangeEnd") == sName )
else if ( L"w:customXmlMoveToRangeEnd" ==sName )
pItem = new Logic::CCustomXmlMoveToRangeEnd( oReader );
else if ( _T("w:customXmlMoveToRangeStart") == sName )
else if ( L"w:customXmlMoveToRangeStart" ==sName )
pItem = new Logic::CCustomXmlMoveToRangeStart( oReader );
else if ( _T("w:del") == sName )
else if ( L"w:del" ==sName )
pItem = new Logic::CDel( oReader );
else if ( _T("w:ins") == sName )
else if ( L"w:ins" ==sName )
pItem = new Logic::CIns( oReader );
else if ( _T("w:moveFrom") == sName )
else if ( L"w:moveFrom" ==sName )
pItem = new Logic::CMoveFrom( oReader );
else if ( _T("w:moveFromRangeEnd") == sName )
else if ( L"w:moveFromRangeEnd" ==sName )
pItem = new Logic::CMoveFromRangeEnd( oReader );
else if ( _T("w:moveFromRangeStart") == sName )
else if ( L"w:moveFromRangeStart" ==sName )
pItem = new Logic::CMoveFromRangeStart( oReader );
else if ( _T("w:moveTo") == sName )
else if ( L"w:moveTo" ==sName )
pItem = new Logic::CMoveTo( oReader );
else if ( _T("w:moveToRangeEnd") == sName )
else if ( L"w:moveToRangeEnd" ==sName )
pItem = new Logic::CMoveToRangeEnd( oReader );
else if ( _T("w:moveToRangeStart") == sName )
else if ( L"w:moveToRangeStart" ==sName )
pItem = new Logic::CMoveToRangeStart( oReader );
else if ( _T("m:oMath") == sName )
else if ( L"m:oMath" ==sName )
pItem = new Logic::COMath( oReader );
else if ( _T("m:oMathPara") == sName )
else if ( L"m:oMathPara" ==sName )
pItem = new Logic::COMathPara( oReader );
else if ( _T("w:p") == sName )
else if ( L"w:p" ==sName )
pItem = new Logic::CParagraph( oReader );
else if ( _T("w:permEnd") == sName )
else if ( L"w:permEnd" ==sName )
pItem = new Logic::CPermEnd( oReader );
else if ( _T("w:permStart") == sName )
else if ( L"w:permStart" ==sName )
pItem = new Logic::CPermStart( oReader );
else if ( _T("w:proofErr") == sName )
else if ( L"w:proofErr" ==sName )
pItem = new Logic::CProofErr( oReader );
else if ( _T("w:sdt") == sName )
else if ( L"w:sdt" ==sName )
pItem = new Logic::CSdt( oReader );
else if ( _T("w:tbl") == sName )
else if ( L"w:tbl" ==sName )
pItem = new Logic::CTbl( oReader );
if ( pItem )
m_arrItems.push_back( pItem );
}
}
virtual std::wstring toXML() const
virtual std::wstring toXML() const
{
std::wstring sResult = _T("");
std::wstring sResult = L"";
return sResult;
}
@ -160,7 +159,7 @@ namespace OOX
std::wstring getTextArr(const std::list<WritingElement* > & arrItems, bool& bFirstPar) const
{
std::wstring sRes;
for ( std::list<WritingElement *>::const_iterator it = m_arrItems.begin(); it != m_arrItems.end(); it++)
for ( std::list<WritingElement *>::const_iterator it = arrItems.begin(); it != arrItems.end(); it++)
{
WritingElement* item = *it;
if (item == NULL) continue;
@ -221,7 +220,7 @@ namespace OOX
if(bFirstPar)
bFirstPar = false;
else
sRes += _T("\n");
sRes += L"\n";
OOX::Logic::CParagraph* pParagraph = static_cast<OOX::Logic::CParagraph*>(item);
sRes += getTextArr(pParagraph->m_arrItems, bFirstPar);
}
@ -234,7 +233,7 @@ namespace OOX
break;
case OOX::et_w_cr:
case OOX::et_w_br:
sRes += _T("\n");
sRes += L"\n";
break;
case OOX::et_w_nonBreakHyphen:
{
@ -243,7 +242,7 @@ namespace OOX
break;
}
case OOX::et_w_tab:
sRes += _T(" ");
sRes += L" ";
break;
case OOX::et_w_sym:
{
@ -271,14 +270,13 @@ namespace OOX
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w:author"), m_oAuthor )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:date"), m_oDate )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("oodata"), m_oOOData )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:id"), m_oId )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w:initials"), m_oInitials )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"w:author", m_oAuthor )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w:date", m_oDate )
WritingElement_ReadAttributes_Read_else_if( oReader, L"oodata", m_oOOData )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w:id", m_oId )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w:initials", m_oInitials )
WritingElement_ReadAttributes_End( oReader )
}
public:
@ -309,7 +307,10 @@ namespace OOX
virtual ~CComments()
{
for(size_t i = 0, length = m_arrComments.size(); i < length; ++i)
{
if (m_arrComments[i]) delete m_arrComments[i];
m_arrComments[i] = NULL;
}
m_arrComments.clear();
}
virtual void read(const CPath& oFilePath)
@ -325,13 +326,13 @@ namespace OOX
return;
std::wstring sName = oReader.GetName();
if ( _T("w:comments") == sName && !oReader.IsEmptyNode() )
if ( L"w:comments" == sName && !oReader.IsEmptyNode() )
{
int nNumberingDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nNumberingDepth ) )
{
sName = oReader.GetName();
if ( _T("w:comment") == sName )
if ( L"w:comment" == sName )
m_arrComments.push_back( new CComment(oReader) );
}
}
@ -367,19 +368,19 @@ namespace OOX
virtual ~CCommentExt()
{
}
virtual void fromXML(XmlUtils::CXmlNode& oNode)
virtual void fromXML(XmlUtils::CXmlNode& oNode)
{
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( !oReader.IsEmptyNode() )
oReader.ReadTillEnd();
}
virtual std::wstring toXML() const
virtual std::wstring toXML() const
{
std::wstring sResult = _T("");
std::wstring sResult = L"";
return sResult;
}
@ -390,12 +391,11 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w15:paraId"), m_oParaId )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w15:paraIdParent"), m_oParaIdParent )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w15:done"), m_oDone )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"w15:paraId", m_oParaId )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w15:paraIdParent", m_oParaIdParent )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w15:done", m_oDone )
WritingElement_ReadAttributes_End( oReader )
}
public:
@ -418,7 +418,10 @@ namespace OOX
virtual ~CCommentsExt()
{
for(size_t i = 0, length = m_arrComments.size(); i < length; ++i)
{
if (m_arrComments[i]) delete m_arrComments[i];
m_arrComments[i] = NULL;
}
m_arrComments.clear();
}
virtual void read(const CPath& oFilePath)
@ -434,13 +437,13 @@ namespace OOX
return;
std::wstring sName = oReader.GetName();
if ( _T("w15:commentsEx") == sName && !oReader.IsEmptyNode() )
if ( L"w15:commentsEx" == sName && !oReader.IsEmptyNode() )
{
int nNumberingDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nNumberingDepth ) )
{
sName = oReader.GetName();
if ( _T("w15:commentEx") == sName )
if ( L"w15:commentEx" == sName )
m_arrComments.push_back( new CCommentExt(oReader) );
}
}
@ -476,10 +479,10 @@ namespace OOX
virtual ~CPresenceInfo()
{
}
virtual void fromXML(XmlUtils::CXmlNode& oNode)
virtual void fromXML(XmlUtils::CXmlNode& oNode)
{
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
@ -488,7 +491,7 @@ namespace OOX
}
virtual std::wstring toXML() const
{
std::wstring sResult = _T("");
std::wstring sResult = L"";
return sResult;
}
@ -499,11 +502,10 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w15:providerId"), m_oProviderId )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w15:userId"), m_oUserId )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"w15:providerId", m_oProviderId )
WritingElement_ReadAttributes_Read_else_if( oReader, L"w15:userId", m_oUserId )
WritingElement_ReadAttributes_End( oReader )
}
public:
@ -522,10 +524,10 @@ namespace OOX
virtual ~CPerson()
{
}
virtual void fromXML(XmlUtils::CXmlNode& oNode)
virtual void fromXML(XmlUtils::CXmlNode& oNode)
{
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
@ -536,13 +538,13 @@ namespace OOX
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if ( _T("w15:presenceInfo") == sName )
if ( L"w15:presenceInfo" ==sName )
m_oPresenceInfo = oReader;
}
}
virtual std::wstring toXML() const
virtual std::wstring toXML() const
{
std::wstring sResult = _T("");
std::wstring sResult = L"";
return sResult;
}
@ -553,10 +555,9 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("w15:author"), m_oAuthor )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"w15:author", m_oAuthor )
WritingElement_ReadAttributes_End( oReader )
}
public:
@ -592,13 +593,13 @@ namespace OOX
return;
std::wstring sName = oReader.GetName();
if ( _T("w15:people") == sName && !oReader.IsEmptyNode() )
if ( L"w15:people" == sName && !oReader.IsEmptyNode() )
{
int nNumberingDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nNumberingDepth ) )
{
sName = oReader.GetName();
if ( _T("w15:person") == sName )
if ( L"w15:person" == sName )
m_arrPeoples.push_back( new CPerson(oReader) );
}
}

View File

@ -38,7 +38,7 @@
#include "../../DocxFormat/IFileContainer.h"
#include <map>
#include <unordered_map>
namespace OOX
{
@ -74,7 +74,7 @@ namespace OOX
return m_nRow.IsInit() && m_nCol.IsInit() && m_sAuthor.IsInit();
}
};
class CAuthors : public WritingElementWithChilds<std::wstring>
class CAuthors : public WritingElement
{
public:
WritingElement_AdditionConstructors(CAuthors)
@ -83,43 +83,49 @@ namespace OOX
}
virtual ~CAuthors()
{
ClearItems();
}
virtual void ClearItems()
{
m_mapItems.clear();
}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
}
virtual std::wstring toXML() const
virtual std::wstring toXML() const
{
return _T("");
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
writer.WriteString(L"<authors>");
for ( SpreadsheetElemArray::const_iterator it = m_arrItems.begin(); it != m_arrItems.end(); it++)
for ( std::unordered_map<int, std::wstring>::const_iterator it = m_mapItems.begin(); it != m_mapItems.end(); it++)
{
if ( *it )
{
writer.WriteString(L"<author>");
writer.WriteEncodeXmlString(*(*it));
writer.WriteString(L"</author>");
}
writer.WriteString(L"<author>");
writer.WriteEncodeXmlString(it->second);
writer.WriteString(L"</author>");
}
writer.WriteString(L"</authors>");
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int index = 0;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( _T("author") == sName )
m_arrItems.push_back(new std::wstring(oReader.GetText3()));
if ( L"author" == sName )
{
m_mapItems.insert(std::make_pair(index++, oReader.GetText3()));
}
}
}
@ -132,6 +138,8 @@ namespace OOX
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
}
public:
std::unordered_map<int, std::wstring> m_mapItems;
};
class CComment : public WritingElement
{
@ -148,7 +156,7 @@ namespace OOX
}
virtual std::wstring toXML() const
{
return _T("");
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
@ -190,13 +198,10 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("ref"), m_oRef )
WritingElement_ReadAttributes_Read_if ( oReader, _T("authorId"), m_oAuthorId )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"ref", m_oRef )
WritingElement_ReadAttributes_Read_if ( oReader, L"authorId", m_oAuthorId )
WritingElement_ReadAttributes_End( oReader )
}
public:
nullable<SimpleTypes::CRelationshipId > m_oRef;
@ -219,7 +224,7 @@ namespace OOX
}
virtual std::wstring toXML() const
{
return _T("");
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
@ -247,7 +252,7 @@ namespace OOX
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( _T("comment") == sName )
if ( L"comment" == sName )
m_arrItems.push_back(new CComment(oReader));
}
}
@ -277,8 +282,6 @@ namespace OOX
virtual ~CComments()
{
}
public:
virtual void read(const CPath& oPath)
{
//don't use this. use read(const CPath& oRootPath, const CPath& oFilePath)
@ -299,7 +302,7 @@ namespace OOX
return;
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( _T("comments") == sName )
if ( L"comments" == sName )
{
ReadAttributes( oReader );
@ -310,9 +313,9 @@ namespace OOX
{
sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( _T("authors") == sName )
if ( L"authors" == sName )
m_oAuthors = oReader;
else if ( _T("commentList") == sName )
else if ( L"commentList" == sName )
m_oCommentList = oReader;
}
}
@ -321,12 +324,12 @@ namespace OOX
virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const
{
NSStringUtils::CStringBuilder sXml;
sXml.WriteString(_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">"));
sXml.WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><comments xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">");
if(m_oAuthors.IsInit())
m_oAuthors->toXML(sXml);
if(m_oCommentList.IsInit())
m_oCommentList->toXML(sXml);
sXml.WriteString(_T("</comments>"));
sXml.WriteString(L"</comments>");
std::wstring sPath = oPath.GetPath();
NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData());
@ -375,7 +378,7 @@ namespace OOX
}
virtual std::wstring toXML() const
{
return _T("");
return L"";
}
virtual void toXML(NSStringUtils::CStringBuilder& writer) const
{
@ -403,12 +406,9 @@ namespace OOX
private:
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Читаем атрибуты
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("r:id"), m_oId )
WritingElement_ReadAttributes_End( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, L"r:id", m_oId )
WritingElement_ReadAttributes_End( oReader )
}
public:
nullable<SimpleTypes::CRelationshipId > m_oId;

View File

@ -189,7 +189,7 @@ namespace OOX
}
void PrepareComments(OOX::Spreadsheet::CComments* pComments, OOX::CVmlDrawing* pVmlDrawing)
{
std::list<std::wstring*> & aAuthors = pComments->m_oAuthors->m_arrItems;
std::unordered_map<int, std::wstring> & mapAuthors = pComments->m_oAuthors->m_mapItems;
if(pComments->m_oCommentList.IsInit())
{
@ -212,12 +212,12 @@ namespace OOX
unsigned int nAuthorId = pComment->m_oAuthorId->GetValue();
std::list<std::wstring*>::iterator itA = aAuthors.begin();
for(int a = 0; a < nAuthorId; a++)
itA++;
if(itA != aAuthors.end())
pCommentItem->m_sAuthor = *itA;
std::unordered_map<int, std::wstring>::iterator pFind = mapAuthors.find(nAuthorId);
if (pFind != mapAuthors.end())
{
pCommentItem->m_sAuthor = pFind->second;
}
OOX::Spreadsheet::CSi* pSi = pComment->m_oText.GetPointerEmptyNullable();
if(NULL != pSi)

View File

@ -3882,8 +3882,7 @@ namespace NExtractTools
}
else
{
sTempDir = NSDirectory::GetFolderPath(sFileFrom) + FILE_SEPARATOR_STR + _T("Temp");
NSDirectory::CreateDirectory(sTempDir);
sTempDir = NSDirectory::CreateDirectoryWithUniqueName(NSDirectory::GetFolderPath(sFileTo));
}
if (sTempDir.empty())
{

View File

@ -187,7 +187,7 @@ namespace BinXlsxRW
WriteFilterColumns(oAutofilter.m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
}
if(!oAutofilter.m_oSortState.IsInit())
if(oAutofilter.m_oSortState.IsInit())
{
nCurPos = m_oBcw.WriteItemStart(c_oSer_AutoFilter::SortState);
WriteSortState(oAutofilter.m_oSortState.get());

View File

@ -2535,14 +2535,14 @@ namespace BinXlsxRW {
{
m_pCurVmlDrawing->m_mapComments = &m_pCurWorksheet->m_mapComments;
std::map<std::wstring, unsigned int> mapAuthors;
std::map<std::wstring, unsigned int> mapByAuthors;
OOX::Spreadsheet::CComments* pComments = new OOX::Spreadsheet::CComments();
pComments->m_oCommentList.Init();
std::list<OOX::Spreadsheet::CComment*>& aComments = pComments->m_oCommentList->m_arrItems;
pComments->m_oAuthors.Init();
std::list<std::wstring*>& aAuthors = pComments->m_oAuthors->m_arrItems;
std::unordered_map<int, std::wstring> & mapByIndex = pComments->m_oAuthors->m_mapItems;
for (std::map<std::wstring, OOX::Spreadsheet::CCommentItem*>::const_iterator it = m_pCurWorksheet->m_mapComments.begin(); it != m_pCurWorksheet->m_mapComments.end(); ++it)
{
@ -2559,15 +2559,18 @@ namespace BinXlsxRW {
if(pCommentItem->m_sAuthor.IsInit())
{
const std::wstring& sAuthor = pCommentItem->m_sAuthor.get();
std::map<std::wstring, unsigned int>::const_iterator pair = mapAuthors.find(sAuthor);
std::map<std::wstring, unsigned int>::const_iterator pFind = mapByAuthors.find(sAuthor);
int nAuthorId;
if(mapAuthors.end() != pair)
nAuthorId = (int)pair->second;
if(pFind != mapByAuthors.end())
nAuthorId = pFind->second;
else
{
nAuthorId = (int)mapAuthors.size();
mapAuthors[sAuthor] = nAuthorId;
aAuthors.push_back(new std::wstring(sAuthor));
nAuthorId = (int)mapByAuthors.size();
mapByAuthors.insert(std::make_pair(sAuthor, nAuthorId));
mapByIndex.insert(std::make_pair(nAuthorId, sAuthor));
}
pNewComment->m_oAuthorId.Init();
pNewComment->m_oAuthorId->SetValue(nAuthorId);