Compare commits

..

7 Commits

Author SHA1 Message Date
4954ef2934 refactoring 2017-07-03 10:27:49 +03:00
721e8800f1 refactoring 2017-07-03 10:27:23 +03:00
ef8e5cab6d XlsFormat ... 2017-07-02 17:49:41 +03:00
028e58ad51 XlsFormat ... 2017-07-02 13:18:56 +03:00
424e0e34cc . 2017-07-01 17:56:12 +03:00
d8988cd101 . 2017-07-01 16:33:36 +03:00
440a884c0a . 2017-07-01 14:38:46 +03:00
59 changed files with 784 additions and 377 deletions

View File

@ -92,13 +92,16 @@ public:
bool bResult = pInfo->ReadFromStream(&oUserAtom, pStream);
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
m_oCurrentUser.m_bIsEncrypt = pInfo->m_bEncrypt;
if (bResult == false)
{
delete pInfo;
if (pInfo->m_bEncrypt) return false;
else continue;
if (pInfo->m_bEncrypt)
return false;
else
continue;
}
m_arUsers.push_back(pInfo);

View File

@ -116,7 +116,7 @@ bool CPPTFileReader::ReadPersists()
CFStreamPtr pStream = GetDocumentStream();
if (!pStream) return false;
if (m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_) == false) return false;
return m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_);
}
void CPPTFileReader::ReadDocument()
{

View File

@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
pptFile.put_TempDirectory(tempPath);
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"password");
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"");
if (hRes == S_OK)
{

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of BkHim record in BIFF8
class BkHim: public BiffRecordContinued
{
BIFF_RECORD_DEFINE_TYPE_INFO(BkHim)
@ -48,10 +46,9 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeBkHim;
static const ElementType type = typeBkHim;
_UINT16 cf;
_UINT32 lcb;

View File

@ -52,8 +52,24 @@ BaseObjectPtr SXDBB::clone()
void SXDBB::readFields(CFRecord& record)
{
int skip = record.getDataSize() - record.getRdPtr();
record.skipNunBytes(skip);
unsigned int sz = record.getDataSize() - record.getRdPtr();
//std::list<CFRecordPtr>& recs = continue_records[rt_Continue];
//while (record.getRdPtr() + lcb > record.getDataSize() && !recs.empty())
//{
// record.appendRawData(recs.front());
// recs.pop_front();
//}
if (record.checkFitReadSafe(sz))
{
blob = boost::shared_array<char>(new char[sz]);
memcpy(blob.get(), record.getCurData<char>(), sz);
record.skipNunBytes(sz);
}
}
} // namespace XLS

View File

@ -31,12 +31,12 @@
*/
#pragma once
#include "BiffRecord.h"
#include "BiffRecordContinued.h"
namespace XLS
{
class SXDBB: public BiffRecord
class SXDBB: public BiffRecordContinued
{
BIFF_RECORD_DEFINE_TYPE_INFO(SXDBB)
BASE_OBJECT_DEFINE_CLASS_NAME(SXDBB)
@ -50,6 +50,7 @@ public:
static const ElementType type = typeSXDBB;
boost::shared_array<char> blob;
};
} // namespace XLS

View File

@ -51,6 +51,23 @@ BaseObjectPtr SXDtr::clone()
void SXDtr::readFields(CFRecord& record)
{
record >> yr >> mon >> dom >> hr >> min >> sec;
}
int SXDtr::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"d")
{
std::wstringstream s;
s << yr << L"-" << mon << L"-" << dom << L"T" << hr << L":" << min << L":" << sec;
CP_XML_ATTR(L"v", s.str());
}
}
return 0;
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -49,8 +48,16 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXDtr;
unsigned short yr;
unsigned short mon;
unsigned char dom;
unsigned char hr;
unsigned char min;
unsigned char sec;
};

View File

@ -51,6 +51,7 @@ BaseObjectPtr SXFDBType::clone()
void SXFDBType::readFields(CFRecord& record)
{
record >> wTypeSql;
}
} // namespace XLS

View File

@ -50,7 +50,7 @@ public:
static const ElementType type = typeSXFDBType;
short wTypeSql; //ODBCType enum
};
} // namespace XLS

View File

@ -51,6 +51,7 @@ BaseObjectPtr SXInt::clone()
void SXInt::readFields(CFRecord& record)
{
record >> num;
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -51,7 +50,7 @@ public:
static const ElementType type = typeSXInt;
short num;
};
} // namespace XLS

View File

@ -39,7 +39,6 @@ SXNum::SXNum()
{
}
SXNum::~SXNum()
{
}
@ -51,7 +50,20 @@ BaseObjectPtr SXNum::clone()
void SXNum::readFields(CFRecord& record)
{
record >> num;
}
int SXNum::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"n")
{
CP_XML_ATTR(L"v", num.data.value);
}
}
return 0;
}
} // namespace XLS

View File

@ -32,7 +32,7 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
#include "../Biff_structures/Xnum.h"
namespace XLS
{
@ -49,9 +49,11 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXNum;
Xnum num;
};
} // namespace XLS

View File

@ -51,6 +51,13 @@ BaseObjectPtr SXPair::clone()
void SXPair::readFields(CFRecord& record)
{
unsigned short reserved1, flags;
record >> isxvd >> iCache >> reserved1 >> flags;
fFormula = GETBIT(flags, 0);
fPhysical = GETBIT(flags, 3);
fRelative = GETBIT(flags, 4);
}
} // namespace XLS

View File

@ -51,7 +51,12 @@ public:
static const ElementType type = typeSXPair;
unsigned short isxvd;
short iCache;
bool fFormula;
bool fPhysical;
bool fRelative;
};
} // namespace XLS

View File

@ -51,6 +51,13 @@ BaseObjectPtr SXRng::clone()
void SXRng::readFields(CFRecord& record)
{
unsigned short flags;
record >> flags;
fAutoStart = GETBIT(flags, 0);
fAutoEnd = GETBIT(flags, 1);
iByType = GETBITS(flags, 2, 4);
}
} // namespace XLS

View File

@ -51,7 +51,9 @@ public:
static const ElementType type = typeSXRng;
bool fAutoStart;
bool fAutoEnd;
unsigned char iByType;
};
} // namespace XLS

View File

@ -61,6 +61,17 @@ void SXString::readFields(CFRecord& record)
record >> segment;
}
}
int SXString::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"s")
{
CP_XML_ATTR(L"v", segment.value());
}
}
return 0;
}
} // namespace XLS

View File

@ -49,6 +49,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXString;
unsigned short cch;

View File

@ -51,6 +51,10 @@ BaseObjectPtr SxBool::clone()
void SxBool::readFields(CFRecord& record)
{
unsigned short flags;
record >> flags;
val = (flags != 0);
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -51,7 +50,7 @@ public:
static const ElementType type = typeSxBool;
bool val;
};
} // namespace XLS

View File

@ -51,6 +51,7 @@ BaseObjectPtr SxErr::clone()
void SxErr::readFields(CFRecord& record)
{
record >> wbe;
}
} // namespace XLS

View File

@ -51,7 +51,7 @@ public:
static const ElementType type = typeSxErr;
unsigned short wbe;
};
} // namespace XLS

View File

@ -52,57 +52,7 @@ BaseObjectPtr SxFmla::clone()
void SxFmla::readFields(CFRecord& record)
{
//record >> csxformat >> cchErrorString >> cchNullString >> cchTag >> csxselect;
//_UINT32 flags;
//record >> crwPage >> ccolPage >> flags;
//fAcrossPageLay = GETBIT(flags, 0);
//cWrapPage = GETBITS(flags, 1, 9);
//fEnableWizard = GETBIT(flags, 16);
//fEnableDrilldown = GETBIT(flags, 17);
//fEnableFieldDialog = GETBIT(flags, 18);
//fPreserveFormatting = GETBIT(flags, 19);
//fMergeLabels = GETBIT(flags, 20);
//fDisplayErrorString = GETBIT(flags, 21);
//fDisplayNullString = GETBIT(flags, 22);
//fSubtotalHiddenPageItems = GETBIT(flags, 23);
//record >> cchPageFieldStyle >> cchTableStyle >> cchVacateStyle;
//if (cchErrorString > 0 && cchErrorString != 0xffff)
//{
// stError.setSize(cchErrorString);
// record >> stError;
//}
//if (cchNullString > 0 && cchNullString != 0xffff)
//{
// stDisplayNull.setSize(cchNullString);
// record >> stDisplayNull;
//}
//if (cchTag > 0 && cchTag != 0xffff)
//{
// stTag.setSize(cchTag);
// record >> stTag;
//}
//if (cchPageFieldStyle > 0 && cchPageFieldStyle != 0xffff)
//{
// stPageFieldStyle.setSize(cchPageFieldStyle);
// record >> stPageFieldStyle;
//}
//if (cchTableStyle > 0 && cchTableStyle != 0xffff)
//{
// stTableStyle.setSize(cchTableStyle);
// record >> cchTableStyle;
//}
//if (cchVacateStyle > 0 && cchVacateStyle != 0xffff)
//{
// stVacateStyle.setSize(cchVacateStyle);
// record >> cchVacateStyle;
//}
//int skip = record.getDataSize() - record.getRdPtr();
//record.skipNunBytes(skip);
fmla.load(record);
}
} // namespace XLS

View File

@ -32,8 +32,9 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/BiffString.h"
//#include "../Biff_structures/CellRangeRef.h"
#include "../Biff_structures/PivotParsedFormula.h"
namespace XLS
{
@ -52,36 +53,7 @@ public:
static const ElementType type = typeSxFmla;
//unsigned short csxformat;
//unsigned short cchErrorString;
//unsigned short cchNullString;
//unsigned short cchTag;
//unsigned short csxselect;
//DRw crwPage;
//ColU ccolPage;
//bool fAcrossPageLay;
//unsigned char cWrapPage;
//bool fEnableWizard;
//bool fEnableDrilldown;
//bool fEnableFieldDialog;
//bool fPreserveFormatting;
//bool fMergeLabels;
//bool fDisplayErrorString;
//bool fDisplayNullString;
//bool fSubtotalHiddenPageItems;
//unsigned short cchPageFieldStyle;
//unsigned short cchTableStyle;
//unsigned short cchVacateStyle;
//XLUnicodeStringNoCch stError;
//XLUnicodeStringNoCch stDisplayNull;
//XLUnicodeStringNoCch stTag;
//XLUnicodeStringNoCch stPageFieldStyle;
//XLUnicodeStringNoCch stTableStyle;
//XLUnicodeStringNoCch stVacateStyle;
PivotParsedFormula fmla;
};
} // namespace XLS

View File

@ -51,6 +51,10 @@ BaseObjectPtr SxName::clone()
void SxName::readFields(CFRecord& record)
{
unsigned short flags;
record >> flags >> ifdb >> ifn >> csxpair;
fErrName = GETBIT(flags, 0);
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -51,7 +50,10 @@ public:
static const ElementType type = typeSxName;
bool fErrName;
short ifdb;
short ifn;
unsigned short csxpair;
};
} // namespace XLS

View File

@ -39,7 +39,6 @@ SxNil::SxNil()
{
}
SxNil::~SxNil()
{
}
@ -53,5 +52,14 @@ void SxNil::readFields(CFRecord& record)
{
}
int SxNil::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"m");
}
return 0;
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -49,9 +48,9 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSxNil;
};
} // namespace XLS

View File

@ -45,8 +45,6 @@ public:
BiffStructurePtr clone();
void load(CFRecord& record);
std::vector<CellRangeRef> cell_ranges;

View File

@ -0,0 +1,58 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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 "PivotParsedFormula.h"
#include <Binary/CFRecord.h>
namespace XLS
{
PivotParsedFormula::PivotParsedFormula()
: ParsedFormula(CellRef())
{
}
BiffStructurePtr PivotParsedFormula::clone()
{
return BiffStructurePtr(new PivotParsedFormula(*this));
}
void PivotParsedFormula::load(CFRecord& record)
{
unsigned short cce;
record >> cce >> cSxName;
rgce.load(record, cce);
}
} // namespace XLS

View File

@ -0,0 +1,52 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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 "ParsedFormula.h"
namespace XLS
{
class PivotParsedFormula: public ParsedFormula
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(PivotParsedFormula)
public:
PivotParsedFormula();
BiffStructurePtr clone();
void load(CFRecord& record);
unsigned short cSxName;
};
} // namespace XLS

View File

@ -43,18 +43,15 @@ DREF::DREF()
{
}
DREF::~DREF()
{
}
BaseObjectPtr DREF::clone()
{
return BaseObjectPtr(new DREF(*this));
}
// DREF = DConName / DConBin / DConRef
const bool DREF::loadContent(BinProcessor& proc)
{
@ -68,8 +65,42 @@ const bool DREF::loadContent(BinProcessor& proc)
}
}
}
m_DCon = elements_.back();
elements_.pop_back();
return true;
}
int DREF::serialize(std::wostream & strm)
{
if (!m_DCon)return 0;
DConName* name = dynamic_cast<DConName*>(m_DCon.get());
DConBin* bin = dynamic_cast<DConBin*>(m_DCon.get());
DConRef* ref = dynamic_cast<DConRef*>(m_DCon.get());
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"cacheSource")
{
if (name)
{
CP_XML_ATTR(L"type", L"worksheet");
CP_XML_NODE(L"worksheetSource")
{
CP_XML_ATTR(L"name", name->stName.value());
}
}
else if(bin)
{
}
else if(ref)
{
}
}
}
return 0;
}
} // namespace XLS

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of DREF union of records
class DREF: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(DREF)
@ -49,7 +47,11 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeDREF;
int serialize(std::wostream & stream);
static const ElementType type = typeDREF;
BaseObjectPtr m_DCon;
};
} // namespace XLS

View File

@ -47,6 +47,10 @@ class Parenthesis_FDB: public ABNFParenthesis
{
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_FDB)
public:
Parenthesis_FDB(int count = 0)
{
m_count = count;
}
BaseObjectPtr clone()
{
return BaseObjectPtr(new Parenthesis_FDB(*this));
@ -54,7 +58,9 @@ public:
const bool loadContent(BinProcessor& proc)
{
int count = proc.repeated<SXOPER>(0, 0);
if (m_count < 1) return false;
int count = proc.repeated<SXOPER>(0, m_count);
if (!proc.optional<SXRANGE>())
{
@ -62,6 +68,8 @@ public:
}
return true;
};
private:
int m_count;
};
FDB::FDB()
@ -91,6 +99,8 @@ const bool FDB::loadContent(BinProcessor& proc)
}
m_SXFDB = elements_.back();
elements_.pop_back();
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
if(proc.mandatory<SXFDBType>())
{
@ -103,31 +113,36 @@ const bool FDB::loadContent(BinProcessor& proc)
m_SXFMLA = elements_.back();
elements_.pop_back();
}
else if(proc.optional<Parenthesis_FDB>())
else
{
int count = elements_.size();
while(count > 0)
Parenthesis_FDB parenthesis_FDB(fdb->csxoper);
if (proc.optional(parenthesis_FDB))
{
SXOPER * oper = dynamic_cast<SXOPER*> (elements_.front().get());
if (oper)
int count = elements_.size();
while(count > 0)
{
m_arGRPSXOPER.push_back(elements_.front());
}
else
{
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
if (range)
m_SXRANGE = elements_.front();
SXOPER * oper = dynamic_cast<SXOPER*> (elements_.front().get());
if (oper)
{
m_arGRPSXOPER.push_back(elements_.front());
}
else
{
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
if (isOper)
m_arSxIsxoper.push_back(elements_.front());
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
if (range)
m_SXRANGE = elements_.front();
else
{
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
if (isOper)
m_arSxIsxoper.push_back(elements_.front());
}
}
elements_.pop_front();
count--;
}
elements_.pop_front();
count--;
}
}
@ -140,5 +155,98 @@ const bool FDB::loadContent(BinProcessor& proc)
return true;
}
int FDB::serialize(std::wostream & strm)
{
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
SXFDBType* fdb_type = dynamic_cast<SXFDBType*>(m_SXFDBType.get());
if (!fdb || !fdb_type) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"cacheField")
{
CP_XML_ATTR(L"name", fdb->stFieldName.value());
CP_XML_ATTR(L"numFmtId", fdb_type->wTypeSql);
switch(fdb_type->wTypeSql)//format code
{
case 0x0000:
case 0x0001:
case 0x0003:
case 0x0004:
case 0x0005:
case 0x0006:
case 0x0007:
case 0x0008:
case 0x000B:
case 0x000C:
case 0xFFF9:
case 0xFFFE:
break;
}
if(m_SXFMLA)
{
//{formula
}
//caption, databaseFields, ..
if (m_arSRCSXOPER.empty() == false)
{
CP_XML_NODE(L"sharedItems")
{
//CP_XML_ATTR(L"containsSemiMixedTypes", 0);
CP_XML_ATTR(L"containsNonDate", fdb->fNonDates);
CP_XML_ATTR(L"containsDate", fdb->fDateInField);
CP_XML_ATTR(L"containsNumber", fdb->fNumField);
CP_XML_ATTR(L"containsBlank", fdb->fTextEtcField);
//CP_XML_ATTR(L"containsString", 0);
if (fdb->fnumMinMaxValid)
{
if (fdb->fDateInField)
{
CP_XML_ATTR(L"minDate", 0); // "2007-11-18T00:00:00"
CP_XML_ATTR(L"maxDate", 0); // "2007-12-25T00:00:00"
}
else if (fdb->fNumField)
{
CP_XML_ATTR(L"minValue", 0);
CP_XML_ATTR(L"maxValue", 0);
}
}
CP_XML_ATTR(L"count", fdb->catm);
for (size_t i = 0; i < m_arSRCSXOPER.size(); i++)
{
m_arSRCSXOPER[i]->serialize(CP_XML_STREAM());
}
}
}
if (m_arGRPSXOPER.empty() == false)
{
CP_XML_NODE(L"fieldGroup")
{
if (fdb->ifdbParent > 0)
CP_XML_ATTR(L"par", fdb->ifdbParent);
if (m_SXRANGE)
m_SXRANGE->serialize(CP_XML_STREAM());
CP_XML_NODE(L"groupItems")
{
CP_XML_ATTR(L"count", m_arGRPSXOPER.size());
for (size_t i = 0; i < m_arGRPSXOPER.size(); i++)
{
m_arGRPSXOPER[i]->serialize(CP_XML_STREAM());
}
}
}
}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,6 +47,8 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typeFDB;
BaseObjectPtr m_SXFDB;

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of GLOBALS union of records
class GLOBALS: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(GLOBALS)
@ -49,7 +47,7 @@ public:
virtual const bool loadContent (BinProcessor& proc);
static const ElementType type = typeGLOBALS;
static const ElementType type = typeGLOBALS;
int serialize(std::wostream & stream);

View File

@ -47,7 +47,6 @@ PIVOTCACHE::PIVOTCACHE()
{
}
PIVOTCACHE::~PIVOTCACHE()
{
}

View File

@ -31,10 +31,14 @@
*/
#include "PIVOTCACHEDEFINITION.h"
#include <Logic/Biff_records/SXStreamID.h>
#include <Logic/Biff_records/SXVS.h>
#include <Logic/Biff_unions/SXSRC.h>
#include <Logic/Biff_unions/SXADDLCACHE.h>
#include "PIVOTCACHE.h"
#include "SXSRC.h"
#include "SXADDLCACHE.h"
#include "../Biff_records/SXStreamID.h"
#include "../Biff_records/SXVS.h"
#include "../Biff_records/SXDB.h"
#include "../Biff_records/SXDBEx.h"
namespace XLS
{
@ -59,6 +63,8 @@ BaseObjectPtr PIVOTCACHEDEFINITION::clone()
// PIVOTCACHEDEFINITION = SXStreamID SXVS [SXSRC] [SXADDLCACHE]
const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
{
global_info_ = proc.getGlobalWorkbookInfo();
if(!proc.mandatory<SXStreamID>())
{
return false;
@ -83,6 +89,93 @@ const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
}
return true;
}
int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
{
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
if (!streamId) return 0;
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
if (pFind == global_info_->mapPivotCache.end()) return 0;
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
if (!pivot_cache) return 0;
SXDB* db = dynamic_cast<SXDB*>(pivot_cache->m_SXDB.get());
SXDBEx* db_ex = dynamic_cast<SXDBEx*>(pivot_cache->m_SXDBEx.get());
if (!db || !db_ex)return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheDefinition")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
if (pivot_cache->m_arDBB.empty() == false)
{
CP_XML_ATTR(L"r:id", L"rId1" );
}
CP_XML_ATTR(L"recordCount", db->crdbUsed);
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
//createdVersion="1"
//refreshedVersion="2"
//upgradeOnRefresh="1">
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
if (src)
src->serialize(CP_XML_STREAM());
if (pivot_cache->m_arFDB.empty() == false)
{
CP_XML_NODE(L"cacheFields")
{
CP_XML_ATTR(L"count", pivot_cache->m_arFDB.size());
for (size_t i = 0; i < pivot_cache->m_arFDB.size(); i++)
{
pivot_cache->m_arFDB[i]->serialize(CP_XML_STREAM());
}
}
}
}
}
return 0;
}
int PIVOTCACHEDEFINITION::serialize_records(std::wostream & strm)
{
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
if (!streamId) return 0;
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
if (pFind == global_info_->mapPivotCache.end()) return 0;
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
if (!pivot_cache) return 0;
if (pivot_cache->m_arDBB.empty()) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheRecords")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"count", pivot_cache->m_arDBB.size());
for (size_t i = 0; i < pivot_cache->m_arDBB.size(); i++)
{
pivot_cache->m_arDBB[i]->serialize(CP_XML_STREAM());
}
}
}
return 0;
}
} // namespace XLS

View File

@ -48,6 +48,9 @@ public:
BaseObjectPtr clone();
virtual const bool loadContent(BinProcessor& proc);
int serialize_definitions(std::wostream & stream);
int serialize_records(std::wostream & stream);
static const ElementType type = typePIVOTCACHEDEFINITION;
@ -55,6 +58,8 @@ public:
BaseObjectPtr m_SXVS;
BaseObjectPtr m_SXSRC;
BaseObjectPtr m_SXADDLCACHE;
GlobalWorkbookInfoPtr global_info_;
};
} // namespace XLS

View File

@ -45,7 +45,6 @@ SXOPER::SXOPER()
{
}
SXOPER::~SXOPER()
{
}
@ -79,8 +78,17 @@ const bool SXOPER::loadContent(BinProcessor& proc)
else
return false;
m_element = elements_.back();
elements_.pop_back();
return true;
}
int SXOPER::serialize(std::wostream & strm)
{
if (!m_element) return 0;
m_element->serialize(strm);
return 0;
}
} // namespace XLS

View File

@ -47,9 +47,11 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeSXOPER;
int serialize(std::wostream & strm);
BaseObjectPtr m_SXOPER;
static const ElementType type = typeSXOPER;
BaseObjectPtr m_element;
};
} // namespace XLS

View File

@ -92,10 +92,69 @@ const bool SXRANGE::loadContent(BinProcessor& proc)
if(proc.optional<Parenthesis_SXRANGE>())
{
while(elements_.empty() == false)
{
SXNum* num = dynamic_cast<SXNum*>(elements_.front().get());
if (num)
{
m_arSXNum.push_back(elements_.front());
}
else
{
SXDtr* dtr = dynamic_cast<SXDtr*>(elements_.front().get());
if (dtr)
{
m_arSXDtr.push_back(elements_.front());
}
}
elements_.pop_front();
}
}
return true;
}
int SXRANGE::serialize(std::wostream & strm)
{
SXRng* rng = dynamic_cast<SXRng*>(m_SXRng.get());
if (!rng) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"rangePr")
{
switch(rng->iByType)
{
case 0: CP_XML_ATTR(L"groupBy", L"range"); break;
case 1: CP_XML_ATTR(L"groupBy", L"seconds"); break;
case 2: CP_XML_ATTR(L"groupBy", L"minutes"); break;
case 3: CP_XML_ATTR(L"groupBy", L"hours"); break;
case 4: CP_XML_ATTR(L"groupBy", L"days"); break;
case 5: CP_XML_ATTR(L"groupBy", L"months"); break;
case 6: CP_XML_ATTR(L"groupBy", L"quarters"); break;
case 7: CP_XML_ATTR(L"groupBy", L"years"); break;
}
if (m_arSXDtr.size() == 2)
{
SXDtr* startDate = dynamic_cast<SXDtr*>(m_arSXDtr[0].get());
SXDtr* endDate = dynamic_cast<SXDtr*>(m_arSXDtr[1].get());
std::wstringstream s_start, s_end;
s_start << startDate->yr << L"-" << startDate->mon << L"-" << startDate->dom << L"T" << startDate->hr << L":" << startDate->min << L":" << startDate->sec;
s_end << endDate->yr << L"-" << endDate->mon << L"-" << endDate->dom << L"T" << endDate->hr << L":" << endDate->min << L":" << endDate->sec;
CP_XML_ATTR(L"startDate", s_start.str());
CP_XML_ATTR(L"endDate", s_end.str());
}
if (m_arSXNum.size() == 3)
{
}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,9 +47,13 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeSXRANGE;
int serialize(std::wostream & strm);
BaseObjectPtr m_SXRng;
static const ElementType type = typeSXRANGE;
BaseObjectPtr m_SXRng;
std::vector<BaseObjectPtr> m_arSXNum;
std::vector<BaseObjectPtr> m_arSXDtr;
};
} // namespace XLS

View File

@ -73,5 +73,13 @@ const bool SXSRC::loadContent(BinProcessor& proc)
return true;
}
int SXSRC::serialize(std::wostream & stream)
{
if (m_source)
m_source->serialize(stream);
return 0;
}
} // namespace XLS

View File

@ -47,7 +47,9 @@ public:
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeSXSRC;
int serialize(std::wostream & stream);
static const ElementType type = typeSXSRC;
BaseObjectPtr m_source;
};

View File

@ -1922,16 +1922,10 @@ void XlsConverter::convert(XLS::PIVOTCACHEDEFINITION * pivot_cached)
{
if (pivot_cached == NULL) return;
xlsx_context->start_pivot_cache();
pivot_cached->serialize(xlsx_context->current_pivot_cache().definitions());
//if (pivot_cached->is_records())//??
{
xlsx_context->current_pivot_cache().isRecordsPresent = true;
//pivot_cached->serialize_records(xlsx_context->current_pivot_cache().records());
}
std::wstringstream strmD, strmR;
xlsx_context->end_pivot_cache();
pivot_cached->serialize_definitions(strmD);
pivot_cached->serialize_records(strmR);
xlsx_context->get_pivots_context().add_cache(strmD.str(), strmR.str());
}

View File

@ -84,17 +84,7 @@ xlsx_xml_worksheet & xlsx_conversion_context::current_sheet()
throw std::runtime_error("internal error");
}
}
xlsx_pivot_cache_context & xlsx_conversion_context::current_pivot_cache()
{
if (!pivot_caches_.empty())
{
return *pivot_caches_.back().get();
}
else
{
throw std::runtime_error("internal error");
}
}
oox_chart_context & xlsx_conversion_context::current_chart()
{
if (!charts_.empty())
@ -133,15 +123,6 @@ void xlsx_conversion_context::end_chart()
{
}
void xlsx_conversion_context::start_pivot_cache()
{
pivot_caches_.push_back(xlsx_pivot_cache_context::create());
}
void xlsx_conversion_context::end_pivot_cache()
{
}
void xlsx_conversion_context::end_table()
{
get_table_context().serialize_hyperlinks(current_sheet().hyperlinks());
@ -246,6 +227,7 @@ void xlsx_conversion_context::end_document()
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"xmlns:mc", L"http://schemas.openxmlformats.org/markup-compatibility/2006");
CP_XML_NODE(L"bookViews")
{
@ -271,11 +253,12 @@ void xlsx_conversion_context::end_document()
CP_XML_STREAM() << str_;
}
}
if (!pivot_caches_.empty())
int pivot_cache_count = xlsx_pivots_context_.get_cache_count();
if (pivot_cache_count > 0)
{
CP_XML_NODE(L"pivotCaches")
{
for (size_t i = 0; i < pivot_caches_.size(); i++)
for (int i = 0; i < pivot_cache_count; i++)
{
std::wstring rId = L"pcId" + std::to_wstring(i+1);
static const std::wstring sType = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition";
@ -289,14 +272,10 @@ void xlsx_conversion_context::end_document()
CP_XML_ATTR(L"r:id", rId);
}
pivot_caches_[i]->dump_rels(content->get_rels());
pivot_caches_[i]->write_to(content->definitions());
xlsx_pivots_context_.dump_rels(i, content->get_rels());
xlsx_pivots_context_.write_definitions_to(i, content->definitions());
xlsx_pivots_context_.write_records_to(i, content->records());
if (pivot_caches_[i]->isRecordsPresent)
{
pivot_caches_[i]->write_records_to(content->records());
}
output_document_->get_xl_files().add_pivot_cache(content);
}
}

View File

@ -41,7 +41,7 @@
#include "xlsx_drawing_context.h"
#include "xlsx_chart_context.h"
#include "xlsx_comments_context.h"
#include "xlsx_pivot_cache_context.h"
#include "xlsx_pivots_context.h"
#include "xlsx_output_xml.h"
@ -71,9 +71,6 @@ public:
void start_chart();
void end_chart();
void start_pivot_cache();
void end_pivot_cache();
std::wostream & shared_strings() { return xlsx_shared_strings_; }
std::wostream & defined_names() { return xlsx_defined_names_; }
std::wostream & workbook_views() { return xlsx_workbook_views_; }
@ -84,8 +81,8 @@ public:
xlsx_xml_worksheet & current_sheet();
oox_chart_context & current_chart();
xlsx_pivot_cache_context & current_pivot_cache();
xlsx_pivots_context & get_pivots_context() {return xlsx_pivots_context_;}
xlsx_drawing_context & get_drawing_context();
xlsx_drawing_context_handle & get_drawing_context_handle();
xlsx_comments_context & get_comments_context();
@ -102,7 +99,6 @@ private:
std::vector<xlsx_xml_worksheet_ptr> sheets_;
std::vector<oox_chart_context_ptr> charts_;
std::vector<xlsx_pivot_cache_context_ptr> pivot_caches_;
//std::wstringstream defaultOutput_;
//std::pair<float,float> maxDigitSize_;
@ -111,6 +107,7 @@ private:
size_t next_vml_file_id_; //используется для footer/header & comments
xlsx_pivots_context xlsx_pivots_context_;
xlsx_table_context xlsx_table_context_;
xlsx_text_context xlsx_text_context_;

View File

@ -1,155 +0,0 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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 "xlsx_pivot_cache_context.h"
#include "oox_rels.h"
#include "mediaitems_utils.h"
#include <boost/make_shared.hpp>
#include <simple_xml_writer.h>
namespace oox {
class xlsx_pivot_cache_context::Impl
{
// struct rel_
// {
// rel_(bool is_internal, std::wstring const & rid, std::wstring const & target, external_items::Type type) :
// is_internal_(is_internal),
// rid_(rid),
//target_(target),
// type_(type)
// {}
// bool is_internal_;
// std::wstring rid_;
// std::wstring target_;
// external_items::Type type_;
// };
public:
Impl() {}
std::wstringstream definitionsData_;
std::wstringstream recordsData_;
//rels rels_;
};
xlsx_pivot_cache_context_ptr xlsx_pivot_cache_context::create()
{
return boost::make_shared<xlsx_pivot_cache_context>();
}
int countPivotCaches = 0;
xlsx_pivot_cache_context::xlsx_pivot_cache_context() : impl_(new xlsx_pivot_cache_context::Impl()), isRecordsPresent(false)
{
index = ++countPivotCaches;
}
std::wostream & xlsx_pivot_cache_context::definitions()
{
return impl_->definitionsData_;
}
std::wostream & xlsx_pivot_cache_context::records()
{
return impl_->recordsData_;
}
//void xlsx_pivot_cache_context::add_rels(
// bool isInternal,
// std::wstring const & rid,
// std::wstring const & target,
// external_items::Type type)
//{
// impl_->add_rels(isInternal, rid, target, type);
//}
void xlsx_pivot_cache_context::dump_rels(rels & Rels)
{
if (isRecordsPresent)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
L"pivotCacheRecords" + std::to_wstring(index) + L".xml", L""));
}
}
void xlsx_pivot_cache_context::write_to(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheDefinition")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
if (isRecordsPresent)
{
CP_XML_ATTR(L"r:id", L"rId1" );
}
CP_XML_ATTR(L"recordCount", 0);
//refreshedBy="Debra S Dalgleish"
//refreshedDate="39449.496381365738"
//createdVersion="1"
//refreshedVersion="2"
//recordCount="11"
//upgradeOnRefresh="1">
CP_XML_STREAM() << impl_->definitionsData_.str();
}
}
}
void xlsx_pivot_cache_context::write_records_to(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotCacheRecords")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR(L"count", 0);
CP_XML_STREAM() << impl_->recordsData_.str();
}
}
}
xlsx_pivot_cache_context::~xlsx_pivot_cache_context()
{
}
}

View File

@ -0,0 +1,95 @@
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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 "xlsx_pivots_context.h"
#include <boost/make_shared.hpp>
#include <simple_xml_writer.h>
namespace oox {
class xlsx_pivots_context::Impl
{
public:
struct _pivot_cache
{
std::wstring definitionsData_;
std::wstring recordsData_;
};
Impl() {}
std::vector<_pivot_cache> caches_;
};
xlsx_pivots_context::xlsx_pivots_context() : impl_(new xlsx_pivots_context::Impl())
{
}
void xlsx_pivots_context::add_cache(std::wstring definitions, std::wstring records)
{
Impl::_pivot_cache c = {definitions, records};
impl_->caches_.push_back(c);
}
int xlsx_pivots_context::get_cache_count()
{
return (int)impl_->caches_.size();
}
void xlsx_pivots_context::dump_rels(int index, rels & Rels)
{
if (!impl_->caches_[index].recordsData_.empty())
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
L"pivotCacheRecords" + std::to_wstring(index) + L".xml", L""));
}
}
void xlsx_pivots_context::write_definitions_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].definitionsData_;
}
void xlsx_pivots_context::write_records_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].recordsData_;
}
xlsx_pivots_context::~xlsx_pivots_context()
{
}
}

View File

@ -37,28 +37,19 @@ namespace oox {
class xlsx_pivot_cache_context;
typedef _CP_PTR(xlsx_pivot_cache_context) xlsx_pivot_cache_context_ptr;
class xlsx_pivot_cache_context
class xlsx_pivots_context
{
public:
xlsx_pivot_cache_context();
~xlsx_pivot_cache_context();
xlsx_pivots_context();
~xlsx_pivots_context();
std::wostream & definitions();
std::wostream & records();
void add_cache(std::wstring definitions, std::wstring records);
int get_cache_count();
void write_to(std::wostream & strm);
void write_records_to(std::wostream & strm);
void write_definitions_to (int index, std::wostream & strm);
void write_records_to (int index, std::wostream & strm);
void dump_rels(rels & Rels);
static xlsx_pivot_cache_context_ptr create();
//void add_rels( bool isInternal,
// std::wstring const & rid,
// std::wstring const & target,
// external_items::Type type);
bool isRecordsPresent;
int index;
void dump_rels(int index, rels & Rels);
private:
class Impl;
_CP_PTR(Impl) impl_;

View File

@ -613,6 +613,7 @@ SOURCES += \
../XlsFormat/Logic/Biff_structures/DConnStringSequence.cpp \
../XlsFormat/Logic/Biff_structures/TxtWf.cpp \
../XlsFormat/Logic/Biff_structures/Xnum.cpp \
../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp \
../XlsFormat/Logic/Biff_structures/ODRAW/MSOCR.cpp \
../XlsFormat/Logic/Biff_structures/ODRAW/MSOSHADECOLOR.cpp \
../XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtBlip.cpp \
@ -839,7 +840,7 @@ SOURCES += \
../XlsXlsxConverter/xlsx_tablecontext.cpp \
../XlsXlsxConverter/xlsx_textcontext.cpp \
../XlsXlsxConverter/xlsx_chart_context.cpp \
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
../XlsXlsxConverter/xlsx_pivots_context.cpp \
../XlsXlsxConverter/xlsx_comments.cpp \
../XlsXlsxConverter/xlsx_comments_context.cpp \
@ -1597,7 +1598,7 @@ HEADERS += \
../XlsXlsxConverter/xlsx_conversion_context.h \
../XlsXlsxConverter/xlsx_drawing_context.h \
../XlsXlsxConverter/xlsx_drawings.h \
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
../XlsXlsxConverter/xlsx_pivots_context.cpp \
../XlsXlsxConverter/xlsx_hyperlinks.h \
../XlsXlsxConverter/xlsx_output_xml.h \
../XlsXlsxConverter/xlsx_package.h \

View File

@ -618,6 +618,7 @@
#include "../XlsFormat/Logic/Biff_structures/SharedProperty.cpp"
#include "../XlsFormat/Logic/Biff_structures/AFDOperBoolErr.cpp"
#include "../XlsFormat/Logic/Biff_structures/AFDOperXNum.cpp"
#include "../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp"
#include "../XlsFormat/Logic/Biff_unions/AI.cpp"
#include "../XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp"

View File

@ -4237,6 +4237,14 @@
RelativePath="..\XlsFormat\Logic\Biff_structures\PictFmlaKey.h"
>
</File>
<File
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.cpp"
>
</File>
<File
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.h"
>
</File>
<File
RelativePath="..\XlsFormat\Logic\Biff_structures\PropertyBag.cpp"
>

View File

@ -417,11 +417,11 @@
>
</File>
<File
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.cpp"
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.cpp"
>
</File>
<File
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.h"
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.h"
>
</File>
<File

View File

@ -0,0 +1,38 @@
/*
* (c) Copyright Ascensio System SIA 2010-2016
*
* 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 Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* 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
*
*/
#ifndef _BUILDER_COMMON_H
#define _BUILDER_COMMON_H
#include "./../common/base_export.h"
#endif // _BUILDER_COMMON_H

View File

@ -32,7 +32,7 @@
#ifndef DOCBUILDER_H
#define DOCBUILDER_H
#include "../common/base_export.h"
#include "./common.h"
namespace NSDoctRenderer
{