mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-25 11:22:57 +08:00
Compare commits
58 Commits
core-win-3
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| f624f731de | |||
| c94768902b | |||
| f575947c03 | |||
| 16bdbafa75 | |||
| 089871d3ae | |||
| 765677d952 | |||
| 6afc38c899 | |||
| a43639587f | |||
| 46d022388d | |||
| 31363e8f83 | |||
| e1286e4b73 | |||
| 0366bcb341 | |||
| 452f717e0e | |||
| ab3add9577 | |||
| 54939bca61 | |||
| 7ccde9c777 | |||
| 6bdfa26c7e | |||
| a5bae64959 | |||
| 4d04a0d649 | |||
| fb7af5b902 | |||
| 77172fb39c | |||
| 78ecdc676c | |||
| bbccdf009b | |||
| 4b26066377 | |||
| 8742163d51 | |||
| 212753f831 | |||
| 903236d890 | |||
| 15bd732b22 | |||
| 3e86bf7644 | |||
| d6cd7c30f5 | |||
| 89b384abfe | |||
| f54baf3aa8 | |||
| b2184f7167 | |||
| 3a10eabfe9 | |||
| f9e80f3602 | |||
| 80b1e5e886 | |||
| d1a7800f36 | |||
| e223ffd0db | |||
| b140f4b521 | |||
| 2d570818be | |||
| 1462f08825 | |||
| 92fb4ac40b | |||
| 2bf55b7c8b | |||
| cf2159cd54 | |||
| decfeec7a1 | |||
| 50f47caea9 | |||
| 89cd81ecfd | |||
| 8df6286e80 | |||
| e947c91a7b | |||
| ef53ac4c63 | |||
| f50dd716ad | |||
| 54d0260ea2 | |||
| 2577365e08 | |||
| 792a722063 | |||
| 00df026108 | |||
| 56a4e80c83 | |||
| 6f93eeae69 | |||
| be45d169d7 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -45,3 +45,6 @@ OfficeUtils/win32/OfficeUtilsLib/OfficeUtilsLib/ReadMe.txt
|
||||
*.tlb
|
||||
*.idb
|
||||
**/.hg
|
||||
*.zip
|
||||
*.tar.gz
|
||||
**/*.build/
|
||||
|
||||
@ -483,26 +483,27 @@ namespace DocFileFormat
|
||||
delete storageOut;
|
||||
return false;
|
||||
}
|
||||
DecryptStream( 0, "/", storageIn, storageOut, Decryptor);
|
||||
|
||||
std::list<std::string> listStream = storageIn->entries();
|
||||
//std::list<std::string> listStream = storageIn->entries();
|
||||
|
||||
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
{
|
||||
if (storageIn->isDirectory(*it))
|
||||
{
|
||||
std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
|
||||
|
||||
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
{
|
||||
DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
}
|
||||
//for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
//{
|
||||
// if (storageIn->isDirectory(*it))
|
||||
// {
|
||||
// std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
|
||||
//
|
||||
// for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
// {
|
||||
// DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
// }
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
storageOut->close();
|
||||
delete storageOut;
|
||||
@ -525,34 +526,28 @@ namespace DocFileFormat
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool WordDocument::CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
void WordDocument::DecryptStream( int level, std::string path, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
|
||||
stream->seek(0);
|
||||
int sz_stream = stream->size();
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
|
||||
if (!streamNew) return false;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[sz_stream];
|
||||
stream->read(data_stream, sz_stream);
|
||||
|
||||
streamNew->write(data_stream, sz_stream);
|
||||
|
||||
RELEASEARRAYOBJECTS(data_stream);
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
|
||||
return true;
|
||||
std::list<std::string> entries;
|
||||
entries = storageIn->entries( path );
|
||||
|
||||
std::list<std::string>::iterator it;
|
||||
for( it = entries.begin(); it != entries.end(); ++it )
|
||||
{
|
||||
std::string name = *it;
|
||||
std::string fullname = path + name;
|
||||
|
||||
if( storageIn->isDirectory( fullname ) )
|
||||
{
|
||||
DecryptStream( level + 1, fullname + "/", storageIn, storageOut, Decryptor );
|
||||
}
|
||||
else
|
||||
{
|
||||
DecryptStream(fullname, storageIn, storageOut, Decryptor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool WordDocument::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
bool WordDocument::DecryptStream(std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
@ -567,9 +562,9 @@ namespace DocFileFormat
|
||||
stream->read(data_stream, size_stream);
|
||||
|
||||
unsigned char* data_store = NULL;
|
||||
int size_data_store = 0;
|
||||
int size_data_store = 0;
|
||||
|
||||
if ("WordDocument" == streamName)
|
||||
if ( std::wstring::npos != streamName.find("WordDocument") )
|
||||
{
|
||||
size_data_store = 68;
|
||||
data_store = new unsigned char[size_data_store];
|
||||
|
||||
@ -102,9 +102,10 @@ namespace DocFileFormat
|
||||
|
||||
private:
|
||||
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
|
||||
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
bool CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
|
||||
|
||||
bool DecryptStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
|
||||
void DecryptStream (int level, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut, CRYPT::Decryptor* Decryptor);
|
||||
|
||||
inline StructuredStorageReader* GetStorage() const
|
||||
{
|
||||
return m_pStorage;
|
||||
|
||||
@ -54,7 +54,22 @@ namespace Writers
|
||||
NSFile::CFileBinary oFile;
|
||||
oFile.CreateFileW(filePath.GetPath());
|
||||
oFile.WriteStringUTF8( std::wstring(_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")));
|
||||
oFile.WriteStringUTF8( std::wstring(_T("<w:document xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" mc:Ignorable=\"w14 wp14\">")));
|
||||
oFile.WriteStringUTF8( std::wstring(_T("<w:document \
|
||||
xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \
|
||||
xmlns:v=\"urn:schemas-microsoft-com:vml\" \
|
||||
xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \
|
||||
xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \
|
||||
xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \
|
||||
xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" \
|
||||
xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" \
|
||||
xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \
|
||||
xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \
|
||||
xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \
|
||||
mc:Ignorable=\"w14 wp14\">")));
|
||||
|
||||
oFile.WriteStringUTF8(m_oBackground.GetData());
|
||||
|
||||
|
||||
@ -36,26 +36,10 @@ namespace BinDocxRW {
|
||||
|
||||
int Binary_VbaProjectTableReader::Read()
|
||||
{
|
||||
return ReadTable(&Binary_VbaProjectTableReader::ReadContent, this);
|
||||
}
|
||||
int Binary_VbaProjectTableReader::ReadContent(BYTE type, long length, void* poResult)
|
||||
{
|
||||
int res = c_oSerConstants::ReadOk;
|
||||
if ( c_oSerVbaProjectTypes::Name == type )
|
||||
{
|
||||
std::wstring file_name = m_oBufferedStream.GetString4(length);
|
||||
|
||||
OOX::CPath inputPath = m_oBufferedStream.m_strFolder + FILE_SEPARATOR_STR + L"media" + FILE_SEPARATOR_STR + file_name;
|
||||
OOX::CPath outputPath = m_oFileWriter.m_oDocumentWriter.m_sDir + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + L"vbaProject.bin";
|
||||
|
||||
NSFile::CFileBinary::Copy(inputPath.GetPath(), outputPath.GetPath());
|
||||
|
||||
m_oFileWriter.m_pVbaProject = new OOX::VbaProject();
|
||||
m_oFileWriter.m_pVbaProject->set_filename(outputPath.GetPath());
|
||||
}
|
||||
else
|
||||
res = c_oSerConstants::ReadUnknown;
|
||||
return res;
|
||||
m_oFileWriter.m_pVbaProject->fromPPTY(&m_oBufferedStream);
|
||||
|
||||
return c_oSerConstants::ReadOk;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------
|
||||
Binary_HdrFtrTableReader::Binary_HdrFtrTableReader(NSBinPptxRW::CBinaryFileReader& poBufferedStream, Writers::FileWriter& oFileWriter, CComments* pComments):Binary_CommonReader(poBufferedStream),m_oFileWriter(oFileWriter),m_oHeaderFooterWriter(oFileWriter.m_oHeaderFooterWriter),m_pComments(pComments)
|
||||
|
||||
@ -285,7 +285,6 @@ public:
|
||||
}
|
||||
|
||||
int Read ();
|
||||
int ReadContent (BYTE type, long length, void* poResult);
|
||||
};
|
||||
|
||||
class Binary_HdrFtrTableReader : public Binary_CommonReader<Binary_HdrFtrTableReader>
|
||||
|
||||
@ -3027,25 +3027,12 @@ namespace BinDocxRW
|
||||
}
|
||||
pOfficeDrawingConverter->SetRels(oldRels);
|
||||
}
|
||||
void WriteVbaProjectContent(OOX::VbaProject& oVbaProject)
|
||||
{
|
||||
std::wstring file_name = oVbaProject.filename().GetFilename();
|
||||
|
||||
m_oBcw.m_oStream.WriteBYTE(c_oSerVbaProjectTypes::Name);
|
||||
m_oBcw.m_oStream.WriteStringW(file_name);
|
||||
|
||||
//... todooo write parsing vba project
|
||||
|
||||
//write vbaData.... todooo
|
||||
|
||||
//copy file bin
|
||||
oVbaProject.copy_to(m_oBcw.m_oStream.m_pCommon->m_pImageManager->m_strDstMedia);
|
||||
}
|
||||
void WriteVbaProject(OOX::VbaProject& oVbaProject)
|
||||
{
|
||||
int nStart = m_oBcw.WriteItemWithLengthStart();
|
||||
WriteVbaProjectContent(oVbaProject);
|
||||
m_oBcw.WriteItemWithLengthEnd(nStart);
|
||||
m_oBcw.m_oStream.StartRecord(0);
|
||||
oVbaProject.toPPTY(&m_oBcw.m_oStream);
|
||||
m_oBcw.m_oStream.EndRecord();
|
||||
|
||||
}
|
||||
void Write(std::vector<OOX::WritingElement*>& aElems)
|
||||
{
|
||||
|
||||
@ -93,6 +93,8 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const std::wstring& sSrcFileName, co
|
||||
oDrawingConverter.SetFontDir(m_sFontDir);
|
||||
oDrawingConverter.SetFontPicker(pFontPicker);
|
||||
oDrawingConverter.SetMainDocument(this);
|
||||
|
||||
oDrawingConverter.SetDstPath(pathMain.GetDirectory() + FILE_SEPARATOR_STR + L"word");
|
||||
oDrawingConverter.SetMediaDstPath(pathMedia.GetPath());
|
||||
|
||||
m_pParamsWriter = new ParamsWriter(&oBufferedStream, &fp, &oDrawingConverter, pEmbeddedFontsManager);
|
||||
@ -264,6 +266,8 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
|
||||
if (NULL != pData)
|
||||
{
|
||||
oDrawingConverter.SetMainDocument(this);
|
||||
oDrawingConverter.SetDstPath(sDstPath + FILE_SEPARATOR_STR + L"word");
|
||||
|
||||
oDrawingConverter.SetMediaDstPath(sMediaPath);
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
|
||||
|
||||
@ -273,7 +277,7 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const std::wstring& sSrcFileName,
|
||||
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
|
||||
std::wstring sFileInDir = strFileInDir.c_str();
|
||||
|
||||
oDrawingConverter.SetSourceFileDir(sFileInDir);
|
||||
oDrawingConverter.SetSrcPath(sFileInDir);
|
||||
|
||||
BinaryFileReader oBinaryFileReader(sFileInDir, oBufferedStream, *m_pCurFileWriter);
|
||||
oBinaryFileReader.ReadFile();
|
||||
|
||||
@ -86,15 +86,16 @@ namespace BinXlsxRW{
|
||||
}
|
||||
bool CXlsxSerializer::loadFromFile(const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedDir)
|
||||
{
|
||||
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
|
||||
|
||||
NSBinPptxRW::CDrawingConverter oDrawingConverter;
|
||||
|
||||
oDrawingConverter.SetDstPath(sDstPath + FILE_SEPARATOR_STR + L"xl");
|
||||
oDrawingConverter.SetSrcPath(strFileInDir, 2);
|
||||
|
||||
oDrawingConverter.SetMediaDstPath(sMediaDir);
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedDir);
|
||||
|
||||
std::wstring strFileInDir = NSSystemPath::GetDirectoryName(sSrcFileName);
|
||||
|
||||
oDrawingConverter.SetSourceFileDir(strFileInDir, 2);
|
||||
|
||||
BinXlsxRW::BinaryFileReader oBinaryFileReader;
|
||||
oBinaryFileReader.ReadFile(sSrcFileName, sDstPath, &oDrawingConverter, sXMLOptions);
|
||||
return true;
|
||||
|
||||
@ -314,7 +314,7 @@
|
||||
17E17ED41AC453F800BEA2EA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0710;
|
||||
LastUpgradeCheck = 0830;
|
||||
ORGANIZATIONNAME = "Ascensio System SIA";
|
||||
};
|
||||
buildConfigurationList = 17E17ED71AC453F800BEA2EA /* Build configuration list for PBXProject "ASCOfficeDocxFile2Lib" */;
|
||||
@ -446,8 +446,10 @@
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
@ -455,6 +457,7 @@
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
@ -488,8 +491,10 @@
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
@ -497,6 +502,7 @@
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "../include/cpdoccore/CPScopedPtr.h"
|
||||
|
||||
namespace cpdoccore {
|
||||
@ -58,6 +59,8 @@ public:
|
||||
|
||||
//Sheet2.C3:Sheet2.C19 -> Sheet2!C3:C19
|
||||
std::wstring convert_chart_distance(std::wstring const & expr);
|
||||
|
||||
void split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out);
|
||||
|
||||
std::wstring convert_ref(std::wstring const & expr);
|
||||
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#include "formulasconvert.h"
|
||||
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/foreach.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include"../../Common/DocxFormat/Source/XML/Utils.h"
|
||||
@ -46,6 +45,9 @@ namespace formulasconvert {
|
||||
|
||||
std::wstring convert(const std::wstring& expr);
|
||||
std::wstring convert_chart_distance(const std::wstring& expr);
|
||||
|
||||
void split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out);
|
||||
|
||||
void replace_cells_range(std::wstring& expr, bool withTableName);
|
||||
bool check_formula(std::wstring& expr);
|
||||
void replace_semicolons(std::wstring& expr);
|
||||
@ -189,7 +191,7 @@ namespace formulasconvert {
|
||||
|
||||
if (convert_with_TableName)
|
||||
{
|
||||
return (sheet1 + L"!") + c1 + (c2.empty() ? L"" : (L":" + c3) );
|
||||
return (sheet1 + L"!") + c1 + (c3.empty() ? L"" : (L":" + c3) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -389,25 +391,24 @@ namespace formulasconvert {
|
||||
|
||||
std::wstring forbidden_formulas[] =
|
||||
{
|
||||
L"NULLFORMULA"
|
||||
/*
|
||||
L"BETADIST",
|
||||
L"CEILING",
|
||||
L"FLOOR",
|
||||
L"RANK",
|
||||
L"ROUND",
|
||||
L"ROUNDDOWN",
|
||||
L"ROUNDUP",
|
||||
L"SUBTOTAL",
|
||||
L"FORMULA",
|
||||
L"ISREF"*/
|
||||
L"NULLFORMULA"
|
||||
//L"BETADIST",
|
||||
//L"CEILING",
|
||||
//L"FLOOR",
|
||||
//L"RANK",
|
||||
//L"ROUND",
|
||||
//L"ROUNDDOWN",
|
||||
//L"ROUNDUP",
|
||||
//L"SUBTOTAL",
|
||||
//L"FORMULA",
|
||||
//L"ISREF"
|
||||
};
|
||||
|
||||
bool is_forbidden(const std::wstring & formula)
|
||||
{
|
||||
BOOST_FOREACH(const std::wstring & s, forbidden_formulas)
|
||||
for (size_t i = 0; i < 1/*forbidden_formulas.size()*/; i++)
|
||||
{
|
||||
if (boost::algorithm::contains(formula, s))
|
||||
if (boost::algorithm::contains(formula, forbidden_formulas[i]))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -490,10 +491,30 @@ namespace formulasconvert {
|
||||
return workstr;
|
||||
}
|
||||
|
||||
void odf2oox_converter::Impl::split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out)
|
||||
{
|
||||
std::wstring workstr = expr;
|
||||
boost::wregex complexRef(L"('(?!\\s\\'){0,1}.*?')");// поиск того что в апострофах и замена там
|
||||
|
||||
workstr = boost::regex_replace(
|
||||
expr,
|
||||
complexRef,
|
||||
&replace_point_space,
|
||||
boost::match_default | boost::format_all);
|
||||
|
||||
boost::algorithm::split(out, workstr, boost::algorithm::is_any_of(by), boost::algorithm::token_compress_on);
|
||||
|
||||
for (size_t i = 0; i < out.size(); i++)
|
||||
{
|
||||
XmlUtils::replace_all( out[i], L"PROBEL", L" ");
|
||||
XmlUtils::replace_all( out[i], L"TOCHKA", L".");
|
||||
}
|
||||
}
|
||||
|
||||
//Sheet2.C3:Sheet2.C19 Sheet2.L29:Sheet2.L36
|
||||
//в
|
||||
//Sheet2!C3:C19,Sheet2!L27:L34
|
||||
|
||||
std::wstring odf2oox_converter::Impl::convert_chart_distance(const std::wstring& expr)
|
||||
{
|
||||
if (is_forbidden(expr))
|
||||
@ -515,25 +536,27 @@ namespace formulasconvert {
|
||||
|
||||
boost::algorithm::split(distance_inp, workstr, boost::algorithm::is_any_of(L" "), boost::algorithm::token_compress_on);
|
||||
|
||||
BOOST_FOREACH(std::wstring &d,distance_inp)
|
||||
for (size_t i = 0; i < distance_inp.size(); i++)
|
||||
{
|
||||
std::wstring sheet;
|
||||
std::vector<std::wstring> range;
|
||||
std::vector<std::wstring> cells;
|
||||
|
||||
boost::algorithm::split(range,d, boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
|
||||
boost::algorithm::split(range, distance_inp[i], boost::algorithm::is_any_of(L":"), boost::algorithm::token_compress_on);
|
||||
|
||||
BOOST_FOREACH(std::wstring &c,range)
|
||||
for (size_t j = 0; j < range.size(); j++)
|
||||
{
|
||||
const std::string::size_type colon = c.find('.');
|
||||
cells.push_back(c.substr(colon+1));
|
||||
if (sheet.size()<1)
|
||||
sheet=c.substr(0, colon);
|
||||
const std::string::size_type colon = range[j].find('.');
|
||||
cells.push_back(range[j].substr(colon + 1));
|
||||
if (sheet.size() < 1)
|
||||
{
|
||||
sheet = range[j].substr(0, colon);
|
||||
}
|
||||
}
|
||||
std::wstring cells_out;
|
||||
BOOST_FOREACH(std::wstring &c,cells)
|
||||
for (size_t j = 0; j < cells.size(); j++)
|
||||
{
|
||||
cells_out.append(c);
|
||||
cells_out.append(cells[j]);
|
||||
cells_out.append(L":");
|
||||
}
|
||||
int res1 = sheet.find(L"-");
|
||||
@ -544,19 +567,19 @@ namespace formulasconvert {
|
||||
sheet = L"'" + sheet + L"'";
|
||||
}
|
||||
|
||||
distance_out.push_back(sheet+L"!" + cells_out.substr(0, cells_out.size()-1));
|
||||
distance_out.push_back(sheet + L"!" + cells_out.substr(0, cells_out.size()-1));
|
||||
}
|
||||
std::wstring result;
|
||||
|
||||
BOOST_FOREACH(std::wstring &d, distance_out)
|
||||
for (size_t i = 0; i < distance_out.size(); i++)
|
||||
{
|
||||
result.append(d);
|
||||
result.append(distance_out[i]);
|
||||
result.append(L",");
|
||||
}
|
||||
XmlUtils::replace_all( result, L"PROBEL" , L" ");
|
||||
XmlUtils::replace_all( result, L"TOCHKA" , L".");
|
||||
XmlUtils::replace_all( result, L"TOCHKA", L".");
|
||||
|
||||
return result.substr(0, result.size()-1);// минус последняя лишняя запятая
|
||||
return result.substr(0, result.size() - 1);// минус последняя лишняя запятая
|
||||
}
|
||||
odf2oox_converter::odf2oox_converter(): impl_(new odf2oox_converter::Impl)
|
||||
{
|
||||
@ -579,6 +602,10 @@ namespace formulasconvert {
|
||||
{
|
||||
return impl_->convert_chart_distance(expr);
|
||||
}
|
||||
void odf2oox_converter::split_distance_by(const std::wstring& expr, const std::wstring& by, std::vector<std::wstring>& out)
|
||||
{
|
||||
return impl_->split_distance_by(expr, by, out);
|
||||
}
|
||||
std::wstring odf2oox_converter::convert_named_ref(const std::wstring& expr, bool withTableName, std::wstring separator)
|
||||
{
|
||||
boost::wregex complexRef(L"('(?!\\s\\'){0,1}.*?')");// поиск того что в апострофах и замена там
|
||||
|
||||
@ -1427,7 +1427,7 @@ std::wstring NSPresentationEditor::CShapeWriter::ConvertImage()
|
||||
m_oWriter.WriteString(std::wstring(L"<a:xfrm"));
|
||||
if (0 != m_pImageElement->m_dRotate)
|
||||
{
|
||||
m_oWriter.WriteString(L" rot=\"" + std::to_wstring(m_pImageElement->m_dRotate * 60000) + L"\"");
|
||||
m_oWriter.WriteString(L" rot=\"" + std::to_wstring((int)(m_pImageElement->m_dRotate * 60000)) + L"\"");
|
||||
}
|
||||
if (m_pImageElement->m_bFlipH)
|
||||
{
|
||||
|
||||
@ -996,8 +996,8 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
|
||||
//даты и номера могут быть и не только в колонтитулах
|
||||
//todooo ... возможно нужно все перенести плейсхолдеры без ID a-la как в AddLayout
|
||||
|
||||
AddLayoutSlidePlaceholder(pSlide, MasterSlideNumber , pLayout);
|
||||
AddLayoutSlidePlaceholder(pSlide, MasterDate , pLayout);
|
||||
//AddLayoutSlidePlaceholder(pSlide, MasterSlideNumber , pLayout);
|
||||
//AddLayoutSlidePlaceholder(pSlide, MasterDate , pLayout);
|
||||
|
||||
//-------------элементы колонтитулов
|
||||
std::multimap<int, int>::iterator it;
|
||||
|
||||
@ -913,20 +913,29 @@ HRESULT CDrawingConverter::SetMainDocument(BinDocxRW::CDocxSerializer* pDocument
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT CDrawingConverter::SetMediaDstPath(const std::wstring& bsMediaPath)
|
||||
void CDrawingConverter::SetSrcPath(const std::wstring& sPath, int nDocType)
|
||||
{
|
||||
m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia = (std::wstring)bsMediaPath;
|
||||
m_pImageManager->SetDstMedia(m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia);
|
||||
m_pReader->m_pRels->m_pManager = m_pImageManager;
|
||||
m_pReader->m_strFolder = sPath;
|
||||
|
||||
NSDirectory::CreateDirectory(bsMediaPath);
|
||||
return S_OK;
|
||||
m_pImageManager->m_nDocumentType = nDocType;
|
||||
}
|
||||
HRESULT CDrawingConverter::SetEmbedDstPath(const std::wstring& bsEmbedPath)
|
||||
void CDrawingConverter::SetDstPath(const std::wstring& sPath)
|
||||
{
|
||||
m_pImageManager->SetDstEmbed(bsEmbedPath);
|
||||
m_pImageManager->SetDstFolder(sPath);
|
||||
}
|
||||
void CDrawingConverter::SetMediaDstPath(const std::wstring& sPath)
|
||||
{
|
||||
m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia = sPath;
|
||||
m_pImageManager->SetDstMedia(sPath);
|
||||
|
||||
NSDirectory::CreateDirectory(bsEmbedPath);
|
||||
return S_OK;
|
||||
NSDirectory::CreateDirectory(sPath);
|
||||
}
|
||||
void CDrawingConverter::SetEmbedDstPath(const std::wstring& sPath)
|
||||
{
|
||||
m_pImageManager->SetDstEmbed(sPath);
|
||||
|
||||
NSDirectory::CreateDirectory(sPath);
|
||||
}
|
||||
HRESULT CDrawingConverter::AddShapeType(const std::wstring& bsXml)
|
||||
{
|
||||
@ -5274,14 +5283,6 @@ OOX::CContentTypes* CDrawingConverter::GetContentTypes()
|
||||
//return m_pReader->mm_strContentTypes;
|
||||
}
|
||||
|
||||
void CDrawingConverter::SetSourceFileDir(std::wstring path, int nDocType)
|
||||
{
|
||||
m_pReader->m_pRels->m_pManager = m_pImageManager;
|
||||
m_pReader->m_strFolder = path;
|
||||
|
||||
m_pImageManager->m_nDocumentType = nDocType;
|
||||
}
|
||||
|
||||
void CDrawingConverter::Clear()
|
||||
{
|
||||
for (std::map<std::wstring, CShape*>::iterator pPair = m_mapShapeTypes.begin(); pPair != m_mapShapeTypes.end(); ++pPair)
|
||||
|
||||
@ -215,8 +215,12 @@ namespace NSBinPptxRW
|
||||
smart_ptr<OOX::IFileContainer> GetRels();
|
||||
|
||||
HRESULT SetMainDocument (BinDocxRW::CDocxSerializer* pDocument);
|
||||
HRESULT SetMediaDstPath (const std::wstring& sMediaPath);
|
||||
HRESULT SetEmbedDstPath (const std::wstring& sEmbedPath);
|
||||
|
||||
void SetSrcPath (const std::wstring& sPath, int nDocType = 1/*XMLWRITER_DOC_TYPE_DOCX*/);
|
||||
void SetDstPath (const std::wstring& sPath);
|
||||
|
||||
void SetMediaDstPath (const std::wstring& sMediaPath);
|
||||
void SetEmbedDstPath (const std::wstring& sEmbedPath);
|
||||
|
||||
HRESULT AddShapeType (const std::wstring& sXml);
|
||||
HRESULT AddObject (const std::wstring& sXml, std::wstring** pMainProps);
|
||||
@ -255,8 +259,6 @@ namespace NSBinPptxRW
|
||||
void SetDocumentChartsCount (int val);
|
||||
int GetDocumentChartsCount ();
|
||||
|
||||
void SetSourceFileDir (std::wstring path, int nDocType = 1/*XMLWRITER_DOC_TYPE_DOCX*/);
|
||||
|
||||
OOX::CContentTypes* GetContentTypes();
|
||||
protected:
|
||||
nullable<PPTX::Logic::Xfrm> m_oxfrm_override;
|
||||
|
||||
@ -588,7 +588,7 @@ namespace NSPresentationEditor
|
||||
#else
|
||||
std::wstring ConvertPPTtoPPTX(CPPTShape* pPPTShape, const NSGuidesVML::CFormParam& pCoef, bool bIsNamespace = false)
|
||||
{
|
||||
if (pPPTShape->m_eType == PPTShapes::sptCRect)
|
||||
if (pPPTShape->m_eType == PPTShapes::sptCRect || pPPTShape->m_eType == PPTShapes::sptCFrame)
|
||||
{
|
||||
if (bIsNamespace)
|
||||
{
|
||||
@ -604,7 +604,14 @@ namespace NSPresentationEditor
|
||||
}
|
||||
return _T("<a:prstGeom prst=\"line\"><a:avLst/></a:prstGeom>");
|
||||
}
|
||||
|
||||
else if (pPPTShape->m_eType == PPTShapes::sptCEllipse)
|
||||
{
|
||||
if (bIsNamespace)
|
||||
{
|
||||
return _T("<a:prstGeom xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" prst=\"line\"><a:avLst/></a:prstGeom>");
|
||||
}
|
||||
return _T("<a:prstGeom prst=\"ellipse\"><a:avLst/></a:prstGeom>");
|
||||
}
|
||||
std::wstring strXmlPPTX = bIsNamespace ? _T("<a:custGeom xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">") : _T("<a:custGeom>");
|
||||
|
||||
CFormulaConverter pFormulaConverter;
|
||||
|
||||
@ -121,7 +121,7 @@ namespace PPTX
|
||||
oAttr.Write(_T("noSelect"), noSelect);
|
||||
|
||||
std::wstring namespaceLocks = L"a";
|
||||
if (m_namespace == L"wp") namespaceLocks = L"wp";
|
||||
//if (m_namespace == L"wp") namespaceLocks = L"wp";
|
||||
|
||||
return XmlUtils::CreateNode(m_namespace + L":cNvGraphicFramePr", oAttr.m_strValue.empty() ? L"" : XmlUtils::CreateNode(namespaceLocks + L":graphicFrameLocks", oAttr));
|
||||
}
|
||||
@ -134,7 +134,7 @@ namespace PPTX
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) namespace_ = L"xdr";
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX)
|
||||
{
|
||||
namespaceLock_ = L"wp";
|
||||
namespaceLock_ = L"a";
|
||||
namespace_ = L"wp";
|
||||
}
|
||||
|
||||
|
||||
@ -160,7 +160,8 @@ namespace PPTX
|
||||
COfficeFileFormatChecker office_checker;
|
||||
office_checker.isOOXFormatFile(oox_file.GetPath());
|
||||
//if ( std::wstring::npos != sProgID.find(L"Word.Document"))
|
||||
if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX)
|
||||
if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX ||
|
||||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM )
|
||||
{
|
||||
pWriter->StartRecord(1);
|
||||
pWriter->WriteBYTE(1);
|
||||
@ -189,7 +190,8 @@ namespace PPTX
|
||||
*pWriter->m_pCurrentContainer = old_rels;
|
||||
pWriter->m_pMainDocument = old_serial;
|
||||
}
|
||||
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX)
|
||||
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX ||
|
||||
office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM)
|
||||
//if ( std::wstring::npos != sProgID.find(L"Excel.Sheet")) //"ET.Xlsx.6" !!!
|
||||
{
|
||||
pWriter->StartRecord(1);
|
||||
@ -346,8 +348,11 @@ namespace PPTX
|
||||
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
|
||||
|
||||
oDrawingConverter.SetMainDocument(&oDocxSerializer);
|
||||
oDrawingConverter.SetSourceFileDir(pReader->m_strFolder, 1);
|
||||
oDrawingConverter.SetMediaDstPath(sMediaPath);
|
||||
|
||||
oDrawingConverter.SetDstPath(sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"word");
|
||||
oDrawingConverter.SetSrcPath(pReader->m_strFolder, 1);
|
||||
|
||||
oDrawingConverter.SetMediaDstPath(sMediaPath);
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
|
||||
|
||||
std::wstring sDocxFilename = L"Microsoft_Word_Document" + std::to_wstring( id ) + L".docx";
|
||||
@ -434,8 +439,10 @@ namespace PPTX
|
||||
oDrawingConverter.m_pReader = pReader;
|
||||
pReader->m_pRels = new NSBinPptxRW::CRelsGenerator();
|
||||
|
||||
oDrawingConverter.SetSourceFileDir(pReader->m_strFolder, 2);
|
||||
oDrawingConverter.SetMediaDstPath(sMediaPath);
|
||||
oDrawingConverter.SetDstPath(sDstEmbeddedTemp + FILE_SEPARATOR_STR + L"xl");
|
||||
oDrawingConverter.SetSrcPath(pReader->m_strFolder, 2);
|
||||
|
||||
oDrawingConverter.SetMediaDstPath(sMediaPath);
|
||||
oDrawingConverter.SetEmbedDstPath(sEmbedPath);
|
||||
|
||||
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring( id ) + L".xlsx";
|
||||
@ -900,23 +907,28 @@ namespace PPTX
|
||||
}
|
||||
if (!blipFill.blip->mediaRid.empty())
|
||||
{
|
||||
PPTX::Logic::Ext ext;
|
||||
PPTX::Logic::Ext ext;
|
||||
ext.link = OOX::RId(blipFill.blip->mediaRid);
|
||||
nvPicPr.nvPr.extLst.push_back(ext);
|
||||
|
||||
int nRId = -1;
|
||||
std::wstring strMediaRelsPath;
|
||||
if (pReader->m_nDocumentType == XMLWRITER_DOC_TYPE_DOCX) strMediaRelsPath = L"media/";
|
||||
else strMediaRelsPath = L"../media/";
|
||||
|
||||
smart_ptr<OOX::Media> mediaFile = blipFill.additionalFile.smart_dynamic_cast<OOX::Media>();
|
||||
strMediaRelsPath += mediaFile->filename().GetFilename();
|
||||
|
||||
int nRId = -1;
|
||||
if (blipFill.additionalFile.is<OOX::Audio>())
|
||||
{
|
||||
nvPicPr.nvPr.media.Media = new PPTX::Logic::MediaFile(L"audioFile");
|
||||
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio",
|
||||
L"NULL", L"External");
|
||||
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/audio", strMediaRelsPath, L"");
|
||||
|
||||
}
|
||||
if (blipFill.additionalFile.is<OOX::Video>())
|
||||
{
|
||||
nvPicPr.nvPr.media.Media = new PPTX::Logic::MediaFile(L"videoFile");
|
||||
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video",
|
||||
L"NULL", L"External");
|
||||
nRId = pReader->m_pRels->WriteRels(L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video", strMediaRelsPath, L"");
|
||||
}
|
||||
|
||||
if (nvPicPr.nvPr.media.Media.IsInit() && nRId > 0)
|
||||
|
||||
@ -469,8 +469,8 @@ namespace PPTX
|
||||
bool m_bMacroEnabled;
|
||||
smart_ptr<OOX::VbaProject> m_pVbaProject;
|
||||
|
||||
void SetClrMap(Logic::ClrMap map) {m_clrMap = map;};
|
||||
void SetClrScheme(nsTheme::ClrScheme scheme) {m_clrScheme = scheme;};
|
||||
void SetClrMap(Logic::ClrMap map) {m_clrMap = map;}
|
||||
void SetClrScheme(nsTheme::ClrScheme scheme) {m_clrScheme = scheme;}
|
||||
|
||||
DWORD GetRGBAFromMap(const std::wstring& str)const
|
||||
{
|
||||
|
||||
@ -1922,7 +1922,7 @@
|
||||
17063B5B1AC5708E0056A3F1 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0730;
|
||||
LastUpgradeCheck = 0830;
|
||||
ORGANIZATIONNAME = "Ascensio System SIA";
|
||||
};
|
||||
buildConfigurationList = 17063B5E1AC5708E0056A3F1 /* Build configuration list for PBXProject "PPTXFormatLib" */;
|
||||
@ -2009,8 +2009,10 @@
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
@ -2018,6 +2020,7 @@
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
@ -2051,8 +2054,10 @@
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
@ -2060,6 +2065,7 @@
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
|
||||
@ -44,13 +44,13 @@ int OOXGraphicReader::Parse( ReaderParameter oParam , RtfShapePtr & pOutput)
|
||||
{
|
||||
if (m_ooxGraphic->element.getType() == OOX::et_p_ShapeTree)
|
||||
{
|
||||
OOXShapeReader shapeReader(m_ooxGraphic->element.GetElem().operator->());
|
||||
return (shapeReader.Parse(oParam, pOutput) ? 1 : 0);
|
||||
OOXShapeGroupReader groupReader(dynamic_cast<PPTX::Logic::SpTree*>(m_ooxGraphic->element.GetElem().operator->()));
|
||||
return (groupReader.Parse(oParam, pOutput) ? 1 : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
OOXShapeGroupReader groupReader(dynamic_cast<PPTX::Logic::SpTree*>(m_ooxGraphic->element.GetElem().operator->()));
|
||||
return (groupReader.Parse(oParam, pOutput) ? 1 : 0);
|
||||
OOXShapeReader shapeReader(m_ooxGraphic->element.GetElem().operator->());
|
||||
return (shapeReader.Parse(oParam, pOutput) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
if (m_ooxGraphic->olePic.IsInit())
|
||||
|
||||
@ -1003,7 +1003,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
|
||||
oNewProperty = oParam.oRtf->m_oDefaultCharProp;
|
||||
|
||||
//применяем внешний стиль
|
||||
//oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
|
||||
oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
|
||||
oNewProperty.Merge( m_oCharProperty );
|
||||
|
||||
if( NULL != poStyle && TYPE_RTF_PROPERTY_STYLE_CHAR == poStyle->GetType() )
|
||||
|
||||
@ -49,6 +49,15 @@ public:
|
||||
|
||||
pOutput->m_eAnchorTypeShape = RtfShape::st_anchor;
|
||||
|
||||
if ( m_ooxAnchor->m_oDocPr.IsInit() )
|
||||
{
|
||||
pOutput->m_nID = m_ooxAnchor->m_oDocPr->id + 1025;
|
||||
pOutput->m_sName = m_ooxAnchor->m_oDocPr->name;
|
||||
|
||||
if (m_ooxAnchor->m_oDocPr->descr.IsInit())
|
||||
pOutput->m_sDescription = m_ooxAnchor->m_oDocPr->descr.get();
|
||||
}
|
||||
|
||||
pOutput->m_bAllowOverlap = m_ooxAnchor->m_oAllowOverlap.IsInit() ? m_ooxAnchor->m_oAllowOverlap->ToBool() : false;
|
||||
pOutput->m_nZOrderRelative = m_ooxAnchor->m_oBehindDoc.IsInit() ? m_ooxAnchor->m_oBehindDoc->ToBool() : false;
|
||||
pOutput->m_bHidden = m_ooxAnchor->m_oHidden.IsInit() ? m_ooxAnchor->m_oHidden->ToBool() : false;
|
||||
|
||||
@ -77,6 +77,15 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( m_ooxInline->m_oDocPr.IsInit() )
|
||||
{
|
||||
pOutput->m_nID = m_ooxInline->m_oDocPr->id + 1025;
|
||||
pOutput->m_sName = m_ooxInline->m_oDocPr->name;
|
||||
|
||||
if (m_ooxInline->m_oDocPr->descr.IsInit())
|
||||
pOutput->m_sDescription = m_ooxInline->m_oDocPr->descr.get();
|
||||
}
|
||||
|
||||
OOXGraphicReader oGraphicReader(&m_ooxInline->m_oGraphic);
|
||||
|
||||
|
||||
@ -749,32 +749,44 @@ bool OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
|
||||
if( PROP_DEF != nCropedWidthGoal )
|
||||
{
|
||||
//делаем crop
|
||||
double nCropLeft = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->l.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
|
||||
pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal);
|
||||
pOutput->m_nCropFromLeft = (int)(nCropLeft* 65536);
|
||||
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL;
|
||||
if (oox_bitmap_fill->srcRect->l.IsInit())
|
||||
{
|
||||
double nCropLeft = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->l.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
|
||||
pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal);
|
||||
pOutput->m_nCropFromLeft = (int)(nCropLeft* 65536);
|
||||
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL;
|
||||
}
|
||||
|
||||
double nCropRight = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->r.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
|
||||
pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal);
|
||||
pOutput->m_nCropFromRight = (int)(nCropRight * 65536);
|
||||
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR;
|
||||
if (oox_bitmap_fill->srcRect->r.IsInit())
|
||||
{
|
||||
double nCropRight = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->r.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100;
|
||||
pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal);
|
||||
pOutput->m_nCropFromRight = (int)(nCropRight * 65536);
|
||||
nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR;
|
||||
}
|
||||
}
|
||||
int nCropedHeightGoal = pOutput->m_oPicture->m_nHeightGoal;
|
||||
if( PROP_DEF != nCropedHeightGoal )
|
||||
{
|
||||
double nCropTop = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->t.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
|
||||
pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal);
|
||||
pOutput->m_nCropFromTop = (int)(nCropTop * 65536);
|
||||
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT;
|
||||
if (oox_bitmap_fill->srcRect->t.IsInit())
|
||||
{
|
||||
double nCropTop = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->t.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
|
||||
pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal);
|
||||
pOutput->m_nCropFromTop = (int)(nCropTop * 65536);
|
||||
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT;
|
||||
}
|
||||
|
||||
double nCropBottom = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->b.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
|
||||
pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal);
|
||||
pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536);
|
||||
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB;
|
||||
if (oox_bitmap_fill->srcRect->b.IsInit())
|
||||
{
|
||||
double nCropBottom = XmlUtils::GetInteger( oox_bitmap_fill->srcRect->b.get()) / 100. ;
|
||||
//pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100;
|
||||
pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal);
|
||||
pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536);
|
||||
nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB;
|
||||
}
|
||||
}
|
||||
//устанавливаем scale
|
||||
if( PROP_DEF != pOutput->m_nLeft && PROP_DEF != pOutput->m_nRight && PROP_DEF != nCropedWidthGoal && 0 != nCropedWidthGoal )
|
||||
@ -916,7 +928,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L
|
||||
}
|
||||
if (oox_line_prop->w.IsInit())
|
||||
{
|
||||
pOutput->m_nLineWidth = oox_line_prop->w.get() * 12700;
|
||||
pOutput->m_nLineWidth = oox_line_prop->w.get();
|
||||
}
|
||||
if (oox_line_prop->headEnd.IsInit())
|
||||
{
|
||||
@ -1006,22 +1018,50 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::
|
||||
// //Parse(theme->m_oThemeElements.m_oFmtScheme.m_oEffectStyleLst.m_arrEffectStyle[fmt_index].m_oSp3D.GetPointer(), &color);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Xfrm *xfrm)
|
||||
{
|
||||
if (!m_vmlElement && !m_arrElement && !m_ooxShape) return false;
|
||||
if (!xfrm) return;
|
||||
|
||||
if (m_vmlElement || m_arrElement) return ParseVml(oParam , pOutput);
|
||||
double rot = xfrm->rot.IsInit() ? xfrm->rot.get() / 60000. : 0;
|
||||
if (rot > 0.01)
|
||||
pOutput->m_nRotation = rot * 65535;
|
||||
|
||||
if (xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1;
|
||||
if (xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1;
|
||||
|
||||
if (pOutput->m_bInGroup)
|
||||
{
|
||||
if (xfrm->offX.IsInit() && xfrm->offY.IsInit())
|
||||
{
|
||||
pOutput->m_nRelLeft = (int)xfrm->offX.get();
|
||||
pOutput->m_nRelTop = (int)xfrm->offY.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
pOutput->m_nRelLeft = 0;
|
||||
pOutput->m_nRelTop = 0;
|
||||
}
|
||||
if (xfrm->extX.IsInit() && xfrm->extY.IsInit())
|
||||
{
|
||||
pOutput->m_nRelRight = (int)pOutput->m_nRelLeft + xfrm->offX.get();
|
||||
pOutput->m_nRelBottom = (int)pOutput->m_nRelTop + xfrm->offY.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
pOutput->m_nRelRight = 0;
|
||||
pOutput->m_nRelBottom = 0;
|
||||
}
|
||||
pOutput->m_nRelRotation = pOutput->m_nRotation;
|
||||
}
|
||||
}
|
||||
|
||||
bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
{
|
||||
PPTX::Logic::Shape * ooxShape = dynamic_cast<PPTX::Logic::Shape*> (m_ooxShape);
|
||||
//PPTX::Logic::CxnSp* cxnShape = dynamic_cast<PPTX::Logic::CxnSp*> (m_ooxShape);
|
||||
//PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*> (m_ooxShape);
|
||||
|
||||
if (ooxShape == NULL) return false;
|
||||
|
||||
|
||||
if (!ooxShape) return false;
|
||||
|
||||
if (ooxShape->oTextBoxBodyPr.IsInit())
|
||||
{
|
||||
if (ooxShape->oTextBoxBodyPr->fromWordArt.get_value_or(false))
|
||||
@ -1051,7 +1091,9 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
if (ooxShape->spPr.Geometry.getType() == OOX::et_a_prstGeom)
|
||||
{
|
||||
PPTX::Logic::PrstGeom& geometry = ooxShape->spPr.Geometry.as<PPTX::Logic::PrstGeom>();
|
||||
SimpleTypes::EShapeType type = (SimpleTypes::EShapeType)geometry.prst.GetBYTECode();
|
||||
|
||||
SimpleTypes::CShapeType<> prst_type(geometry.prst.get());
|
||||
SimpleTypes::EShapeType type = prst_type.GetValue();
|
||||
|
||||
pOutput->m_nShapeType = OOX::PrstGeom2VmlShapeType(type);
|
||||
if (pOutput->m_nShapeType == SimpleTypes::Vml::sptNotPrimitive)
|
||||
@ -1087,40 +1129,9 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
pOutput->m_nGeoRight = 100000;
|
||||
pOutput->m_nGeoBottom = 100000;
|
||||
}
|
||||
if (ooxShape->spPr.xfrm.IsInit())
|
||||
{
|
||||
double rot = ooxShape->spPr.xfrm->rot.get() / 60000.;
|
||||
if (rot > 0.01)
|
||||
pOutput->m_nRotation = rot * 65535;
|
||||
|
||||
if (ooxShape->spPr.xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1;
|
||||
if (ooxShape->spPr.xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1;
|
||||
Parse(oParam, pOutput, ooxShape->spPr.xfrm.GetPointer());
|
||||
|
||||
if (pOutput->m_bInGroup)
|
||||
{
|
||||
if (ooxShape->spPr.xfrm->offX.IsInit() && ooxShape->spPr.xfrm->offY.IsInit())
|
||||
{
|
||||
pOutput->m_nRelLeft = (int)ooxShape->spPr.xfrm->offX.get();
|
||||
pOutput->m_nRelTop = (int)ooxShape->spPr.xfrm->offY.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
pOutput->m_nRelLeft = 0;
|
||||
pOutput->m_nRelTop = 0;
|
||||
}
|
||||
if (ooxShape->spPr.xfrm->extX.IsInit() && ooxShape->spPr.xfrm->extY.IsInit())
|
||||
{
|
||||
pOutput->m_nRelRight = (int)pOutput->m_nRelLeft + ooxShape->spPr.xfrm->offX.get();
|
||||
pOutput->m_nRelBottom = (int)pOutput->m_nRelTop + ooxShape->spPr.xfrm->offY.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
pOutput->m_nRelRight = 0;
|
||||
pOutput->m_nRelBottom = 0;
|
||||
}
|
||||
pOutput->m_nRelRotation = pOutput->m_nRotation;
|
||||
}
|
||||
}
|
||||
PPTX::Logic::ShapeStyle* oox_sp_style = ooxShape->style.GetPointer();
|
||||
|
||||
bool use_fill_from_style = false;
|
||||
@ -1132,8 +1143,8 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
case PPTX::Logic::UniFill::gradFill:
|
||||
case PPTX::Logic::UniFill::pattFill:
|
||||
case PPTX::Logic::UniFill::solidFill:
|
||||
Parse(oParam, pOutput, &ooxShape->spPr.Fill);
|
||||
|
||||
Parse(oParam, pOutput, &ooxShape->spPr.Fill);
|
||||
break;
|
||||
case PPTX::Logic::UniFill::noFill:
|
||||
pOutput->m_bFilled = false; break;
|
||||
default:
|
||||
@ -1185,7 +1196,56 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
{
|
||||
PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*>(m_ooxShape);
|
||||
|
||||
if (!ooxPic) return false;
|
||||
|
||||
std::wstring strXml;
|
||||
pOutput->m_nShapeType = SimpleTypes::Vml::sptPictureFrame;
|
||||
|
||||
Parse(oParam, pOutput, ooxPic->spPr.xfrm.GetPointer());
|
||||
|
||||
PPTX::Logic::ShapeStyle* oox_sp_style = ooxPic->style.GetPointer();
|
||||
|
||||
pOutput->m_bFilled = true;
|
||||
|
||||
Parse(oParam, pOutput, &ooxPic->blipFill);
|
||||
|
||||
if ((oox_sp_style) && (oox_sp_style->lnRef.idx.IsInit()))
|
||||
{
|
||||
Parse(oParam, pOutput, &oox_sp_style->lnRef, 2);
|
||||
}
|
||||
if (ooxPic->spPr.ln.IsInit())
|
||||
{
|
||||
Parse(oParam, pOutput, ooxPic->spPr.ln.GetPointer());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput)
|
||||
{
|
||||
if (!m_vmlElement && !m_arrElement && !m_ooxShape) return false;
|
||||
|
||||
if (OOX::CHdrFtr *pHdrFtr = dynamic_cast<OOX::CHdrFtr *>(oParam.oReader->m_currentContainer))
|
||||
pOutput->m_nHeader = 1;//shape in header/footer
|
||||
else
|
||||
pOutput->m_nHeader = 0;
|
||||
|
||||
if (m_vmlElement || m_arrElement) return ParseVml(oParam , pOutput);
|
||||
|
||||
PPTX::Logic::Shape * ooxShape = dynamic_cast<PPTX::Logic::Shape*> (m_ooxShape);
|
||||
// PPTX::Logic::CxnSp * cxnShape = dynamic_cast<PPTX::Logic::CxnSp*> (m_ooxShape);
|
||||
PPTX::Logic::Pic * ooxPic = dynamic_cast<PPTX::Logic::Pic*> (m_ooxShape);
|
||||
|
||||
if (ooxShape) return ParseShape(oParam, pOutput);
|
||||
if (ooxPic) return ParsePic(oParam, pOutput);
|
||||
//if (cxnShape) return ParseConnector(oParam, pOutput);
|
||||
|
||||
return false;
|
||||
}
|
||||
void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, std::wstring *change_sheme_color)
|
||||
{
|
||||
@ -1401,12 +1461,6 @@ bool OOXShapeReader::ParseVml( ReaderParameter oParam , RtfShapePtr& pOutput)
|
||||
}
|
||||
|
||||
//---------------------
|
||||
|
||||
if (OOX::CHdrFtr *pHdrFtr = dynamic_cast<OOX::CHdrFtr *>(oParam.oReader->m_currentContainer))
|
||||
{
|
||||
pOutput->m_nHeader = 1;//shape in header/footer
|
||||
}
|
||||
|
||||
return ParseVmlChild(oParam, pOutput);
|
||||
}
|
||||
bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput)
|
||||
@ -1499,11 +1553,6 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput)
|
||||
}
|
||||
if (m_ooxGroup)
|
||||
{
|
||||
//if( m_ooxGroup->m_sId.IsInit())
|
||||
//{
|
||||
// pOutput->m_nID = oParam.oReader->m_oOOXIdGenerator.GetId( m_ooxGroup->m_oId.get());
|
||||
//}
|
||||
|
||||
pOutput->m_nZOrderRelative = 0;
|
||||
|
||||
pOutput->m_nWrapType = 3; //def
|
||||
|
||||
@ -67,6 +67,12 @@ public:
|
||||
|
||||
static bool Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::BlipFill *oox_bitmap_fill);
|
||||
private:
|
||||
|
||||
bool ParseShape( ReaderParameter oParam , RtfShapePtr& oOutput);
|
||||
bool ParsePic( ReaderParameter oParam , RtfShapePtr& oOutput);
|
||||
|
||||
void Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Xfrm *xfrm);
|
||||
|
||||
void Parse(ReaderParameter oParam, PPTX::Logic::ColorBase *oox_color, unsigned int & nColor, _CP_OPT(double) &opacity);
|
||||
void Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_solid_fill, unsigned int & nColor, _CP_OPT(double) &opacity);
|
||||
|
||||
|
||||
@ -779,7 +779,7 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nCharStyle, oStyle ) )
|
||||
{
|
||||
sResult += L"<w:pStyle w:val=\"";
|
||||
sResult += oStyle->m_sName;
|
||||
sResult += L"Style_" + std::to_wstring(m_nCharStyle); //oStyle->m_sName;
|
||||
sResult += L"\"/>";
|
||||
}
|
||||
}
|
||||
@ -1179,28 +1179,32 @@ std::wstring RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter)
|
||||
case stSection : sType = L"numbering"; break;
|
||||
case stTable : sType = L"table"; break;
|
||||
}
|
||||
sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\">";
|
||||
sResult += L"<w:name w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>";
|
||||
//sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\">";
|
||||
sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + L"Style_" + std::to_wstring(m_nID) + L"\">";
|
||||
sResult += L"<w:name w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>";
|
||||
|
||||
if( PROP_DEF != m_nBasedOn )
|
||||
{
|
||||
RtfStylePtr oBaseStyle;
|
||||
if( true == poDocument->m_oStyleTable.GetStyle( m_nBasedOn, oBaseStyle ) )
|
||||
sResult += L"<w:basedOn w:val=\"" + XmlUtils::EncodeXmlString( oBaseStyle->m_sName ) + L"\"/>";
|
||||
{
|
||||
sResult += L"<w:basedOn w:val=\"Style_" + std::to_wstring(m_nBasedOn) + L"\"/>";
|
||||
//sResult += L"<w:basedOn w:val=\"" + XmlUtils::EncodeXmlString( oBaseStyle->m_sName ) + L"\"/>";
|
||||
}
|
||||
}
|
||||
//if( PROP_DEF != m_nNext )
|
||||
// sResult += L"<w:next w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>", );//Todo
|
||||
//if( PROP_DEF != m_nLink )
|
||||
// sResult += L"<w:link w:val=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\"/>", );//Todo
|
||||
if( PROP_DEF != m_bHidden ) sResult += L"<w:hidden/>";
|
||||
if( PROP_DEF != m_bLocked ) sResult += L"<w:locked/>";
|
||||
if( PROP_DEF != m_bPersonal ) sResult += L"<w:personal w:val=\"true\" />";
|
||||
if( PROP_DEF != m_bCompose ) sResult += L"<w:personalCompose w:val=\"true\" />";
|
||||
if( PROP_DEF != m_bReply ) sResult += L"<w:personalReply w:val=\"true\" />";
|
||||
if( 1 == m_nSemiHidden ) sResult += L"<w:semiHidden/>";
|
||||
if( PROP_DEF != m_bQFormat ) sResult += L"<w:qformat/>";
|
||||
if( PROP_DEF != m_nPriority ) sResult += L"<w:uiPriority w:val=\"" + std::to_wstring(m_nPriority) + L"\"/>";
|
||||
if( PROP_DEF != m_bUnhiddenWhenUse ) sResult += L"<w:unhideWhenUsed/>";
|
||||
if( 1 == m_bHidden ) sResult += L"<w:hidden/>";
|
||||
if( 1 == m_bLocked ) sResult += L"<w:locked/>";
|
||||
if( 1 == m_bPersonal ) sResult += L"<w:personal w:val=\"true\" />";
|
||||
if( 1 == m_bCompose ) sResult += L"<w:personalCompose w:val=\"true\" />";
|
||||
if( 1 == m_bReply ) sResult += L"<w:personalReply w:val=\"true\" />";
|
||||
if( 1 == m_nSemiHidden ) sResult += L"<w:semiHidden/>";
|
||||
if( 1 == m_bQFormat ) sResult += L"<w:qFormat/>";
|
||||
if( 1 == m_bUnhiddenWhenUse ) sResult += L"<w:unhideWhenUsed/>";
|
||||
if( PROP_DEF != m_nPriority ) sResult += L"<w:uiPriority w:val=\"" + std::to_wstring(m_nPriority) + L"\"/>";
|
||||
|
||||
return sResult;
|
||||
}
|
||||
@ -1965,7 +1969,7 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nStyle, oCurStile ) )
|
||||
{
|
||||
sResult += L"<w:pStyle w:val=\"";
|
||||
sResult += oCurStile->m_sName;
|
||||
sResult += L"Style_" + std::to_wstring(m_nStyle);//oCurStile->m_sName;
|
||||
sResult += L"\"/>" ;
|
||||
}
|
||||
}
|
||||
@ -2558,7 +2562,7 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
if( true == poDocument->m_oStyleTable.GetStyle( m_nStyle, oCurStyle) )
|
||||
{
|
||||
sResult += L"<w:tblStyle w:val=\"";
|
||||
sResult += oCurStyle->m_sName;
|
||||
sResult += L"Style_" + std::to_wstring(m_nStyle); //oCurStyle->m_sName;
|
||||
sResult += L"\"/>";
|
||||
}
|
||||
}
|
||||
|
||||
@ -256,8 +256,6 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
|
||||
sResult += L"{\\shp";
|
||||
sResult += L"{\\*\\shpinst";
|
||||
|
||||
RENDER_RTF_INT( m_nID , sResult, L"shplid" );
|
||||
|
||||
if (!m_bInGroup)
|
||||
{
|
||||
m_bAllowOverlap = 1;
|
||||
@ -265,8 +263,8 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
|
||||
m_nWrapType = 3;
|
||||
m_nWrapSideType = 0;
|
||||
m_bLockAnchor = 0;
|
||||
m_nZOrder = PROP_DEF;
|
||||
m_nZOrderRelative = PROP_DEF;
|
||||
//m_nZOrder = PROP_DEF;
|
||||
m_nZOrderRelative = 0;
|
||||
m_nLeft = m_nTop = 0;
|
||||
m_nRelBottom = m_nRelRight = PROP_DEF;
|
||||
m_nPositionV = m_nPositionH = PROP_DEF;
|
||||
@ -278,26 +276,28 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter)
|
||||
|
||||
RENDER_RTF_INT ( m_nHeader , sResult, L"shpfhdr" );
|
||||
|
||||
//sResult += L"\\shpbxcolumn";
|
||||
sResult += L"\\shpbxcolumn";
|
||||
sResult += L"\\shpbxignore";
|
||||
//sResult += L"\\shpbypara";
|
||||
sResult += L"\\shpbypara";
|
||||
sResult += L"\\shpbyignore";
|
||||
|
||||
RENDER_RTF_INT ( m_nWrapType , sResult, L"shpwr" );
|
||||
RENDER_RTF_INT ( m_nWrapSideType , sResult, L"shpwrk" );
|
||||
|
||||
//sResult += L"\\shpfblwtxt0";
|
||||
RENDER_RTF_INT( m_nZOrderRelative, sResult, L"shpfblwtxt");
|
||||
RENDER_RTF_INT ( m_nZOrder, sResult, L"shpz" );
|
||||
sResult += L"\\shplockanchor";
|
||||
|
||||
RENDER_RTF_INT ( m_nZOrder , sResult, L"shpz" );
|
||||
|
||||
RENDER_RTF_INT( m_nID, sResult, L"shplid" );
|
||||
|
||||
sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
|
||||
sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
|
||||
|
||||
}
|
||||
sResult += RenderToRtfShapeProperty( oRenderParameter );
|
||||
|
||||
sResult += L"{\\sp{\\sn fLockPosition}{\\sv 1}}";
|
||||
sResult += L"{\\sp{\\sn fLockRotation}{\\sv 1}}";
|
||||
//sResult += L"{\\sp{\\sn fLockPosition}{\\sv 1}}";
|
||||
//sResult += L"{\\sp{\\sn fLockRotation}{\\sv 1}}";
|
||||
|
||||
//picture
|
||||
if( 0 != m_oPicture && m_nFillType == 1 || m_nFillType == 2 || m_nFillType == 3 || m_nFillType == 9)
|
||||
@ -421,11 +421,11 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
|
||||
std::wstring sResult;
|
||||
|
||||
//Position absolute
|
||||
RENDER_RTF_SHAPE_PROP(L"posh", sResult, m_nPositionH);
|
||||
RENDER_RTF_SHAPE_PROP(L"posrelh", sResult, m_nPositionHRelative);
|
||||
RENDER_RTF_SHAPE_PROP(L"posv", sResult, m_nPositionV);
|
||||
RENDER_RTF_SHAPE_PROP(L"posh", sResult, m_nPositionH);
|
||||
RENDER_RTF_SHAPE_PROP(L"posrelh", sResult, m_nPositionHRelative);
|
||||
RENDER_RTF_SHAPE_PROP(L"posv", sResult, m_nPositionV);
|
||||
RENDER_RTF_SHAPE_PROP(L"posrelv", sResult, m_nPositionVRelative);
|
||||
|
||||
RENDER_RTF_SHAPE_PROP(L"posrelv", sResult, m_nPositionVRelative);
|
||||
RENDER_RTF_SHAPE_PROP(L"fLayoutInCell", sResult, m_bLayoutInCell);
|
||||
RENDER_RTF_SHAPE_PROP(L"fAllowOverlap", sResult, m_bAllowOverlap);
|
||||
|
||||
@ -438,6 +438,17 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
|
||||
RENDER_RTF_SHAPE_PROP(L"sizerelv", sResult, m_nPctHeightRelative);
|
||||
RENDER_RTF_SHAPE_PROP(L"colStart", sResult, m_nColStart);
|
||||
RENDER_RTF_SHAPE_PROP(L"colSpan", sResult, m_nColSpan);
|
||||
|
||||
if (m_sName.empty() == false)
|
||||
{
|
||||
sResult += L"{\\sp{\\sn wzName}{\\sv ";
|
||||
sResult += m_sName + L"}}";
|
||||
}
|
||||
if (m_sDescription.empty() == false)
|
||||
{
|
||||
sResult += L"{\\sp{\\sn wzDescription}{\\sv ";
|
||||
sResult += m_sDescription + L"}}";
|
||||
}
|
||||
//Rehydration
|
||||
//RENDER_RTF_SHAPE_PROP(L"metroBlob", sResult, m_sMetroBlob);
|
||||
|
||||
@ -449,7 +460,7 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
|
||||
RENDER_RTF_SHAPE_PROP(L"shapeType", sResult, m_nShapeType);
|
||||
RENDER_RTF_SHAPE_PROP(L"fBehindDocument",sResult, m_nZOrderRelative);
|
||||
RENDER_RTF_SHAPE_PROP(L"fHidden", sResult, m_bHidden);
|
||||
RENDER_RTF_SHAPE_PROP(L"fBackground", sResult, m_bBackground);
|
||||
//RENDER_RTF_SHAPE_PROP(L"fBackground", sResult, m_bBackground);
|
||||
//Text
|
||||
//sResult += L"{\\sp{\\sn fLockText}{\\sv 0}}";
|
||||
|
||||
@ -586,7 +597,7 @@ std::wstring RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter
|
||||
|
||||
int nCodePage = -1;
|
||||
|
||||
if( !m_sGtextFont.empty() )
|
||||
if( m_sGtextFont.empty() == false)
|
||||
{
|
||||
sResult += L"{\\sp{\\sn gtextFont}{\\sv ";
|
||||
sResult += m_sGtextFont + L"}}";
|
||||
@ -1487,8 +1498,8 @@ std::wstring RtfShape::GroupRenderToRtf(RenderParameter oRenderParameter)
|
||||
RENDER_RTF_INT( m_nWrapSideType , sResult, L"shpwrk" );
|
||||
RENDER_RTF_BOOL( m_bLockAnchor , sResult, L"shplockanchor" );
|
||||
|
||||
//sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
|
||||
//sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
|
||||
sResult += L"{\\sp{\\sn fUseShapeAnchor}{\\sv 0}}";
|
||||
sResult += L"{\\sp{\\sn fPseudoInline}{\\sv 1}}";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Version="8,00"
|
||||
Name="RtfFormatTest"
|
||||
ProjectGUID="{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
|
||||
RootNamespace="RtfFormatTest"
|
||||
@ -44,7 +44,7 @@
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\Common\OfficeDrawing;"..\..\DesktopEditor\freetype-2.5.2\include";..\..\..\..\..\Common\OfficeDrawing\Shapes"
|
||||
AdditionalIncludeDirectories="../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/xml/build/vs2005"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_USE_LIBXML2_READER_;LIBXML_READER_ENABLED;USE_LITE_READER;_USE_XMLLITE_READER_;PPTX_DEF;PPT_DEF;ENABLE_PPT_TO_PPTX_CONVERT;AVS_USE_CONVERT_PPTX_TOCUSTOM_VML;DONT_WRITE_EMBEDDED_FONTS"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
|
||||
@ -51,18 +51,26 @@
|
||||
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
|
||||
#endif
|
||||
|
||||
HRESULT convert_single(std::wstring fileName)
|
||||
HRESULT convert_single(std::wstring srcFileName)
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
std::wstring srcFileName = fileName;
|
||||
std::wstring dstPath = srcFileName + L"-my.xlsx";
|
||||
|
||||
std::wstring outputDir = NSDirectory::GetFolderPath(dstPath);
|
||||
std::wstring outputDir = NSDirectory::GetFolderPath(srcFileName);
|
||||
std::wstring dstTempPath = NSDirectory::CreateDirectoryWithUniqueName(outputDir);
|
||||
std::wstring dstPath;
|
||||
|
||||
hr = ConvertXls2Xlsx(srcFileName, dstTempPath, L"password", L"C:\\Windows\\Fonts", NULL);
|
||||
bool bMacros = true;
|
||||
hr = ConvertXls2Xlsx(srcFileName, dstTempPath, L"password", L"C:\\Windows\\Fonts", NULL, bMacros);
|
||||
|
||||
if (bMacros)
|
||||
{
|
||||
dstPath = srcFileName + L"-my.xlsm";
|
||||
}
|
||||
else
|
||||
{
|
||||
dstPath = srcFileName + L"-my.xlsx";
|
||||
|
||||
}
|
||||
if (hr == S_OK)
|
||||
{
|
||||
COfficeUtils oCOfficeUtils(NULL);
|
||||
@ -71,6 +79,7 @@ HRESULT convert_single(std::wstring fileName)
|
||||
|
||||
NSDirectory::DeleteDirectory(dstTempPath);
|
||||
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
@ -90,10 +99,16 @@ HRESULT convert_directory(std::wstring pathName)
|
||||
int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
if (argc < 2) return 1;
|
||||
|
||||
HRESULT hr = convert_single(argv[1]);
|
||||
|
||||
//HRESULT hr = convert_directory(argv[1]);
|
||||
HRESULT hr = -1;
|
||||
if (NSFile::CFileBinary::Exists(argv[1]))
|
||||
{
|
||||
hr = convert_single(argv[1]);
|
||||
}
|
||||
else if (NSDirectory::Exists(argv[1]))
|
||||
{
|
||||
hr = convert_directory(argv[1]);
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
@ -96,7 +96,63 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m
|
||||
storage_ = NULL;
|
||||
Open(file_path, mode);
|
||||
}
|
||||
// Opens "Workbook" stream and returns the only reference
|
||||
|
||||
void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storage_, streamName);
|
||||
if (!stream) return;
|
||||
|
||||
stream->seek(0);
|
||||
int size_stream = stream->size();
|
||||
|
||||
if (withRoot == false)
|
||||
{
|
||||
int pos = streamName.find("/");
|
||||
if (pos >= 0)
|
||||
streamName = streamName.substr(pos + 1);
|
||||
}
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, size_stream);
|
||||
if (!streamNew) return;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[size_stream];
|
||||
if (data_stream)
|
||||
{
|
||||
stream->read(data_stream, size_stream);
|
||||
|
||||
streamNew->write(data_stream, size_stream);
|
||||
|
||||
delete []data_stream;
|
||||
data_stream = NULL;
|
||||
}
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
}
|
||||
|
||||
void CompoundFile::copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot)
|
||||
{
|
||||
std::list<std::string> entries;
|
||||
entries = storage_->entries( path );
|
||||
|
||||
std::list<std::string>::iterator it;
|
||||
for( it = entries.begin(); it != entries.end(); ++it )
|
||||
{
|
||||
std::string name = *it;
|
||||
std::string fullname = path + name;
|
||||
|
||||
if( storage_->isDirectory( fullname ) )
|
||||
{
|
||||
copy( indent + 1, fullname + "/", storageOut, withRoot );
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_stream(fullname, storageOut, withRoot);
|
||||
}
|
||||
}
|
||||
}
|
||||
CFStreamPtr CompoundFile::getWorkbookStream()
|
||||
{
|
||||
CFStreamPtr stream = getNamedStream("Workbook");
|
||||
@ -123,7 +179,6 @@ CFStreamPtr CompoundFile::getNamedStream(const std::string& name)
|
||||
return streams[name];
|
||||
}
|
||||
|
||||
|
||||
CFStreamPtr CompoundFile::createNamedStream(const std::string& name)
|
||||
{
|
||||
if(!streams[name])
|
||||
|
||||
@ -58,11 +58,15 @@ public:
|
||||
|
||||
bool isError();
|
||||
|
||||
void copy( int indent, std::string path, POLE::Storage * storageOut, bool withRoot = true);
|
||||
|
||||
CFStreamPtr getWorkbookStream ();
|
||||
CFStreamPtr getNamedStream (const std::string& name);
|
||||
|
||||
POLE::Storage *storage_;
|
||||
private:
|
||||
void copy_stream(std::string streamName, POLE::Storage * storageOut, bool withRoot = true);
|
||||
|
||||
POLE::Stream* openStream (const std::string & stream_name); // Opens a stream in the storage (shall be called not more than once per stream)
|
||||
POLE::Stream* createStream (const std::string & stream_name); // Creates a new stream in the storage
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ int BopPop::serialize(std::wostream & _stream)
|
||||
{
|
||||
CP_XML_NODE(L"c:custSplit")
|
||||
{
|
||||
for (int i = 0 ; i < custom->rggrbit.pie_indices.size(); i++)
|
||||
for (size_t i = 0 ; i < custom->rggrbit.pie_indices.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"c:secondPiePt")
|
||||
{
|
||||
|
||||
@ -160,7 +160,7 @@ int CF12::serialize(std::wostream & stream)
|
||||
CFGradient *gradient = dynamic_cast<CFGradient*>(rgbCT.get());
|
||||
CP_XML_NODE(L"colorScale")
|
||||
{
|
||||
for (int i = 0; i < gradient->rgInterp.size(); i ++)
|
||||
for (size_t i = 0; i < gradient->rgInterp.size(); i ++)
|
||||
{
|
||||
CP_XML_NODE(L"cfvo")
|
||||
{
|
||||
@ -181,7 +181,7 @@ int CF12::serialize(std::wostream & stream)
|
||||
CP_XML_ATTR(L"val", cfvo.numValue);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < gradient->rgCurve.size(); i ++)
|
||||
for (size_t i = 0; i < gradient->rgCurve.size(); i ++)
|
||||
{
|
||||
CP_XML_NODE(L"color")
|
||||
{
|
||||
|
||||
@ -54,14 +54,17 @@ BaseObjectPtr Chart3d::clone()
|
||||
void Chart3d::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
unsigned short pcHeight_raw;
|
||||
record >> anRot >> anElev >> pcDist >> pcHeight_raw >> pcDepth >> pcGap >> flags;
|
||||
record >> anRot >> anElev >> pcDist >> pcHeightPie >> pcDepth >> pcGap >> flags;
|
||||
fPerspective = GETBIT(flags, 0);
|
||||
fCluster = GETBIT(flags, 1);
|
||||
f3DScaling = GETBIT(flags, 2);
|
||||
fNotPieChart = GETBIT(flags, 4);
|
||||
fWalls2D = GETBIT(flags, 5);
|
||||
pcHeight = fNotPieChart ? static_cast<short>(pcHeight_raw) : pcHeight_raw;
|
||||
|
||||
if (fNotPieChart)
|
||||
{
|
||||
pcHeight3D = static_cast<short>(pcHeightPie);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -48,7 +48,6 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeChart3d;
|
||||
@ -57,7 +56,8 @@ public:
|
||||
_INT16 anRot;
|
||||
_INT16 anElev;
|
||||
_INT16 pcDist;
|
||||
_UINT32 pcHeight;
|
||||
_UINT16 pcHeightPie;
|
||||
short pcHeight3D;
|
||||
_INT16 pcDepth;
|
||||
_UINT16 pcGap;
|
||||
|
||||
|
||||
@ -31,14 +31,15 @@
|
||||
*/
|
||||
|
||||
#include "DConRef.h"
|
||||
#include "../../../../../Common/DocxFormat/Source/XML/Utils.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
DConRef::DConRef()
|
||||
{
|
||||
index_external = -1;
|
||||
bFilePath = false;
|
||||
bSheetName = false;
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +55,8 @@ BaseObjectPtr DConRef::clone()
|
||||
|
||||
void DConRef::readFields(CFRecord& record)
|
||||
{
|
||||
global_info_ = record.getGlobalWorkbookInfo();
|
||||
|
||||
record >> ref >> cchFile;
|
||||
|
||||
if (cchFile > 1)
|
||||
@ -67,21 +70,109 @@ void DConRef::readFields(CFRecord& record)
|
||||
//self-reference = %x0002 sheet-name
|
||||
|
||||
stFile = stFile_.value();
|
||||
if (stFile.substr(0, 1) == L"\x0001")
|
||||
|
||||
std::wstring sTmp = stFile;
|
||||
|
||||
while(true)
|
||||
{
|
||||
bFilePath = true;
|
||||
stFile = stFile.substr(1);
|
||||
int pos = sTmp.find(L"\x0001");
|
||||
if (pos >= 0)
|
||||
{
|
||||
bFilePath = true;
|
||||
|
||||
path.push_back(sTmp.substr(0, pos));
|
||||
sTmp = sTmp.substr(pos + 1);
|
||||
continue;
|
||||
}
|
||||
pos = sTmp.find(L"\x0002");
|
||||
if (pos >= 0)
|
||||
{
|
||||
path.push_back(sTmp.substr(0, pos));
|
||||
sTmp = sTmp.substr(pos + 1);
|
||||
continue;
|
||||
}
|
||||
pos = sTmp.find(L"\x0003");
|
||||
if (pos >= 0)
|
||||
{
|
||||
bFilePath = true;
|
||||
|
||||
path.push_back(sTmp.substr(0, pos));
|
||||
sTmp = sTmp.substr(pos + 1);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (stFile.substr(0, 1) == L"\x0002")
|
||||
int pos = sTmp.find(L"]");
|
||||
if (pos >= 0)
|
||||
{
|
||||
bSheetName = true;
|
||||
stFile = stFile.substr(1);
|
||||
}
|
||||
file_name = sTmp.substr(1, pos - 1);
|
||||
sheet_name = sTmp.substr(pos + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sheet_name = sTmp;
|
||||
}
|
||||
}
|
||||
|
||||
int unused = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(unused);
|
||||
}
|
||||
|
||||
void DConRef::check_external()
|
||||
{
|
||||
bool bFound = false;
|
||||
|
||||
for (size_t i = 0; !bFilePath && i < global_info_->sheets_names.size(); i++)
|
||||
{
|
||||
if (global_info_->sheets_names[i] == sheet_name)
|
||||
{
|
||||
bFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bFound && (!path.empty() || !file_name.empty()) && bFilePath)
|
||||
{//external sheet
|
||||
std::wstring full_path;
|
||||
if (!path.empty())
|
||||
{
|
||||
full_path = get_external_path();
|
||||
}
|
||||
std::unordered_map<std::wstring, std::wstring>::iterator pFind = global_info_->mapPivotCacheExternal.find(file_name);
|
||||
|
||||
if (pFind == global_info_->mapPivotCacheExternal.end())
|
||||
{
|
||||
index_external = global_info_->mapPivotCacheExternal.size() ;
|
||||
|
||||
global_info_->mapPivotCacheExternal.insert(std::make_pair(file_name, full_path));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pFind->second.empty() && !full_path.empty())
|
||||
{
|
||||
pFind->second = full_path;
|
||||
}
|
||||
index_external = std::distance( global_info_->mapPivotCacheExternal.begin(), pFind) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::wstring DConRef::get_external_path()
|
||||
{
|
||||
if (path.empty() && file_name.empty()) return L"";
|
||||
|
||||
std::wstring result = L"file:///";
|
||||
|
||||
for (size_t i = 0; i < path.size(); i++)
|
||||
{
|
||||
result += L"\\" + path[i];
|
||||
}
|
||||
|
||||
if (!file_name.empty())
|
||||
result += L"\\" + file_name;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -57,9 +57,18 @@ public:
|
||||
unsigned short cchFile;
|
||||
std::wstring stFile;
|
||||
|
||||
bool bFilePath;
|
||||
bool bSheetName;
|
||||
std::vector<std::wstring> path;
|
||||
std::wstring file_name;
|
||||
std::wstring sheet_name;
|
||||
|
||||
int index_external;
|
||||
|
||||
void check_external();
|
||||
private:
|
||||
GlobalWorkbookInfoPtr global_info_;
|
||||
|
||||
std::wstring get_external_path();
|
||||
bool bFilePath;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -65,9 +65,8 @@ void MergeCells::readFields(CFRecord& record)
|
||||
int MergeCells::serialize(std::wostream & stream)
|
||||
{
|
||||
CP_XML_WRITER(stream)
|
||||
{
|
||||
|
||||
for (int i = 0 ; i < rgref.size(); i++)
|
||||
{
|
||||
for (size_t i = 0 ; i < rgref.size(); i++)
|
||||
{
|
||||
Ref8* ref = dynamic_cast<Ref8*>(rgref[i].get());
|
||||
CP_XML_NODE(L"mergeCell")
|
||||
|
||||
@ -86,7 +86,7 @@ int MulRk::serialize(std::wostream & stream)
|
||||
{
|
||||
int row = GetRow();
|
||||
|
||||
for (int i = 0; i < cells.size(); i++)
|
||||
for (size_t i = 0; i < cells.size(); i++)
|
||||
{
|
||||
Cell * cell = dynamic_cast<Cell *>(cells[i].get());
|
||||
RkRec * rkrec = dynamic_cast<RkRec *>(rgrkrec[i].get());
|
||||
|
||||
@ -103,7 +103,7 @@ int Palette::serialize(std::wostream & stream)
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < rgColor.size(); ++i)
|
||||
for(size_t i = 0; i < rgColor.size(); ++i)
|
||||
{
|
||||
LongRGB * rgb = dynamic_cast<LongRGB *>(rgColor[i].get());
|
||||
CP_XML_NODE(L"rgbColor")
|
||||
|
||||
@ -67,7 +67,7 @@ int SIIndex::serialize(std::wostream & _stream, int idx, const CellRef & in_ref)
|
||||
int res = 0;
|
||||
CP_XML_WRITER(_stream)
|
||||
{
|
||||
for (int i = 0 ; i < m_arData.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arData.size(); i++)
|
||||
{
|
||||
Number * number = dynamic_cast<Number*> (m_arData[i].get());
|
||||
BoolErr * boolErr = dynamic_cast<BoolErr*>(m_arData[i].get());
|
||||
@ -108,7 +108,7 @@ int SIIndex::serialize(std::wostream & _stream, ChartParsedFormula & in_ref)
|
||||
int idx = 0;
|
||||
CP_XML_WRITER(_stream)
|
||||
{
|
||||
for (int i = 0 ; i < m_arData.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arData.size(); i++)
|
||||
{
|
||||
Number * number = dynamic_cast<Number*> (m_arData[i].get());
|
||||
BoolErr * boolErr = dynamic_cast<BoolErr*>(m_arData[i].get());
|
||||
|
||||
@ -83,7 +83,7 @@ int SST::serialize(std::wostream & stream)
|
||||
{
|
||||
CP_XML_WRITER(stream)
|
||||
{
|
||||
for (size_t i=0; i < rgb.size(); i++)
|
||||
for (size_t i = 0; i < rgb.size(); i++)
|
||||
{
|
||||
XLUnicodeRichExtendedString *richText = dynamic_cast<XLUnicodeRichExtendedString *>(rgb[i].get());
|
||||
|
||||
|
||||
@ -65,60 +65,427 @@ BaseObjectPtr SXAddl::clone()
|
||||
|
||||
void SXAddl::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
record >> frtHeaderOld >> sxc >> sxd;
|
||||
switch(sxc)
|
||||
{
|
||||
case 0x00: content = createSxcView (record); break;
|
||||
case 0x01: content = createSxcField (record); break;
|
||||
case 0x02: content = createSxcHierarchy(record); break;
|
||||
case 0x03: content = createSxcCache (record); break;
|
||||
case 0x04: content = createSxcCacheField(record); break;
|
||||
case 0x05: content = createSxcQsi (record); break;
|
||||
case 0x06: content = createSxcQuery (record); break;
|
||||
case 0x07: content = createSxcGrpLevel (record); break;
|
||||
case 0x08: content = createSxcGroup (record); break;
|
||||
case 0x09: content = createSxcCacheItem(record); break;
|
||||
case 0x0C: content = createSxcSXRule (record); break;
|
||||
case 0x0D: content = createSxcSXFilt (record); break;
|
||||
case 0x10: content = createSxcSXDH (record); break;
|
||||
case 0x12: content = createSxcAutoSort (record); break;
|
||||
case 0x13: content = createSxcSXMgs (record); break;
|
||||
case 0x14: content = createSxcSXMg (record); break;
|
||||
case 0x17: content = createSxcField12 (record); break;
|
||||
case 0x1A: content = createSxcSXCondFmts(record); break;
|
||||
case 0x1B: content = createSxcSXCondFmt(record); break;
|
||||
case 0x1C: content = createSxcSXFilters12(record); break;
|
||||
case 0x1D: content = createSxcSXFilter12(record); break;
|
||||
}
|
||||
if (content)
|
||||
content->load(record);
|
||||
|
||||
Log::error("SXAddl record is not implemented.");
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDId::clone()
|
||||
BiffStructurePtr SXAddl::createSxcView(CFRecord& record)
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDId::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
BiffStructurePtr result;
|
||||
|
||||
short reserved;
|
||||
record >> idCache >> reserved;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0x00: result = BiffStructurePtr(new SXAddl_SXCView_SXDId()); break;
|
||||
case 0x02: result = BiffStructurePtr(new SXAddl_SXCView_SXDVer10Info()); break;
|
||||
case 0x19: result = BiffStructurePtr(new SXAddl_SXCView_SXDVer12Info()); break;
|
||||
case 0x1E: result = BiffStructurePtr(new SXAddl_SXCView_SXDTableStyleClient()); break;
|
||||
case 0xff: result = BiffStructurePtr(new SXAddl_SXCView_SXDEnd()); break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
BiffStructurePtr SXAddl::createSxcField(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0x00: result = BiffStructurePtr(new SXAddl_SXCField_SXDId()); break;
|
||||
case 0x02: result = BiffStructurePtr(new SXAddl_SXCField_SXDVer10Info()); break;
|
||||
case 0xff: result = BiffStructurePtr(new SXAddl_SXCField_SXDEnd()); break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcHierarchy(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
|
||||
if (result)
|
||||
result->load(record);
|
||||
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcCache (CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0x00: result = BiffStructurePtr(new SXAddl_SXCCache_SXDId()); break;
|
||||
case 0x01: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVerUpdInv()); break;
|
||||
case 0x02: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVer10Info()); break;
|
||||
case 0x18: result = BiffStructurePtr(new SXAddl_SXCCache_SXDVerSXMacro()); break;
|
||||
case 0x34: result = BiffStructurePtr(new SXAddl_SXCCache_SXDInvRefreshReal()); break;
|
||||
case 0x41: result = BiffStructurePtr(new SXAddl_SXCCache_SXDInfo12()); break;
|
||||
case 0xff: result = BiffStructurePtr(new SXAddl_SXCCache_SXDEnd()); break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcCacheField(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0x00: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDId()); break;
|
||||
case 0x05: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDProperty()); break;
|
||||
case 0x2d: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDSxrmitmCount()); break;
|
||||
case 0x2f: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDCaption()); break;
|
||||
case 0x30: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap()); break;
|
||||
case 0x31: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMpMapCount()); break;
|
||||
case 0x40: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDPropName()); break;
|
||||
case 0xff: result = BiffStructurePtr(new SXAddl_SXCCacheField_SXDEnd()); break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcQsi(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcQuery(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcGrpLevel(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcGroup(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcCacheItem(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXRule(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXFilt(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXDH(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcAutoSort(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXMgs(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXMg(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcField12(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXCondFmts(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXCondFmt(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXFilters12(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
BiffStructurePtr SXAddl::createSxcSXFilter12(CFRecord& record)
|
||||
{
|
||||
BiffStructurePtr result;
|
||||
switch(sxd)
|
||||
{
|
||||
case 0xff: break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDEnd::clone()
|
||||
BiffStructurePtr SXAddl_SXCField_SXDId::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDEnd(*this));
|
||||
return BiffStructurePtr(new SXAddl_SXCField_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDEnd::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
void SXAddl_SXCField_SXDId::load(CFRecord& record)
|
||||
{
|
||||
record >> stName;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCView_SXDId::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCView_SXDId(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCView_SXDId::load(CFRecord& record)
|
||||
{
|
||||
record >> stName;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCView_SXDVer10Info::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCView_SXDVer10Info(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCView_SXDVer10Info::load(CFRecord& record)
|
||||
{
|
||||
unsigned short flags, reserved2;
|
||||
unsigned char unused;
|
||||
|
||||
record >> bVerSxMacro >> flags >> unused >> reserved2;
|
||||
|
||||
fDisplayImmediateItems = GETBIT(flags, 0);
|
||||
fEnableDataEd = GETBIT(flags, 1);
|
||||
fDisableFList = GETBIT(flags, 2);
|
||||
fReenterOnLoadOnce = GETBIT(flags, 3);
|
||||
fNotViewCalculatedMembers = GETBIT(flags, 4);
|
||||
fNotVisualTotals = GETBIT(flags, 5);
|
||||
fPageMultipleItemLabel = GETBIT(flags, 6);
|
||||
fTensorFillCv = GETBIT(flags, 7);
|
||||
fHideDDData = GETBIT(flags, 8);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCView_SXDVer12Info::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCView_SXDVer12Info(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCView_SXDVer12Info::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 flags;
|
||||
unsigned short reserved3;
|
||||
|
||||
record >> flags >> reserved3;
|
||||
|
||||
fDefaultCompact = GETBIT(flags, 0);
|
||||
fDefaultOutline = GETBIT(flags, 1);
|
||||
fOutlineData = GETBIT(flags, 2);
|
||||
fCompactData = GETBIT(flags, 3);
|
||||
fNewDropZones = GETBIT(flags, 4);
|
||||
fPublished = GETBIT(flags, 5);
|
||||
fTurnOffImmersive = GETBIT(flags, 6);
|
||||
fSingleFilterPerField = GETBIT(flags, 7);
|
||||
fNonDefaultSortInFlist = GETBIT(flags, 8);
|
||||
|
||||
fDontUseCustomLists = GETBIT(flags, 10);
|
||||
|
||||
fHideDrillIndicators = GETBIT(flags, 12);
|
||||
fPrintDrillIndicators = GETBIT(flags, 13);
|
||||
fMemPropsInTips = GETBIT(flags, 14);
|
||||
fNoPivotTips = GETBIT(flags, 15);
|
||||
cIndentInc = GETBITS(flags, 16, 22);
|
||||
fNoHeaders = GETBIT(flags, 23);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCField_SXDEnd::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCField_SXDEnd(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCField_SXDEnd::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr Continue_SxaddlSxString::clone()
|
||||
BiffStructurePtr SXAddl_SXCView_SXDEnd::clone()
|
||||
{
|
||||
return BaseObjectPtr(new Continue_SxaddlSxString(*this));
|
||||
return BiffStructurePtr(new SXAddl_SXCView_SXDEnd(*this));
|
||||
}
|
||||
|
||||
void Continue_SxaddlSxString::readFields(CFRecord& record)
|
||||
void SXAddl_SXCView_SXDEnd::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheItem_SXDId::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheItem_SXDId(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheItem_SXDId::load(CFRecord& record)
|
||||
{
|
||||
short reserved;
|
||||
record >> dwItem >> reserved;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDId::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDId(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDId::load(CFRecord& record)
|
||||
{
|
||||
record >> stSourceName;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDId::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDId(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDId::load(CFRecord& record)
|
||||
{
|
||||
short reserved;
|
||||
record >> idCache >> reserved;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDEnd::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDEnd(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDEnd::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCField_SXDVer10Info::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCField_SXDVer10Info(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCField_SXDVer10Info::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 flags;
|
||||
short reserved2;
|
||||
record >> flags >> reserved2;
|
||||
|
||||
fHideDD = GETBIT(flags, 0);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr Continue_SxaddlSxString::clone()
|
||||
{
|
||||
return BiffStructurePtr(new Continue_SxaddlSxString(*this));
|
||||
}
|
||||
|
||||
void Continue_SxaddlSxString::load(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
int sz = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
if (sz > 0)
|
||||
record >> stContinue;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVer10Info::clone()
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDVer10Info::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVer10Info(*this));
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDVer10Info(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
void SXAddl_SXCCache_SXDVer10Info::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
@ -131,28 +498,28 @@ void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
|
||||
record >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVerUpdInv::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerUpdInv(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVerUpdInv::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDVerUpdInv::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDVerUpdInv(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDVerUpdInv::load(CFRecord& record)
|
||||
{
|
||||
record >> dwVersionInvalidates;
|
||||
|
||||
record.skipNunBytes(5);
|
||||
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDInfo12::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDInfo12(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDInfo12::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDInfo12(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDInfo12::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 flags;
|
||||
short reserved;
|
||||
|
||||
@ -163,39 +530,27 @@ void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
|
||||
fSrvSupportSubQuery = GETBIT(flags, 2);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVerSXMacro::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVerSXMacro::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDVerSXMacro::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDVerSXMacro::load(CFRecord& record)
|
||||
{
|
||||
unsigned char reserved1;
|
||||
short reserved2, reserved3;
|
||||
|
||||
record >> dwVer >> reserved1 >> reserved2 >> reserved3;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCView_SXDId::clone()
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDIfdbMempropMap::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCView_SXDId(*this));
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap(*this));
|
||||
}
|
||||
void SXAddl_SXCView_SXDId::readFields(CFRecord& record)
|
||||
|
||||
void SXAddl_SXCCacheField_SXDIfdbMempropMap::load(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
record >> stName;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCacheField_SXDIfdbMempropMap::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCacheField_SXDIfdbMempropMap(*this));
|
||||
}
|
||||
void SXAddl_SXCCacheField_SXDIfdbMempropMap::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
record.skipNunBytes(6);
|
||||
|
||||
int sz = record.getDataSize() - record.getRdPtr();
|
||||
@ -208,6 +563,106 @@ void SXAddl_SXCCacheField_SXDIfdbMempropMap::readFields(CFRecord& record)
|
||||
rgMap.push_back(val);
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCView_SXDTableStyleClient::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCView_SXDTableStyleClient(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCView_SXDTableStyleClient::load(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(6);
|
||||
|
||||
unsigned short flags;
|
||||
|
||||
record >> flags >> stName;
|
||||
|
||||
fLastColumn = GETBIT(flags, 1);
|
||||
fRowStrips = GETBIT(flags, 2);
|
||||
fColumnStrips = GETBIT(flags, 3);
|
||||
fRowHeaders = GETBIT(flags, 4);
|
||||
fColumnHeaders = GETBIT(flags, 5);
|
||||
fDefaultStyle = GETBIT(flags, 6);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDSxrmitmCount::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDSxrmitmCount(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDSxrmitmCount::load(CFRecord& record)
|
||||
{
|
||||
short reserved2;
|
||||
record >> citm >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDPropName::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDPropName(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDPropName::load(CFRecord& record)
|
||||
{
|
||||
record >> stPropName;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDProperty::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDProperty(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDProperty::load(CFRecord& record)
|
||||
{
|
||||
short reserved2;
|
||||
record >> ihdb >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDIfdbMpMapCount::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDIfdbMpMapCount(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDIfdbMpMapCount::load(CFRecord& record)
|
||||
{
|
||||
short reserved2;
|
||||
record >> ifdbMemProp >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDEnd::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDEnd(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDEnd::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCacheField_SXDCaption::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCacheField_SXDCaption(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCacheField_SXDCaption::load(CFRecord& record)
|
||||
{
|
||||
record >> stCaption;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BiffStructurePtr SXAddl_SXCCache_SXDInvRefreshReal::clone()
|
||||
{
|
||||
return BiffStructurePtr(new SXAddl_SXCCache_SXDInvRefreshReal(*this));
|
||||
}
|
||||
|
||||
void SXAddl_SXCCache_SXDInvRefreshReal::load(CFRecord& record)
|
||||
{
|
||||
_UINT32 flags;
|
||||
short reserved2;
|
||||
record >> flags >> reserved2;
|
||||
|
||||
fEnableRefresh = GETBIT(flags, 0);
|
||||
fInvalid = GETBIT(flags, 1);
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -60,18 +60,6 @@ class SXAddl: public BiffRecord
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXAddl)
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXAddl)
|
||||
public:
|
||||
struct _SXAddlHdr
|
||||
{
|
||||
_UINT32 frtHeaderOld;
|
||||
unsigned char sxc;
|
||||
unsigned char sxd;
|
||||
|
||||
void load(CFRecord& record)
|
||||
{
|
||||
record >> frtHeaderOld >> sxc >> sxd;
|
||||
}
|
||||
}m_SXAddlHdr;
|
||||
|
||||
SXAddl();
|
||||
~SXAddl();
|
||||
|
||||
@ -79,57 +67,249 @@ public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
};
|
||||
|
||||
class Continue_SxaddlSxString : public SXAddl
|
||||
{
|
||||
_UINT32 frtHeaderOld;
|
||||
unsigned char sxc;
|
||||
unsigned char sxd;
|
||||
BiffStructurePtr content;
|
||||
private:
|
||||
BiffStructurePtr createSxcView (CFRecord& record);
|
||||
BiffStructurePtr createSxcField (CFRecord& record);
|
||||
BiffStructurePtr createSxcHierarchy (CFRecord& record);
|
||||
BiffStructurePtr createSxcCache (CFRecord& record);
|
||||
BiffStructurePtr createSxcCacheField(CFRecord& record);
|
||||
BiffStructurePtr createSxcQsi (CFRecord& record);
|
||||
BiffStructurePtr createSxcQuery (CFRecord& record);
|
||||
BiffStructurePtr createSxcGrpLevel (CFRecord& record);
|
||||
BiffStructurePtr createSxcGroup (CFRecord& record);
|
||||
BiffStructurePtr createSxcCacheItem (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXRule (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXFilt (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXDH (CFRecord& record);
|
||||
BiffStructurePtr createSxcAutoSort (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXMgs (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXMg (CFRecord& record);
|
||||
BiffStructurePtr createSxcField12 (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXCondFmts(CFRecord& record);
|
||||
BiffStructurePtr createSxcSXCondFmt (CFRecord& record);
|
||||
BiffStructurePtr createSxcSXFilters12(CFRecord& record);
|
||||
BiffStructurePtr createSxcSXFilter12(CFRecord& record);
|
||||
};
|
||||
class Continue_SxaddlSxString : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(Continue_SxaddlSxString)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
Continue_SxaddlSxString(){}
|
||||
~Continue_SxaddlSxString(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stContinue;
|
||||
};
|
||||
class SXAddl_SXCAutoSort_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCAutoSort_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDEnd : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCField_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDId)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCField_SXDId(){}
|
||||
~SXAddl_SXCField_SXDId(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stName;
|
||||
};
|
||||
class SXAddl_SXCField_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCField_SXDEnd(){}
|
||||
~SXAddl_SXCField_SXDEnd(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
};
|
||||
class SXAddl_SXCField_SXDVer10Info : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCField_SXDVer10Info)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCField_SXDVer10Info(){}
|
||||
~SXAddl_SXCField_SXDVer10Info(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
bool fHideDD;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDId : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCView_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDId)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCView_SXDId(){}
|
||||
~SXAddl_SXCView_SXDId(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stName;
|
||||
};
|
||||
class SXAddl_SXCView_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCView_SXDEnd(){}
|
||||
~SXAddl_SXCView_SXDEnd(){}
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
};
|
||||
class SXAddl_SXCView_SXDTableStyleClient : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDTableStyleClient)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCView_SXDTableStyleClient(){}
|
||||
~SXAddl_SXCView_SXDTableStyleClient(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
bool fLastColumn;
|
||||
bool fRowStrips;
|
||||
bool fColumnStrips;
|
||||
bool fRowHeaders;
|
||||
bool fColumnHeaders;
|
||||
bool fDefaultStyle;
|
||||
|
||||
LPWideString stName;
|
||||
};
|
||||
class SXAddl_SXCAutoSort_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCAutoSort_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCAutoSort_SXDEnd(){}
|
||||
~SXAddl_SXCAutoSort_SXDEnd(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
};
|
||||
class SXAddl_SXCAutoSort_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCAutoSort_SXDId)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCAutoSort_SXDId(){}
|
||||
~SXAddl_SXCAutoSort_SXDId(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
bool fAscendSort;
|
||||
};
|
||||
class SXAddl_SXCCache_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDEnd(){}
|
||||
~SXAddl_SXCCache_SXDEnd(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
SXAddl_SXCCache_SXDEnd(CFRecord& record);
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDId)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDId(){}
|
||||
~SXAddl_SXCCache_SXDId(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_UINT32 idCache;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDInfo12 : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCache_SXDInfo12 : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDInfo12)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
SXAddl_SXCCache_SXDInfo12(){}
|
||||
~SXAddl_SXCCache_SXDInfo12(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
bool fSheetData;
|
||||
bool fSrvSupportAttribDrill;
|
||||
bool fSrvSupportSubQuery;
|
||||
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDInvRefreshReal : public SXAddl
|
||||
{
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVer10Info : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCache_SXDInvRefreshReal : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDInvRefreshReal)
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDInvRefreshReal(){}
|
||||
~SXAddl_SXCCache_SXDInvRefreshReal(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
bool fEnableRefresh;
|
||||
bool fInvalid;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVer10Info : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVer10Info)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDVer10Info(){}
|
||||
~SXAddl_SXCCache_SXDVer10Info(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_INT32 citmGhostMax;
|
||||
unsigned char bVerCacheLastRefresh;
|
||||
@ -138,155 +318,344 @@ public:
|
||||
unsigned char numDateCopy[8];
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVerSXMacro : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCache_SXDVerSXMacro : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVerSXMacro)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDVerSXMacro(){}
|
||||
~SXAddl_SXCCache_SXDVerSXMacro(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
unsigned char dwVer;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVerUpdInv : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCache_SXDVerUpdInv : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCache_SXDVerUpdInv)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCache_SXDVerUpdInv(){}
|
||||
~SXAddl_SXCCache_SXDVerUpdInv(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
unsigned char dwVersionInvalidates;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCacheField_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMempropMap: public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCacheField_SXDCaption : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDCaption)
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDCaption(){}
|
||||
~SXAddl_SXCCacheField_SXDCaption(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stCaption;
|
||||
};
|
||||
class SXAddl_SXCCacheField_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDEnd(){}
|
||||
~SXAddl_SXCCacheField_SXDEnd(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCacheField_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDId)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDId(){}
|
||||
~SXAddl_SXCCacheField_SXDId(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stSourceName;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCacheField_SXDIfdbMempropMap : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDIfdbMempropMap)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDIfdbMempropMap(){}
|
||||
~SXAddl_SXCCacheField_SXDIfdbMempropMap(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
std::vector<unsigned short> rgMap;
|
||||
};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMpMapCount: public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDPropName : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDSxrmitmCount : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCCacheItem_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDVer10Info : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDMember : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQsi_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue1: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue2: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDEnd : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDId : public SXAddl
|
||||
{
|
||||
class SXAddl_SXCCacheField_SXDIfdbMpMapCount : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDIfdbMpMapCount)
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
BiffStructurePtr clone();
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stName;
|
||||
SXAddl_SXCCacheField_SXDIfdbMpMapCount(){}
|
||||
~SXAddl_SXCCacheField_SXDIfdbMpMapCount(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_UINT32 ifdbMemProp;
|
||||
};
|
||||
class SXAddl_SXCCacheField_SXDProperty : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDProperty)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDProperty(){}
|
||||
~SXAddl_SXCCacheField_SXDProperty(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_UINT32 ihdb;
|
||||
};
|
||||
class SXAddl_SXCCacheField_SXDPropName : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDPropName)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDPropName(){}
|
||||
~SXAddl_SXCCacheField_SXDPropName(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stPropName;
|
||||
};
|
||||
class SXAddl_SXCCacheField_SXDSxrmitmCount : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheField_SXDSxrmitmCount)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheField_SXDSxrmitmCount(){}
|
||||
~SXAddl_SXCCacheField_SXDSxrmitmCount(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_UINT32 citm;
|
||||
};
|
||||
|
||||
class SXAddl_SXCView_SXDSXPIIvmb : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDTableStyleClient : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer10Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDEnd : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheItem_SXDEnd)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheItem_SXDEnd(){}
|
||||
~SXAddl_SXCCacheItem_SXDEnd(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
};
|
||||
|
||||
class SXAddl_SXCCacheItem_SXDId : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCCacheItem_SXDId)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCCacheItem_SXDId(){}
|
||||
~SXAddl_SXCCacheItem_SXDId(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
_UINT32 dwItem;
|
||||
};
|
||||
class SXAddl_SXCView_SXDVer10Info: public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDVer10Info)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCView_SXDVer10Info(){}
|
||||
~SXAddl_SXCView_SXDVer10Info(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
unsigned char bVerSxMacro;
|
||||
bool fDisplayImmediateItems;
|
||||
bool fEnableDataEd;
|
||||
bool fDisableFList;
|
||||
bool fReenterOnLoadOnce;
|
||||
bool fNotViewCalculatedMembers;
|
||||
bool fNotVisualTotals;
|
||||
bool fPageMultipleItemLabel;
|
||||
bool fTensorFillCv;
|
||||
bool fHideDDData;
|
||||
};
|
||||
class SXAddl_SXCView_SXDVer12Info: public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(SXAddl_SXCView_SXDVer12Info)
|
||||
public:
|
||||
BiffStructurePtr clone();
|
||||
|
||||
SXAddl_SXCView_SXDVer12Info(){}
|
||||
~SXAddl_SXCView_SXDVer12Info(){}
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
|
||||
bool fDefaultCompact;
|
||||
bool fDefaultOutline;
|
||||
bool fOutlineData;
|
||||
bool fCompactData;
|
||||
bool fNewDropZones;
|
||||
bool fPublished;
|
||||
bool fTurnOffImmersive;
|
||||
bool fSingleFilterPerField;
|
||||
bool fNonDefaultSortInFlist;
|
||||
bool fDontUseCustomLists;
|
||||
bool fHideDrillIndicators;
|
||||
bool fPrintDrillIndicators;
|
||||
bool fMemPropsInTips;
|
||||
bool fNoPivotTips;
|
||||
unsigned char cIndentInc;
|
||||
bool fNoHeaders;
|
||||
};
|
||||
|
||||
//class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
|
||||
//class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
|
||||
//class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
|
||||
//class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
|
||||
//
|
||||
//
|
||||
//class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
|
||||
//class SXAddl_SXCGroup_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCGroup_SXDMember : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
|
||||
//class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
|
||||
//class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCQsi_SXDId : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
|
||||
//class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
|
||||
//class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
|
||||
//class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
|
||||
//class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXDH_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
|
||||
//class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDSXFilterValue1: public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDSXFilterValue2: public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
|
||||
//class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
|
||||
//class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXMg_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
|
||||
//class SXAddl_SXCSXrule_SXDId : public SXAddl {};
|
||||
//class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
|
||||
//
|
||||
//class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
|
||||
//class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
|
||||
//class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
|
||||
//class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
|
||||
|
||||
//class SXAddl_SXCView_SXDSXPIIvmb
|
||||
//{
|
||||
// SXAddl_SXCView_SXDSXPIIvmb(CFRecord& record);
|
||||
//};
|
||||
|
||||
//class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -72,6 +72,20 @@ int SXDI::serialize(std::wostream & strm)
|
||||
CP_XML_ATTR(L"baseField", df);
|
||||
CP_XML_ATTR(L"baseItem", isxvi);
|
||||
CP_XML_ATTR(L"numFmtId", ifmt);
|
||||
switch(iiftab)
|
||||
{
|
||||
case 0x0000: CP_XML_ATTR(L"subtotal", L"sum"); break;
|
||||
case 0x0001: CP_XML_ATTR(L"subtotal", L"count"); break;
|
||||
case 0x0002: CP_XML_ATTR(L"subtotal", L"average"); break;
|
||||
case 0x0003: CP_XML_ATTR(L"subtotal", L"max"); break;
|
||||
case 0x0004: CP_XML_ATTR(L"subtotal", L"min"); break;
|
||||
case 0x0005: CP_XML_ATTR(L"subtotal", L"product"); break;
|
||||
case 0x0006: CP_XML_ATTR(L"subtotal", L"countNums");break;
|
||||
case 0x0007: CP_XML_ATTR(L"subtotal", L"stdDev"); break;
|
||||
case 0x0008: CP_XML_ATTR(L"subtotal", L"stdDevp"); break;
|
||||
case 0x0009: CP_XML_ATTR(L"subtotal", L"var"); break;
|
||||
case 0x000a: CP_XML_ATTR(L"subtotal", L"varp"); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
@ -55,6 +55,11 @@ void SXDtr::readFields(CFRecord& record)
|
||||
|
||||
std::wstring SXDtr::value()
|
||||
{
|
||||
if (mon < 1 || mon > 12) mon = 1;
|
||||
if (dom < 1 || dom > 31) dom = 1;
|
||||
|
||||
if (yr < 1) yr = 1; //???
|
||||
|
||||
std::wstringstream s;
|
||||
s << yr << L"-" << (mon < 10 ? L"0" : L"") << mon << L"-" << (dom < 10 ? L"0" : L"") << dom << L"T"
|
||||
<< (hr < 10 ? L"0" : L"") << hr << L":" << (min < 10 ? L"0" : L"") << min << L":" << (sec < 10 ? L"0" : L"") << sec;
|
||||
|
||||
@ -53,7 +53,10 @@ BaseObjectPtr SXStreamID::clone()
|
||||
|
||||
void SXStreamID::readFields(CFRecord& record)
|
||||
{
|
||||
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
|
||||
record >> idStm;
|
||||
|
||||
global_info->arPivotCacheStream.push_back(idStm);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,15 +53,17 @@ BaseObjectPtr SXTH::clone()
|
||||
void SXTH::readFields(CFRecord& record)
|
||||
{
|
||||
_UINT32 flags1;
|
||||
unsigned short flags2;
|
||||
unsigned short flags2, reserved;
|
||||
|
||||
record >> frtHeaderOld >> flags1 >> sxaxis >> isxvd >> csxvdXl >> flags2;
|
||||
record >> frtHeaderOld >> flags1 >> sxaxis >> reserved >> isxvd >> csxvdXl >> flags2;
|
||||
|
||||
record >> stUnique >> stDisplay >> stDefault >> stAll >> stDimension;
|
||||
|
||||
record >> cisxvd;
|
||||
for (int i = 0; i < cisxvd; i++)
|
||||
{
|
||||
if (record.getRdPtr() + 4 > record.getDataSize())
|
||||
break;
|
||||
_INT32 val;
|
||||
record >> val;
|
||||
rgisxvd.push_back(val);
|
||||
|
||||
@ -73,13 +73,14 @@ int SXVI::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_NODE(L"item")
|
||||
{
|
||||
if (fHidden) CP_XML_ATTR(L"h", 1);
|
||||
|
||||
if (fMissing) CP_XML_ATTR(L"m", 1);
|
||||
if (fHideDetail)CP_XML_ATTR(L"sd", 0);
|
||||
if (fFormula) CP_XML_ATTR(L"f", 1);
|
||||
|
||||
if (itmType == 0)
|
||||
{
|
||||
if (fHidden) CP_XML_ATTR(L"h", 1);
|
||||
CP_XML_ATTR(L"x", iCache);
|
||||
}
|
||||
switch(itmType)
|
||||
|
||||
@ -38,8 +38,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of Style record in BIFF8
|
||||
class Style: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(Style)
|
||||
@ -49,7 +47,6 @@ public:
|
||||
~Style();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@ namespace XLS
|
||||
|
||||
Theme::Theme()
|
||||
{
|
||||
nThemeDataSize = 0;
|
||||
}
|
||||
|
||||
Theme::~Theme()
|
||||
@ -54,16 +55,18 @@ void Theme::readFields(CFRecord& record)
|
||||
{
|
||||
record >> frtHeader >> dwThemeVersion;
|
||||
|
||||
if(!dwThemeVersion)
|
||||
if (dwThemeVersion == 124226)
|
||||
{
|
||||
Log::info("\"Theme\" binary parsing is not implemented.");
|
||||
|
||||
/*
|
||||
std::ofstream file1("D:\\temp.xlsx", std::ios_base::binary);
|
||||
file1.write(record.getCurData<char>(), (record.getDataSize() - record.getRdPtr()));
|
||||
*/
|
||||
//default theme
|
||||
}
|
||||
else if (dwThemeVersion == 0)
|
||||
{
|
||||
nThemeDataSize = record.getDataSize() - record.getRdPtr();
|
||||
pThemeData = boost::shared_array<char>(new char[nThemeDataSize]);
|
||||
|
||||
memcpy(pThemeData.get(), record.getCurData<char>(), nThemeDataSize);
|
||||
record.skipNunBytes(nThemeDataSize);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -54,6 +54,9 @@ public:
|
||||
//-----------------------------
|
||||
_UINT32 dwThemeVersion;
|
||||
FrtHeader frtHeader;
|
||||
|
||||
_UINT32 nThemeDataSize;
|
||||
boost::shared_array<char> pThemeData;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -55,10 +55,11 @@ void XFExt::readFields(CFRecord& record)
|
||||
record >> ixfe;
|
||||
record.skipNunBytes(2); // reserved
|
||||
record >> cexts;
|
||||
|
||||
while(!record.isEOF())
|
||||
{
|
||||
if(record.getRdPtr() + 8 < record.getDataSize())
|
||||
break;// 8 = миним размер структуры
|
||||
if(record.getRdPtr() + 4 > record.getDataSize())
|
||||
break;// миним размер структуры
|
||||
ExtPropPtr element(new ExtProp);
|
||||
record >> *element;
|
||||
rgExt.push_back(element);
|
||||
|
||||
@ -108,63 +108,70 @@ int FillInfo::serialize(std::wostream & stream)
|
||||
{
|
||||
CP_XML_WRITER(stream)
|
||||
{
|
||||
CP_XML_NODE(L"fill")
|
||||
if (!ext.empty())
|
||||
{
|
||||
CP_XML_NODE(L"patternFill")
|
||||
stream << ext;
|
||||
}
|
||||
else
|
||||
{
|
||||
CP_XML_NODE(L"fill")
|
||||
{
|
||||
if (fls < 0 || fls > 18)
|
||||
fls = 1;
|
||||
|
||||
CP_XML_ATTR(L"patternType", PatternType[fls]);
|
||||
|
||||
if (fls > 0)
|
||||
CP_XML_NODE(L"patternFill")
|
||||
{
|
||||
CP_XML_NODE(L"fgColor")
|
||||
{
|
||||
if (foreFillInfo_.enabled)
|
||||
{
|
||||
switch(foreFillInfo_.xclrType)
|
||||
{
|
||||
case 0://auto
|
||||
/*CP_XML_ATTR(L"auto");*/ break;
|
||||
case 1://indexed
|
||||
if (foreFillInfo_.icv < 64)
|
||||
CP_XML_ATTR(L"indexed", foreFillInfo_.icv); break;
|
||||
case 2://rgb
|
||||
CP_XML_ATTR(L"rgb", STR::toARGB(foreFillInfo_.xclrValue)); break;
|
||||
case 3://theme color
|
||||
CP_XML_ATTR(L"theme", foreFillInfo_.xclrValue/* + 1*/);
|
||||
CP_XML_ATTR(L"tint", foreFillInfo_.nTintShade / 32767.0); break;
|
||||
case 4://not set
|
||||
break;
|
||||
}
|
||||
}else
|
||||
CP_XML_ATTR(L"indexed", icvFore);
|
||||
if (fls < 0 || fls > 18)
|
||||
fls = 1;
|
||||
|
||||
}
|
||||
CP_XML_NODE(L"bgColor")
|
||||
CP_XML_ATTR(L"patternType", PatternType[fls]);
|
||||
|
||||
if (fls > 0)
|
||||
{
|
||||
if (backFillInfo_.enabled)
|
||||
CP_XML_NODE(L"fgColor")
|
||||
{
|
||||
switch(backFillInfo_.xclrType)
|
||||
if (foreFillInfo_.enabled)
|
||||
{
|
||||
case 0://auto
|
||||
/*CP_XML_ATTR(L"auto");*/ break;
|
||||
case 1://indexed
|
||||
if (backFillInfo_.icv < 64)
|
||||
CP_XML_ATTR(L"indexed", backFillInfo_.icv); break;
|
||||
case 2://rgb
|
||||
CP_XML_ATTR(L"rgb", STR::toARGB(backFillInfo_.xclrValue)); break;
|
||||
case 3://theme color
|
||||
CP_XML_ATTR(L"theme", backFillInfo_.xclrValue /*+ 1*/);
|
||||
CP_XML_ATTR(L"tint", backFillInfo_.nTintShade / 32767.0); break;
|
||||
case 4://not set
|
||||
break;
|
||||
}
|
||||
switch(foreFillInfo_.xclrType)
|
||||
{
|
||||
case 0://auto
|
||||
/*CP_XML_ATTR(L"auto");*/ break;
|
||||
case 1://indexed
|
||||
if (foreFillInfo_.icv < 64)
|
||||
CP_XML_ATTR(L"indexed", foreFillInfo_.icv); break;
|
||||
case 2://rgb
|
||||
CP_XML_ATTR(L"rgb", STR::toARGB(foreFillInfo_.xclrValue)); break;
|
||||
case 3://theme color
|
||||
CP_XML_ATTR(L"theme", foreFillInfo_.xclrValue/* + 1*/);
|
||||
CP_XML_ATTR(L"tint", foreFillInfo_.nTintShade / 32767.0); break;
|
||||
case 4://not set
|
||||
break;
|
||||
}
|
||||
}else
|
||||
CP_XML_ATTR(L"indexed", icvFore);
|
||||
|
||||
}
|
||||
else
|
||||
CP_XML_ATTR(L"indexed", icvBack);
|
||||
CP_XML_NODE(L"bgColor")
|
||||
{
|
||||
if (backFillInfo_.enabled)
|
||||
{
|
||||
switch(backFillInfo_.xclrType)
|
||||
{
|
||||
case 0://auto
|
||||
/*CP_XML_ATTR(L"auto");*/ break;
|
||||
case 1://indexed
|
||||
if (backFillInfo_.icv < 64)
|
||||
CP_XML_ATTR(L"indexed", backFillInfo_.icv); break;
|
||||
case 2://rgb
|
||||
CP_XML_ATTR(L"rgb", STR::toARGB(backFillInfo_.xclrValue)); break;
|
||||
case 3://theme color
|
||||
CP_XML_ATTR(L"theme", backFillInfo_.xclrValue /*+ 1*/);
|
||||
CP_XML_ATTR(L"tint", backFillInfo_.nTintShade / 32767.0); break;
|
||||
case 4://not set
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
CP_XML_ATTR(L"indexed", icvBack);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ struct FillInfo
|
||||
FillInfoExt foreFillInfo_;
|
||||
FillInfoExt backFillInfo_;
|
||||
|
||||
|
||||
std::wstring ext;
|
||||
};
|
||||
|
||||
struct BorderInfo
|
||||
|
||||
@ -154,7 +154,7 @@ void CellXF::load(CFRecord& record)
|
||||
|
||||
void CellXF::RegisterFillBorder()
|
||||
{
|
||||
for (int i = 0; i < ext_props.size(); i++ )
|
||||
for (size_t i = 0; i < ext_props.size(); i++ )
|
||||
{
|
||||
ExtProp* ext_prop = dynamic_cast<ExtProp*>(ext_props[i].get());
|
||||
|
||||
|
||||
@ -100,7 +100,7 @@ void ChartParsedFormula::load(CFRecord& record)
|
||||
|
||||
bool ChartParsedFormula::inRange(const CellRef & ref)
|
||||
{
|
||||
for (int i = 0 ; i < cell_ranges.size(); i++)
|
||||
for (size_t i = 0 ; i < cell_ranges.size(); i++)
|
||||
{
|
||||
if (cell_ranges[i].inRange(ref))
|
||||
{
|
||||
|
||||
@ -46,6 +46,11 @@ BiffStructurePtr ExtProp::clone()
|
||||
void ExtProp::load(CFRecord& record)
|
||||
{
|
||||
record >> extType >> cb;
|
||||
|
||||
if ((int)(cb - 4) > (int)(record.getDataSize() - record.getRdPtr()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
switch(extType)
|
||||
{
|
||||
case 0x0004:
|
||||
|
||||
@ -78,7 +78,7 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
|
||||
{
|
||||
}
|
||||
|
||||
for (int i = 0 ; i < child_records.size(); i++)
|
||||
for (size_t i = 0 ; i < child_records.size(); i++)
|
||||
{
|
||||
switch(child_records[i]->rh_own.recType)
|
||||
{
|
||||
@ -87,7 +87,7 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
|
||||
OfficeArtDgContainer * dg = dynamic_cast<OfficeArtDgContainer *>(child_records[i].get());
|
||||
if (dg)
|
||||
{
|
||||
for (int i = 0 ; i < dg->child_records.size(); i++)
|
||||
for (size_t i = 0 ; i < dg->child_records.size(); i++)
|
||||
{
|
||||
child_records.push_back(dg->child_records[i]);
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ namespace ODRAW
|
||||
//shift for all trailing zeros
|
||||
std::bitset<sizeof(int)*8> bits( mask );
|
||||
|
||||
for ( unsigned int i = 0; i < bits.size(); i++ )
|
||||
for ( size_t i = 0; i < bits.size(); i++ )
|
||||
{
|
||||
if ( !bits[i] )
|
||||
{
|
||||
|
||||
@ -73,7 +73,7 @@ void OfficeArtDggContainer::loadFields(XLS::CFRecord& record)
|
||||
{
|
||||
OfficeArtContainer::loadFields(record);
|
||||
|
||||
for (int i = 0 ; i < child_records.size(); i++)
|
||||
for (size_t i = 0 ; i < child_records.size(); i++)
|
||||
{
|
||||
switch(child_records[i]->rh_own.recType)
|
||||
{
|
||||
@ -111,7 +111,7 @@ void OfficeArtSpgrContainer::loadFields(XLS::CFRecord& record)
|
||||
{
|
||||
OfficeArtContainer::loadFields(record);
|
||||
|
||||
//for (int i = 0 ; i < child_records.size(); i++)
|
||||
//for (size_t i = 0 ; i < child_records.size(); i++)
|
||||
//{
|
||||
// switch(child_records[i]->rh_own.recType)
|
||||
// {
|
||||
@ -128,7 +128,7 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record)
|
||||
{
|
||||
OfficeArtContainer::loadFields(record);
|
||||
|
||||
for (int i = 0 ; i < child_records.size(); i++)
|
||||
for (size_t i = 0 ; i < child_records.size(); i++)
|
||||
{
|
||||
switch(child_records[i]->rh_own.recType)
|
||||
{
|
||||
|
||||
@ -77,8 +77,8 @@ void PtgSxName::assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool f
|
||||
SXPair *pair = dynamic_cast<SXPair*>(global_info->arPivotSxNames[sxIndex].pair[0].get());
|
||||
if (pair)
|
||||
{
|
||||
std::map<int, BaseObjectPtr>::iterator pFind = global_info->mapPivotCache.find(global_info->idPivotCache);
|
||||
if (pFind != global_info->mapPivotCache.end())
|
||||
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info->mapPivotCacheStream.find(global_info->idPivotCache);
|
||||
if (pFind != global_info->mapPivotCacheStream.end())
|
||||
{
|
||||
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
|
||||
if (pivot_cache)
|
||||
|
||||
@ -31,7 +31,9 @@
|
||||
*/
|
||||
|
||||
#include "StyleXF.h"
|
||||
#include "XFProps.h"
|
||||
#include "ExtProp.h"
|
||||
|
||||
#include <Binary/CFRecord.h>
|
||||
|
||||
namespace XLS
|
||||
@ -139,85 +141,100 @@ void StyleXF::load(CFRecord& record)
|
||||
fill.icvFore = GETBITS(flags4, 0, 6);
|
||||
fill.icvBack = GETBITS(flags4, 7, 13);
|
||||
}
|
||||
|
||||
}
|
||||
void StyleXF::Update(ExtProp* ext_prop)
|
||||
{
|
||||
if (!ext_prop) return;
|
||||
|
||||
switch(ext_prop->extType)
|
||||
{
|
||||
case 0x0004:
|
||||
{
|
||||
fill.foreFillInfo_.enabled = true;
|
||||
fill.foreFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
fill.foreFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
fill.foreFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
fill.foreFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0005:
|
||||
{
|
||||
fill.backFillInfo_.enabled = true;
|
||||
fill.backFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
fill.backFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
fill.backFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
fill.backFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0007:
|
||||
{
|
||||
border.topFillInfo_.enabled = true;
|
||||
border.topFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.topFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.topFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.topFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0008:
|
||||
{
|
||||
border.bottomFillInfo_.enabled = true;
|
||||
border.bottomFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.bottomFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.bottomFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.bottomFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0009:
|
||||
{
|
||||
border.leftFillInfo_.enabled = true;
|
||||
border.leftFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.leftFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.leftFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.leftFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x000A:
|
||||
{
|
||||
border.rightFillInfo_.enabled = true;
|
||||
border.rightFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.rightFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.rightFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.rightFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
//case 0x000B: //diag color
|
||||
//case 0x000C: //diag color
|
||||
case 0x000D:
|
||||
{
|
||||
font_color.enabled = true;
|
||||
font_color.icv = ext_prop->extPropData.color.icv;
|
||||
font_color.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
font_color.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
font_color.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
//case 0x0006:
|
||||
// extPropData.gradient_fill.toXML(own_tag);
|
||||
// break;
|
||||
case 0x000E:
|
||||
{
|
||||
font_id = ext_prop->extPropData.font_scheme;
|
||||
}break;
|
||||
case 0x000F:
|
||||
{
|
||||
cIndent = ext_prop->extPropData.indent_level;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
void StyleXF::Update(XFProps* xfProps)
|
||||
{
|
||||
if (!xfProps) return;
|
||||
|
||||
std::wstringstream strm;
|
||||
xfProps->serialize_fill(strm);
|
||||
fill.ext = strm.str();
|
||||
}
|
||||
void StyleXF::RegisterFillBorder()
|
||||
{
|
||||
for (int i = 0; i < ext_props.size(); i++ )
|
||||
for (size_t i = 0; i < ext_props.size(); i++ )
|
||||
{
|
||||
ExtProp* ext_prop = dynamic_cast<ExtProp*>(ext_props[i].get());
|
||||
Update (ext_prop);
|
||||
}
|
||||
|
||||
switch(ext_prop->extType)
|
||||
{
|
||||
case 0x0004:
|
||||
{
|
||||
fill.foreFillInfo_.enabled = true;
|
||||
fill.foreFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
fill.foreFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
fill.foreFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
fill.foreFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0005:
|
||||
{
|
||||
fill.backFillInfo_.enabled = true;
|
||||
fill.backFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
fill.backFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
fill.backFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
fill.backFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0007:
|
||||
{
|
||||
border.topFillInfo_.enabled = true;
|
||||
border.topFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.topFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.topFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.topFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0008:
|
||||
{
|
||||
border.bottomFillInfo_.enabled = true;
|
||||
border.bottomFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.bottomFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.bottomFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.bottomFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x0009:
|
||||
{
|
||||
border.leftFillInfo_.enabled = true;
|
||||
border.leftFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.leftFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.leftFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.leftFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
case 0x000A:
|
||||
{
|
||||
border.rightFillInfo_.enabled = true;
|
||||
border.rightFillInfo_.icv = ext_prop->extPropData.color.icv;
|
||||
border.rightFillInfo_.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
border.rightFillInfo_.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
border.rightFillInfo_.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
}break;
|
||||
//case 0x000B: //diag color
|
||||
//case 0x000C: //diag color
|
||||
case 0x000D:
|
||||
font_color.enabled = true;
|
||||
font_color.icv = ext_prop->extPropData.color.icv;
|
||||
font_color.xclrType = ext_prop->extPropData.color.xclrType;
|
||||
font_color.nTintShade = ext_prop->extPropData.color.nTintShade;
|
||||
font_color.xclrValue = ext_prop->extPropData.color.xclrValue;
|
||||
break;
|
||||
//case 0x0006:
|
||||
// extPropData.gradient_fill.toXML(own_tag);
|
||||
// break;
|
||||
case 0x000E:
|
||||
font_id = ext_prop->extPropData.font_scheme;
|
||||
break;
|
||||
case 0x000F:
|
||||
cIndent = ext_prop->extPropData.indent_level;
|
||||
break;
|
||||
}
|
||||
}
|
||||
border_x_id = m_GlobalWorkbookInfo->RegisterBorderId(border);
|
||||
fill_x_id = m_GlobalWorkbookInfo->RegisterFillId(fill);
|
||||
|
||||
|
||||
@ -36,8 +36,10 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class XFProps;
|
||||
class ExtProp;
|
||||
class CFRecord;
|
||||
|
||||
class GlobalWorkbookInfo;
|
||||
typedef boost::shared_ptr<GlobalWorkbookInfo> GlobalWorkbookInfoPtr;
|
||||
|
||||
@ -50,13 +52,15 @@ public:
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
|
||||
GlobalWorkbookInfoPtr m_GlobalWorkbookInfo;
|
||||
|
||||
static const ElementType type = typeStyleXF;
|
||||
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
void Update(ExtProp* extProp); // xls style
|
||||
void Update(XFProps* xfProps); //xlsx style
|
||||
|
||||
void RegisterFillBorder();
|
||||
|
||||
unsigned char alc;
|
||||
|
||||
@ -70,12 +70,13 @@ int XFPropColor::serialize(std::wostream & stream)
|
||||
{
|
||||
case 0: CP_XML_ATTR(L"auto", 1); break;
|
||||
case 1: CP_XML_ATTR(L"indexed", icv); break;
|
||||
case 2: CP_XML_ATTR(L"rgb", dwRgba.strRGB); break;
|
||||
case 3: CP_XML_ATTR(L"theme", icv); break;
|
||||
case 2:
|
||||
case 3: CP_XML_ATTR(L"rgb", dwRgba.strRGB); break;
|
||||
//CP_XML_ATTR(L"theme", icv); break;
|
||||
}
|
||||
if (nTintShade != 0)
|
||||
{
|
||||
CP_XML_ATTR(L"tint", nTintShade);
|
||||
CP_XML_ATTR(L"tint", nTintShade/ 32767.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -110,15 +110,68 @@ void XFProps::load(CFRecord& record)
|
||||
}
|
||||
}
|
||||
}
|
||||
int XFProps::serialize(std::wostream & stream, bool dxf)
|
||||
|
||||
int XFProps::serialize_fill(std::wostream & stream)
|
||||
{
|
||||
if (arXFPropFill.empty()) return 0;
|
||||
|
||||
CP_XML_WRITER(stream)
|
||||
{
|
||||
XFProp *pPatternType = NULL;
|
||||
XFPropGradient *pGradient = NULL;
|
||||
|
||||
for (size_t i = 0; i < arXFPropFill.size(); i++)
|
||||
{
|
||||
switch(arXFPropFill[i].xfPropType)
|
||||
{
|
||||
case 1:
|
||||
case 0: pPatternType = &arXFPropFill[i]; break;
|
||||
case 3: pGradient = dynamic_cast<XFPropGradient*>(arXFPropFill[i].xfPropDataBlob.get()); break;
|
||||
}
|
||||
}
|
||||
CP_XML_NODE(L"fill")
|
||||
{
|
||||
if (pGradient || arXFPropGradient.size() > 0)
|
||||
{
|
||||
CP_XML_NODE(L"gradientFill")
|
||||
{
|
||||
if (pGradient)
|
||||
pGradient->serialize_attr(CP_GET_XML_NODE());
|
||||
|
||||
for (size_t i = 0 ; i < arXFPropGradient.size(); i++)
|
||||
{
|
||||
if (arXFPropGradient[i].xfPropDataBlob == NULL) continue;
|
||||
arXFPropGradient[i].xfPropDataBlob->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pPatternType)
|
||||
{
|
||||
CP_XML_NODE(L"patternFill")
|
||||
{
|
||||
pPatternType->serialize_attr(CP_GET_XML_NODE());
|
||||
|
||||
for (size_t i = 0; i < arXFPropFill.size(); i++)
|
||||
{
|
||||
arXFPropFill[i].serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int XFProps::serialize(std::wostream & strm, bool dxf)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
if (arXFPropFont.size() > 0)
|
||||
{
|
||||
CP_XML_NODE(L"font")
|
||||
{
|
||||
for (int i = 0; i < arXFPropFont.size(); i++)
|
||||
for (size_t i = 0; i < arXFPropFont.size(); i++)
|
||||
{
|
||||
arXFPropFont[i].serialize(CP_XML_STREAM());
|
||||
}
|
||||
@ -128,7 +181,7 @@ int XFProps::serialize(std::wostream & stream, bool dxf)
|
||||
{
|
||||
CP_XML_NODE(L"numFmt")
|
||||
{
|
||||
for (int i = 0; i < arXFPropNumFmt.size(); i++)
|
||||
for (size_t i = 0; i < arXFPropNumFmt.size(); i++)
|
||||
{
|
||||
if (dxf)
|
||||
{
|
||||
@ -141,54 +194,13 @@ int XFProps::serialize(std::wostream & stream, bool dxf)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (arXFPropFill.size() > 0)
|
||||
{
|
||||
XFProp pPatternType;
|
||||
XFPropGradient *pGradient = NULL;
|
||||
serialize_fill(strm);
|
||||
|
||||
for (int i = 0; i < arXFPropFill.size(); i++)
|
||||
{
|
||||
switch(arXFPropFill[i].xfPropType)
|
||||
{
|
||||
case 0: pPatternType = arXFPropFill[i]; break;
|
||||
case 3: pGradient = dynamic_cast<XFPropGradient*>(arXFPropFill[i].xfPropDataBlob.get()); break;
|
||||
}
|
||||
}
|
||||
CP_XML_NODE(L"fill")
|
||||
{
|
||||
if (pGradient || arXFPropGradient.size()>0)
|
||||
{
|
||||
CP_XML_NODE(L"gradientFill")
|
||||
{
|
||||
if (pGradient)
|
||||
pGradient->serialize_attr(CP_GET_XML_NODE());
|
||||
|
||||
for (int i = 0 ; i < arXFPropGradient.size(); i++)
|
||||
{
|
||||
if (arXFPropGradient[i].xfPropDataBlob == NULL) continue;
|
||||
arXFPropGradient[i].xfPropDataBlob->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CP_XML_NODE(L"patternFill")
|
||||
{
|
||||
pPatternType.serialize_attr(CP_GET_XML_NODE());
|
||||
|
||||
for (int i = 0; i < arXFPropFill.size(); i++)
|
||||
{
|
||||
arXFPropFill[i].serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (arXFPropAlignment.size() > 0)
|
||||
{
|
||||
CP_XML_NODE(L"alignment")
|
||||
{
|
||||
for (int i = 0; i < arXFPropAlignment.size(); i++)
|
||||
for (size_t i = 0; i < arXFPropAlignment.size(); i++)
|
||||
{
|
||||
arXFPropAlignment[i].serialize(CP_XML_STREAM());
|
||||
}
|
||||
@ -205,7 +217,7 @@ int XFProps::serialize(std::wostream & stream, bool dxf)
|
||||
if (arXFPropBorder.bottom) arXFPropBorder.bottom->serialize(CP_XML_STREAM());
|
||||
|
||||
//----------------------------------------
|
||||
for (int i = 0; i < arXFPropBorder.other.size(); i++)
|
||||
for (size_t i = 0; i < arXFPropBorder.other.size(); i++)
|
||||
{
|
||||
arXFPropBorder.other[i].serialize(CP_XML_STREAM());
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffStructure.h"
|
||||
#include "../Biff_structures/XFProp.h"
|
||||
#include "XFProp.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -47,13 +47,14 @@ public:
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
|
||||
static const ElementType type = typeXFProps;
|
||||
|
||||
unsigned short cprops;
|
||||
|
||||
int serialize(std::wostream & stream){ return serialize(stream, false) ; }
|
||||
int serialize(std::wostream & stream, bool dxf);
|
||||
|
||||
int serialize_fill(std::wostream & stream);
|
||||
|
||||
std::vector<XFProp> arXFPropFont;
|
||||
std::vector<XFProp> arXFPropNumFmt;
|
||||
|
||||
@ -112,7 +112,7 @@ int XLUnicodeRichExtendedString::serialize (std::wostream & _stream)
|
||||
|
||||
CP_XML_WRITER(_stream)
|
||||
{
|
||||
for (int i = 0 ; i < rgRun.size(); i++)
|
||||
for (size_t i = 0 ; i < rgRun.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"r")
|
||||
{
|
||||
|
||||
@ -116,7 +116,7 @@ const bool AUTOFILTER::loadContent(BinProcessor& proc)
|
||||
std::vector<BaseObjectPtr> ar;
|
||||
ar.push_back(elements_.back());
|
||||
|
||||
m_mapFilters12.insert(std::pair<int, std::vector<BaseObjectPtr>>(ind, ar));
|
||||
m_mapFilters12.insert(std::make_pair(ind, ar));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -187,7 +187,7 @@ int AUTOFILTER::serialize(std::wostream & stream)
|
||||
{
|
||||
CP_XML_ATTR(L"ref", ref);
|
||||
|
||||
for (int i = 0 ; i < m_arFilters.size(); i++)//todooo сделать на оставшиеся - count_columns (hidden)
|
||||
for (size_t i = 0 ; i < m_arFilters.size(); i++)//todooo сделать на оставшиеся - count_columns (hidden)
|
||||
{
|
||||
AutoFilter * filter = dynamic_cast<AutoFilter*>(m_arFilters[i].get());
|
||||
CP_XML_NODE(L"filterColumn")
|
||||
@ -214,12 +214,12 @@ int AUTOFILTER::serialize(std::wostream & stream)
|
||||
std::map<int, std::vector<BaseObjectPtr>>::iterator itF = m_mapFilters12.find(filter->iEntry);
|
||||
if (itF != m_mapFilters12.end())
|
||||
{
|
||||
for (int j = 0 ; j < itF->second.size(); j++)
|
||||
for (size_t j = 0 ; j < itF->second.size(); j++)
|
||||
{
|
||||
AutoFilter12* af12 = dynamic_cast<AutoFilter12*>(itF->second[j].get());
|
||||
if (af12 == NULL) continue;
|
||||
|
||||
for (int k = 0 ; k < af12->rgbAF12Criteries.size(); k++)
|
||||
for (size_t k = 0 ; k < af12->rgbAF12Criteries.size(); k++)
|
||||
{
|
||||
AF12Criteria * af12Criteria = dynamic_cast<AF12Criteria *>(af12->rgbAF12Criteries[k].get());
|
||||
if (af12Criteria == NULL) continue;
|
||||
|
||||
@ -225,7 +225,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
|
||||
{
|
||||
CatSerRange * iv_CatSerRange = NULL;
|
||||
|
||||
for (int i = 0 ; i < m_arAxes.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arAxes.size(); i++)
|
||||
{
|
||||
IVAXIS * iv = dynamic_cast<IVAXIS*> (m_arAxes[i].get());
|
||||
if (iv)
|
||||
@ -237,7 +237,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
|
||||
}
|
||||
CP_XML_WRITER(_stream)
|
||||
{
|
||||
for (int i = 0 ; i < m_arAxes.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arAxes.size(); i++)
|
||||
{
|
||||
IVAXIS * iv = dynamic_cast<IVAXIS*> (m_arAxes[i].get());
|
||||
DVAXIS * dv = dynamic_cast<DVAXIS*> (m_arAxes[i].get());
|
||||
@ -263,7 +263,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
|
||||
CP_XML_NODE(node_ax_type)
|
||||
{
|
||||
ATTACHEDLABEL *label = NULL;
|
||||
for ( int h = 0 ; h < m_arATTACHEDLABEL.size(); h++)
|
||||
for ( size_t h = 0 ; h < m_arATTACHEDLABEL.size(); h++)
|
||||
{
|
||||
ATTACHEDLABEL *l_= dynamic_cast<ATTACHEDLABEL *> (m_arATTACHEDLABEL[h].get() );
|
||||
|
||||
@ -309,7 +309,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
|
||||
// }
|
||||
//}
|
||||
|
||||
for (int j = 0 ; j < m_arAxesId.size(); j++)
|
||||
for (size_t j = 0 ; j < m_arAxesId.size(); j++)
|
||||
{
|
||||
if (m_arAxesId[j].first != m_arAxesId[i].first && m_arAxesId[j].second != 3)
|
||||
{
|
||||
|
||||
@ -104,7 +104,7 @@ void AXISPARENT::concatinate_second (BaseObjectPtr & addit)
|
||||
|
||||
if (second == NULL) return;
|
||||
|
||||
for (int i = 0; i < second->m_arCRT.size(); i++)
|
||||
for (size_t i = 0; i < second->m_arCRT.size(); i++)
|
||||
{
|
||||
CRT* crt = dynamic_cast<CRT*>(second->m_arCRT[i].get());
|
||||
crt->m_indAXISPARENT = 1;
|
||||
|
||||
@ -161,7 +161,7 @@ int AXS::serialize(std::wostream & _stream)
|
||||
|
||||
CP_XML_WRITER(_stream)
|
||||
{
|
||||
for (int i = 0 ; i < m_AxisLine_Format.size(); i++)
|
||||
for (size_t i = 0 ; i < m_AxisLine_Format.size(); i++)
|
||||
{
|
||||
std::wstring grid;
|
||||
|
||||
|
||||
@ -78,7 +78,7 @@ public:
|
||||
{
|
||||
if (row->miyRw > 0 && std::abs(row->miyRw/20. - sheet_info.defaultRowHeight) > 0.001)
|
||||
{
|
||||
sheet_info.customRowsHeight.insert(std::pair<int, double>(row->rw, row->miyRw / 20.));
|
||||
sheet_info.customRowsHeight.insert(std::make_pair(row->rw, row->miyRw / 20.));
|
||||
}
|
||||
}
|
||||
m_rows.push_back(elements_.front());
|
||||
@ -102,7 +102,7 @@ public:
|
||||
{
|
||||
std::list<BaseObjectPtr> c;
|
||||
c.push_back(elements_.front());
|
||||
m_cells.insert(std::pair<int, std::list<BaseObjectPtr>>(cell->RowNumber, c));
|
||||
m_cells.insert(std::make_pair(cell->RowNumber, c));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -283,7 +283,7 @@ const bool CHARTFORMATS::loadContent(BinProcessor& proc)
|
||||
}
|
||||
BaseObjectPtr CHARTFORMATS::find_label( _UINT16 link_id, unsigned short ex)
|
||||
{
|
||||
for (int i = 0 ; i < m_arATTACHEDLABEL.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arATTACHEDLABEL.size(); i++)
|
||||
{
|
||||
ATTACHEDLABEL * label = dynamic_cast<ATTACHEDLABEL *> (m_arATTACHEDLABEL[i].get());
|
||||
ObjectLink * obj_link = dynamic_cast<ObjectLink *> (label->m_ObjectLink.get());
|
||||
@ -306,7 +306,7 @@ std::vector<std::pair<int, BaseObjectPtr>> CHARTFORMATS::find_labels( _UINT16 li
|
||||
{
|
||||
std::vector<std::pair<int, BaseObjectPtr>> result;
|
||||
|
||||
for (int i = 0 ; i < m_arATTACHEDLABEL.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arATTACHEDLABEL.size(); i++)
|
||||
{
|
||||
ATTACHEDLABEL * label = dynamic_cast<ATTACHEDLABEL *> (m_arATTACHEDLABEL[i].get());
|
||||
ObjectLink * obj_link = dynamic_cast<ObjectLink *> (label->m_ObjectLink.get());
|
||||
|
||||
@ -77,10 +77,10 @@ const bool COLUMNS::loadContent(BinProcessor& proc)
|
||||
|
||||
for (int i = column_info->colFirst; i <= column_info->colLast; i++)
|
||||
{
|
||||
global_info_->sheet_size_info.back().customColumnsWidth.insert(std::pair<int, double>(i, column_info->coldx / 256.));
|
||||
global_info_->sheet_size_info.back().customColumnsWidth.insert(std::make_pair(i, column_info->coldx / 256.));
|
||||
//else if (def_ok)
|
||||
//{
|
||||
// global_info_->sheet_size_info.back().customColumnsWidth.insert(std::pair<int, double>(i, global_info_->sheet_size_info.back().defaultColumnWidth));
|
||||
// global_info_->sheet_size_info.back().customColumnsWidth.insert(std::make_pair(i, global_info_->sheet_size_info.back().defaultColumnWidth));
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ int CONDFMT12::serialize(std::wostream & stream)
|
||||
CP_XML_ATTR(L"sqref", condFmt->mainCF.sqref.strValue);
|
||||
//condition_id
|
||||
//condition_pos
|
||||
for (int i = 0; i < m_arCF12.size(); i++)
|
||||
for (size_t i = 0; i < m_arCF12.size(); i++)
|
||||
{
|
||||
if (m_arCF12[i] == NULL) continue;
|
||||
m_arCF12[i]->serialize(CP_XML_STREAM());
|
||||
|
||||
@ -120,7 +120,7 @@ const bool CONDFMTS::loadContent(BinProcessor& proc)
|
||||
count--;
|
||||
}
|
||||
|
||||
for (int i = 0 ; i < m_arCFEx.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arCFEx.size(); i++)
|
||||
{
|
||||
if (!m_arCFEx[i]) continue;
|
||||
|
||||
@ -129,7 +129,7 @@ const bool CONDFMTS::loadContent(BinProcessor& proc)
|
||||
{
|
||||
int ind_cf = cfEx->content.icf;
|
||||
|
||||
for (int j = 0 ; j < m_arCONDFMT.size(); j++)
|
||||
for (size_t j = 0 ; j < m_arCONDFMT.size(); j++)
|
||||
{
|
||||
CONDFMT * CONDFMT_ = dynamic_cast<CONDFMT *>(m_arCONDFMT[j].get());
|
||||
if (CONDFMT_/* && cfEx->fIsCF12 == 0*/)
|
||||
@ -166,7 +166,7 @@ int CONDFMTS::serialize(std::wostream & stream)
|
||||
{
|
||||
if (m_arCONDFMT.empty()) return 0;
|
||||
|
||||
for (int i = 0 ; i < m_arCONDFMT.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arCONDFMT.size(); i++)
|
||||
{
|
||||
if (!m_arCONDFMT[i]) continue;
|
||||
m_arCONDFMT[i]->serialize(stream);
|
||||
|
||||
@ -112,7 +112,7 @@ int CONDFMT::serialize(std::wostream & stream)
|
||||
CP_XML_ATTR(L"sqref", condFmt->sqref.strValue);
|
||||
//condition_id
|
||||
//condition_pos
|
||||
for (int i = 0; i < m_arCF.size(); i++)
|
||||
for (size_t i = 0; i < m_arCF.size(); i++)
|
||||
{
|
||||
if (m_arCF[i] == NULL) continue;
|
||||
|
||||
|
||||
@ -181,7 +181,7 @@ int CUSTOMVIEW::serialize(std::wostream & stream)
|
||||
else
|
||||
CP_XML_ATTR(L"state", L"split");
|
||||
}
|
||||
for (int i = 0; i < m_arSelection.size(); i++)
|
||||
for (size_t i = 0; i < m_arSelection.size(); i++)
|
||||
{
|
||||
if (m_arSelection[i] == NULL) continue;
|
||||
m_arSelection[i]->serialize(CP_XML_STREAM());
|
||||
|
||||
@ -31,9 +31,9 @@
|
||||
*/
|
||||
|
||||
#include "DREF.h"
|
||||
#include <Logic/Biff_records/DConName.h>
|
||||
#include <Logic/Biff_records/DConBin.h>
|
||||
#include <Logic/Biff_records/DConRef.h>
|
||||
#include "../Biff_records/DConName.h"
|
||||
#include "../Biff_records/DConBin.h"
|
||||
#include "../Biff_records/DConRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -116,11 +116,18 @@ int DREF::serialize(std::wostream & strm)
|
||||
}
|
||||
else if(ref)
|
||||
{
|
||||
ref->check_external();
|
||||
|
||||
CP_XML_ATTR(L"type", L"worksheet");
|
||||
CP_XML_NODE(L"worksheetSource")
|
||||
{
|
||||
CP_XML_ATTR(L"ref", ref->ref.toString());
|
||||
CP_XML_ATTR(L"sheet", ref->stFile);
|
||||
CP_XML_ATTR(L"sheet", ref->sheet_name);
|
||||
|
||||
if (ref->index_external >= 0)
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"extId" + std::to_wstring(ref->index_external + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <Logic/CompositeObject.h>
|
||||
#include "../CompositeObject.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -88,7 +88,7 @@ int DVAL::serialize(std::wostream & stream)
|
||||
|
||||
DVal * dval = dynamic_cast<DVal*>(m_DVal.get());
|
||||
|
||||
for (int i = 0 ; i < m_arDv.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arDv.size(); i++)
|
||||
{
|
||||
if (!m_arDv[i]) continue;
|
||||
|
||||
|
||||
@ -175,7 +175,7 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int FDB::serialize(std::wostream & strm, bool bSql)
|
||||
int FDB::serialize(std::wostream & strm, bool bSql, bool bDBB)
|
||||
{
|
||||
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
|
||||
SXFDBType* fdb_type = dynamic_cast<SXFDBType*>(m_SXFDBType.get());
|
||||
@ -227,7 +227,7 @@ int FDB::serialize(std::wostream & strm, bool bSql)
|
||||
Formula->serialize_attr(CP_GET_XML_NODE());
|
||||
}
|
||||
|
||||
if (m_arSRCSXOPER.empty() == false)
|
||||
if (!m_arSRCSXOPER.empty() && (bDBB || (!bDBB && bSql)) )
|
||||
{
|
||||
CP_XML_NODE(L"sharedItems")
|
||||
{
|
||||
@ -250,17 +250,26 @@ int FDB::serialize(std::wostream & strm, bool bSql)
|
||||
// }
|
||||
//}
|
||||
|
||||
if ((bDate & bNumber) || (bNumber & bString))
|
||||
if ((bDate & bNumber)/* || (bNumber & bString & !bEmpty & !bInteger)*/)
|
||||
{
|
||||
CP_XML_ATTR(L"containsSemiMixedTypes", 1);
|
||||
}
|
||||
else if (bDate & bString)
|
||||
else if ((bString && bDate) ||
|
||||
(bString && (bNumber || bInteger)) ||
|
||||
(!bString && bDate && bEmpty && (bNumber || bInteger)))
|
||||
{
|
||||
CP_XML_ATTR(L"containsMixedTypes", 1);
|
||||
|
||||
if (bString && !bNumber && bInteger) bNumber = true;
|
||||
else if (bString && bNumber && bInteger) bInteger = false;
|
||||
}
|
||||
else if (!bEmpty && !bString && !bBool)
|
||||
{
|
||||
CP_XML_ATTR(L"containsSemiMixedTypes", 0);
|
||||
if (bDate)
|
||||
{
|
||||
CP_XML_ATTR(L"containsMixedTypes", 1);
|
||||
}
|
||||
}
|
||||
if (bDate && ! (bNumber || bInteger || bString || bEmpty ))
|
||||
{
|
||||
@ -341,5 +350,25 @@ int FDB::serialize(std::wostream & strm, bool bSql)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FDB::serialize_record(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"r")
|
||||
{
|
||||
for (size_t i = 0; i < m_arSRCSXOPER.size(); i++)
|
||||
{
|
||||
SXOPER* oper = dynamic_cast<SXOPER*>(m_arSRCSXOPER[i].get());
|
||||
oper->serialize_record(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,7 +47,8 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm, bool bSql);
|
||||
int serialize(std::wostream & strm, bool bSql, bool bDBB);
|
||||
int serialize_record(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeFDB;
|
||||
|
||||
|
||||
@ -31,18 +31,22 @@
|
||||
*/
|
||||
|
||||
#include "FORMATTING.h"
|
||||
#include <Logic/Biff_records/Font.h>
|
||||
#include <Logic/Biff_records/Format.h>
|
||||
#include <Logic/Biff_records/DXF.h>
|
||||
#include <Logic/Biff_unions/STYLES.h>
|
||||
#include <Logic/Biff_records/Palette.h>
|
||||
#include <Logic/Biff_records/ClrtClient.h>
|
||||
#include <Logic/Biff_records/TableStyles.h>
|
||||
#include <Logic/Biff_records/Compat12.h>
|
||||
#include <Logic/Biff_unions/TABLESTYLES.h>
|
||||
#include <Logic/Biff_unions/XFS.h>
|
||||
#include <Logic/Biff_unions/THEME.h>
|
||||
#include "TABLESTYLES.h"
|
||||
#include "XFS.h"
|
||||
#include "THEME.h"
|
||||
#include "STYLES.h"
|
||||
|
||||
#include "../Biff_records/XF.h"
|
||||
#include "../Biff_records/Font.h"
|
||||
#include "../Biff_records/Format.h"
|
||||
#include "../Biff_records/DXF.h"
|
||||
#include "../Biff_records/Palette.h"
|
||||
#include "../Biff_records/ClrtClient.h"
|
||||
#include "../Biff_records/TableStyles.h"
|
||||
#include "../Biff_records/Compat12.h"
|
||||
|
||||
#include "../Biff_records/Style.h"
|
||||
#include "../Biff_records/StyleExt.h"
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -141,9 +145,53 @@ const bool FORMATTING::loadContent(BinProcessor& proc)
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
update_xfs();
|
||||
|
||||
return true;
|
||||
}
|
||||
void FORMATTING::update_xfs()
|
||||
{
|
||||
STYLES * st = dynamic_cast<STYLES*>(m_Styles.get());
|
||||
XFS * xfs = dynamic_cast<XFS*>(m_XFS.get());
|
||||
|
||||
if (!xfs) return;
|
||||
|
||||
//for (size_t i = 0; (st) && (i < st->m_arStyles.size()); i++)
|
||||
//{
|
||||
// XLS::Style * style = dynamic_cast<Style*>(st->m_arStyles[i].first.get());
|
||||
// XLS::StyleExt * styleExt = dynamic_cast<StyleExt*>(st->m_arStyles[i].second.get());
|
||||
//
|
||||
// if (styleExt && style)
|
||||
// {
|
||||
// if (styleExt->fBuiltIn && styleExt->xfProps.cprops > 0)
|
||||
// {
|
||||
// bool bFound = false;
|
||||
// for (size_t i = 0; i < xfs->m_arCellStyles.size(); i++)
|
||||
// {
|
||||
// XF* xf = dynamic_cast<XF*>(xfs->m_arCellStyles[i].get());
|
||||
|
||||
// if (xf->ind_xf == style->ixfe)
|
||||
// {
|
||||
// xf->style.Update(&styleExt->xfProps);
|
||||
// bFound = true;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// //for (size_t i = 0; !bFound && i < xfs->m_arCellXFs.size(); i++)
|
||||
// //{
|
||||
// // XF* xf = dynamic_cast<XF*>(xfs->m_arCellXFs[i].get());
|
||||
// // if (xf->ind_xf == style->ixfe)
|
||||
// // {
|
||||
// // xf->cell.Update(&styleExt->xfProps);
|
||||
// // bFound = true;
|
||||
// // break;
|
||||
// // }
|
||||
// //}
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
xfs->RegisterFillBorder();
|
||||
}
|
||||
void FORMATTING::concatinate(FORMATTING* ext)
|
||||
{
|
||||
if (ext->m_XFS)
|
||||
@ -180,7 +228,7 @@ int FORMATTING::serialize1(std::wostream & stream)
|
||||
CP_XML_NODE(L"numFmts")
|
||||
{
|
||||
CP_XML_ATTR(L"count", m_arFormats.size());
|
||||
for (int i = 0 ; i < m_arFormats.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arFormats.size(); i++)
|
||||
{
|
||||
m_arFormats[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
@ -191,7 +239,7 @@ int FORMATTING::serialize1(std::wostream & stream)
|
||||
CP_XML_NODE(L"fonts")
|
||||
{
|
||||
CP_XML_ATTR(L"count", m_arFonts.size());
|
||||
for (int i = 0 ; i < m_arFonts.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arFonts.size(); i++)
|
||||
{
|
||||
Font * font = dynamic_cast<Font*>(m_arFonts[i].get());
|
||||
std::map<int, FillInfoExt>::iterator it = global_info->fonts_color_ext.find(i);
|
||||
@ -225,7 +273,7 @@ int FORMATTING::serialize2(std::wostream & stream)
|
||||
{
|
||||
CP_XML_ATTR(L"count", global_info->cellStyleDxfs_count);
|
||||
|
||||
for (int i = 0 ; i < m_arDXF.size(); i++)
|
||||
for (size_t i = 0 ; i < m_arDXF.size(); i++)
|
||||
{
|
||||
m_arDXF[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
|
||||
@ -53,6 +53,7 @@ public:
|
||||
int serialize2(std::wostream & stream);
|
||||
|
||||
void concatinate(FORMATTING* ext);
|
||||
void update_xfs();
|
||||
|
||||
static const ElementType type = typeFORMATTING;
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ const bool FORMULA::loadContent(BinProcessor& proc)
|
||||
|
||||
if ((formula) && (formula->fShrFmla))
|
||||
{
|
||||
for (int i = 0; i < shared_formulas_locations_ref_.size(); i++)
|
||||
for (size_t i = 0; i < shared_formulas_locations_ref_.size(); i++)
|
||||
{
|
||||
if (shared_formulas_locations_ref_[i].inRange(location)) m_sharedIndex = i;
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ const bool LBL::loadContent(BinProcessor& proc)
|
||||
ar[ind_sheet] = value;
|
||||
//ar.push_back(value);
|
||||
|
||||
global_info_->mapDefineNames.insert(std::pair<std::wstring, std::vector<std::wstring>>(name, ar));
|
||||
global_info_->mapDefineNames.insert(std::make_pair(name, ar));
|
||||
}
|
||||
isSerialize = true;
|
||||
}
|
||||
@ -151,7 +151,7 @@ int LBL::serialize(std::wostream & stream)
|
||||
|
||||
if ((lbl->itab == 0) && (res = value.find(L"#REF!")) >= 0)
|
||||
{
|
||||
for (int i = 0 ; i < lbl->rgce.rgce.sequence.size(); i++)
|
||||
for (size_t i = 0 ; i < lbl->rgce.rgce.sequence.size(); i++)
|
||||
{
|
||||
PtgRef3d* ptg = dynamic_cast<PtgRef3d*>(lbl->rgce.rgce.sequence[i].get());
|
||||
if (ptg)
|
||||
|
||||
@ -69,109 +69,135 @@ PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString
|
||||
[SXADDLSXFILTERS12] *SXAddl_SXCView_SXDVerUpdInv *SXAddl_SXCView_SXDSXPIIvmb
|
||||
[SXAddl_SXCView_SXDVerUpdInv] SXAddl_SXCView_SXDEnd
|
||||
*/
|
||||
|
||||
const bool PIVOTADDL::loadContent(BinProcessor& proc)
|
||||
{
|
||||
if(!proc.mandatory<SXAddl_SXCView_SXDId>())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SXAddl_SXCView_SXDId = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVer10Info>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer10Info = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXAddl_SXCView_SXDVer12Info>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer12Info = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
count = proc.repeated<SXADDLCALCMEMBER>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLCALCMEMBER.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
int count = proc.repeated<SXAddl>(0, 0);
|
||||
|
||||
count = proc.repeated<SXADDLHIERARCHY>(0, 0);
|
||||
while(count > 0)
|
||||
for (std::list<BaseObjectPtr>::iterator it = elements_.begin(); it != elements_.end(); it++)
|
||||
{
|
||||
m_arSXADDLHIERARCHY.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
count = proc.repeated<SXADDLFIELD>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXADDLFIELD.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
SXAddl* addl = dynamic_cast<SXAddl*>(it->get());
|
||||
if (!addl) continue;
|
||||
SXAddl_SXCView_SXDTableStyleClient* p1 = dynamic_cast<SXAddl_SXCView_SXDTableStyleClient*>(addl->content.get());
|
||||
if (p1)
|
||||
{
|
||||
m_SXAddl_SXCView_SXDTableStyleClient = addl->content;
|
||||
continue;
|
||||
}
|
||||
SXAddl_SXCView_SXDVer10Info* p2 = dynamic_cast<SXAddl_SXCView_SXDVer10Info*>(addl->content.get());
|
||||
if (p2)
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer10Info = addl->content;
|
||||
continue;
|
||||
}
|
||||
SXAddl_SXCView_SXDVer12Info* p3 = dynamic_cast<SXAddl_SXCView_SXDVer12Info*>(addl->content.get());
|
||||
if (p3)
|
||||
{
|
||||
m_SXAddl_SXCView_SXDVer12Info = addl->content;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//if(!proc.mandatory<SXAddl_SXCView_SXDId>())
|
||||
//{
|
||||
// return false;
|
||||
//}
|
||||
//m_SXAddl_SXCView_SXDId = elements_.back();
|
||||
//elements_.pop_back();
|
||||
//
|
||||
//int count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
//
|
||||
//if (proc.optional<SXAddl_SXCView_SXDVer10Info>())
|
||||
//{
|
||||
// m_SXAddl_SXCView_SXDVer10Info = elements_.back();
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
//if (proc.optional<SXAddl_SXCView_SXDVer12Info>())
|
||||
//{
|
||||
// m_SXAddl_SXCView_SXDVer12Info = elements_.back();
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
//count = proc.repeated<SXADDLCALCMEMBER>(0, 0);
|
||||
//while(count > 0)
|
||||
//{
|
||||
// m_arSXADDLCALCMEMBER.push_back(elements_.front());
|
||||
// elements_.pop_front(); count--;
|
||||
//}
|
||||
|
||||
count = proc.repeated<UNKNOWNFRT>(0, 0);
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDTableStyleClient>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDTableStyleClient = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
//count = proc.repeated<SXADDLHIERARCHY>(0, 0);
|
||||
//while(count > 0)
|
||||
//{
|
||||
// m_arSXADDLHIERARCHY.push_back(elements_.front());
|
||||
// elements_.pop_front(); count--;
|
||||
//}
|
||||
//count = proc.repeated<SXADDLFIELD>(0, 0);
|
||||
//while(count > 0)
|
||||
//{
|
||||
// m_arSXADDLFIELD.push_back(elements_.front());
|
||||
// elements_.pop_front(); count--;
|
||||
//}
|
||||
|
||||
if(proc.optional<SXAddl_SXCView_SXDCompactRwHdr>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDCompactRwHdr = elements_.back();
|
||||
elements_.pop_back();
|
||||
//count = proc.repeated<UNKNOWNFRT>(0, 0);
|
||||
//
|
||||
//if (proc.optional<SXAddl_SXCView_SXDTableStyleClient>())
|
||||
//{
|
||||
// m_SXAddl_SXCView_SXDTableStyleClient = elements_.back();
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
if(proc.optional<SXAddl_SXCView_SXDCompactColHdr>())
|
||||
{
|
||||
m_SXAddl_SXCView_SXDCompactColHdr = elements_.back();
|
||||
elements_.pop_back();
|
||||
//if(proc.optional<SXAddl_SXCView_SXDCompactRwHdr>())
|
||||
//{
|
||||
// m_SXAddl_SXCView_SXDCompactRwHdr = elements_.back();
|
||||
// elements_.pop_back();
|
||||
|
||||
count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
}
|
||||
// count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
//}
|
||||
//if(proc.optional<SXAddl_SXCView_SXDCompactColHdr>())
|
||||
//{
|
||||
// m_SXAddl_SXCView_SXDCompactColHdr = elements_.back();
|
||||
// elements_.pop_back();
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.back());
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLCONDFMTS>())
|
||||
{
|
||||
m_SXADDLCONDFMTS = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SXADDLSXFILTERS12>())
|
||||
{
|
||||
m_SXAddl_SXADDLSXFILTERS12 = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
count = proc.repeated<SXAddl_SXCView_SXDVerUpdInv>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
// count = proc.repeated<Continue_SxaddlSxString>(0, 0);
|
||||
//}
|
||||
|
||||
count = proc.repeated<SXAddl_SXCView_SXDSXPIIvmb>(0, 0);
|
||||
while(count > 0)
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDSXPIIvmb.push_back(elements_.front());
|
||||
elements_.pop_front(); count--;
|
||||
}
|
||||
//if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
//{
|
||||
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.back());
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
//if (proc.optional<SXADDLCONDFMTS>())
|
||||
//{
|
||||
// m_SXADDLCONDFMTS = elements_.back();
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
//if (proc.optional<SXADDLSXFILTERS12>())
|
||||
//{
|
||||
// m_SXAddl_SXADDLSXFILTERS12 = elements_.back();
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
//count = proc.repeated<SXAddl_SXCView_SXDVerUpdInv>(0, 0);
|
||||
//while(count > 0)
|
||||
//{
|
||||
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
// elements_.pop_front(); count--;
|
||||
//}
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
{
|
||||
m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
elements_.pop_front();
|
||||
}
|
||||
//count = proc.repeated<SXAddl_SXCView_SXDSXPIIvmb>(0, 0);
|
||||
//while(count > 0)
|
||||
//{
|
||||
// m_arSXAddl_SXCView_SXDSXPIIvmb.push_back(elements_.front());
|
||||
// elements_.pop_front(); count--;
|
||||
//}
|
||||
|
||||
if (proc.optional<SXAddl_SXCView_SXDEnd>())
|
||||
{
|
||||
elements_.pop_back();
|
||||
}
|
||||
//if (proc.optional<SXAddl_SXCView_SXDVerUpdInv>())
|
||||
//{
|
||||
// m_arSXAddl_SXCView_SXDVerUpdInv.push_back(elements_.front());
|
||||
// elements_.pop_front();
|
||||
//}
|
||||
|
||||
//if (proc.optional<SXAddl_SXCView_SXDEnd>())
|
||||
//{
|
||||
// elements_.pop_back();
|
||||
//}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -49,21 +49,21 @@ public:
|
||||
|
||||
static const ElementType type = typePIVOTADDL;
|
||||
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDId;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDVer10Info;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDVer12Info;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDId;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDVer10Info;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDVer12Info;
|
||||
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDCompactRwHdr;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDCompactColHdr;
|
||||
BaseObjectPtr m_SXAddl_SXADDLSXFILTERS12;
|
||||
BaseObjectPtr m_SXADDLCONDFMTS;
|
||||
BaseObjectPtr m_SXAddl_SXCView_SXDTableStyleClient;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDCompactRwHdr;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDCompactColHdr;
|
||||
BiffStructurePtr m_SXAddl_SXADDLSXFILTERS12;
|
||||
BiffStructurePtr m_SXADDLCONDFMTS;
|
||||
BiffStructurePtr m_SXAddl_SXCView_SXDTableStyleClient;
|
||||
|
||||
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDVerUpdInv;
|
||||
std::vector<BaseObjectPtr> m_arSXAddl_SXCView_SXDSXPIIvmb;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLFIELD;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLHIERARCHY;
|
||||
std::vector<BaseObjectPtr> m_arSXADDLCALCMEMBER;
|
||||
std::vector<BiffStructurePtr> m_arSXAddl_SXCView_SXDVerUpdInv;
|
||||
std::vector<BiffStructurePtr> m_arSXAddl_SXCView_SXDSXPIIvmb;
|
||||
std::vector<BiffStructurePtr> m_arSXADDLFIELD;
|
||||
std::vector<BiffStructurePtr> m_arSXADDLHIERARCHY;
|
||||
std::vector<BiffStructurePtr> m_arSXADDLCALCMEMBER;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -98,8 +98,8 @@ 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;
|
||||
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCacheStream.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCacheStream.end()) return 0;
|
||||
|
||||
global_info_->idPivotCache = streamId->idStm;
|
||||
|
||||
@ -111,7 +111,15 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
|
||||
if (!db || !db_ex)return 0;
|
||||
|
||||
bool bSql = false;
|
||||
if (pivot_cache->m_arFDB.empty() && pivot_cache->m_arSXFORMULA.empty())
|
||||
{
|
||||
global_info_->mapPivotCacheStream.erase(pFind);
|
||||
return 0;
|
||||
}
|
||||
global_info_->mapPivotCacheIndex.insert(std::make_pair(global_info_->idPivotCache, global_info_->mapPivotCacheIndex.size()));
|
||||
|
||||
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
|
||||
bool bSql = src ? src->bSql : false;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
@ -120,7 +128,11 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
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)
|
||||
if (pivot_cache->m_arDBB.empty() && bSql)
|
||||
{
|
||||
CP_XML_ATTR(L"saveData", 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"rId1" );
|
||||
}
|
||||
@ -128,17 +140,13 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
|
||||
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
|
||||
CP_XML_ATTR(L"recordCount", db->crdbdb);
|
||||
//createdVersion="1"
|
||||
//refreshedVersion="2"
|
||||
//upgradeOnRefresh="1">
|
||||
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
|
||||
|
||||
if (src)
|
||||
{
|
||||
bSql = src->bSql;
|
||||
src->serialize(CP_XML_STREAM());
|
||||
}
|
||||
|
||||
if (pivot_cache->m_arFDB.empty() == false)
|
||||
if (!pivot_cache->m_arFDB.empty())
|
||||
{
|
||||
CP_XML_NODE(L"cacheFields")
|
||||
{
|
||||
@ -149,11 +157,11 @@ int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
FDB *field = dynamic_cast<FDB *>(pivot_cache->m_arFDB[i].get());
|
||||
if (!field) continue;
|
||||
|
||||
field->serialize(CP_XML_STREAM(), bSql);
|
||||
field->serialize(CP_XML_STREAM(), bSql, !pivot_cache->m_arDBB.empty());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pivot_cache->m_arSXFORMULA.empty() == false)
|
||||
if (!pivot_cache->m_arSXFORMULA.empty())
|
||||
{
|
||||
CP_XML_NODE(L"calculatedItems")
|
||||
{
|
||||
@ -176,13 +184,16 @@ 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;
|
||||
std::unordered_map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCacheStream.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCacheStream.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;
|
||||
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
|
||||
bool bSql = src ? src->bSql : false;
|
||||
|
||||
if (pivot_cache->m_arDBB.empty() && bSql) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
@ -191,11 +202,22 @@ int PIVOTCACHEDEFINITION::serialize_records(std::wostream & strm)
|
||||
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++)
|
||||
if (!pivot_cache->m_arDBB.empty())
|
||||
{
|
||||
pivot_cache->m_arDBB[i]->serialize(CP_XML_STREAM());
|
||||
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());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CP_XML_ATTR(L"count", pivot_cache->m_arFDB.size());
|
||||
for (size_t i = 0; i < pivot_cache->m_arFDB.size(); i++)
|
||||
{
|
||||
FDB* fdb = dynamic_cast<FDB*>(pivot_cache->m_arFDB[i].get());
|
||||
fdb->serialize_record(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,9 +31,10 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTEX.h"
|
||||
#include <Logic/Biff_records/SXEx.h>
|
||||
#include <Logic/Biff_unions/PIVOTSELECT.h>
|
||||
#include <Logic/Biff_unions/PIVOTFORMAT.h>
|
||||
#include "PIVOTSELECT.h"
|
||||
#include "PIVOTFORMAT.h"
|
||||
|
||||
#include "../Biff_records/SXEx.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -54,7 +55,6 @@ BaseObjectPtr PIVOTEX::clone()
|
||||
return BaseObjectPtr(new PIVOTEX(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTEX = SXEx *PIVOTSELECT *PIVOTFORMAT
|
||||
const bool PIVOTEX::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -62,9 +62,21 @@ const bool PIVOTEX::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SXEx = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
int count = 0;
|
||||
count = proc.repeated<PIVOTSELECT>(0, 0);
|
||||
while(count--)
|
||||
{
|
||||
m_arPIVOTSELECT.push_back(elements_.front()); elements_.pop_front();
|
||||
}
|
||||
|
||||
count = proc.repeated<PIVOTFORMAT>(0, 0);
|
||||
while(count--)
|
||||
{
|
||||
m_arPIVOTFORMAT.push_back(elements_.front()); elements_.pop_front();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of PIVOTEX union of records
|
||||
class PIVOTEX: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTEX)
|
||||
@ -49,7 +47,12 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTEX;
|
||||
static const ElementType type = typePIVOTEX;
|
||||
|
||||
BaseObjectPtr m_SXEx;
|
||||
std::vector<BaseObjectPtr> m_arPIVOTSELECT;
|
||||
std::vector<BaseObjectPtr> m_arPIVOTFORMAT;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,9 +31,10 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTFORMAT.h"
|
||||
#include <Logic/Biff_records/SxFormat.h>
|
||||
#include <Logic/Biff_unions/PIVOTRULE.h>
|
||||
#include <Logic/Biff_records/SxDXF.h>
|
||||
#include "PIVOTRULE.h"
|
||||
|
||||
#include "../Biff_records/SxFormat.h"
|
||||
#include "../Biff_records/SxDXF.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -54,7 +55,6 @@ BaseObjectPtr PIVOTFORMAT::clone()
|
||||
return BaseObjectPtr(new PIVOTFORMAT(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTFORMAT = SxFormat PIVOTRULE [SxDXF]
|
||||
const bool PIVOTFORMAT::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -62,11 +62,18 @@ const bool PIVOTFORMAT::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SxFormat = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
if (proc.mandatory<PIVOTRULE>())
|
||||
{
|
||||
m_PIVOTRULE = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
if (proc.optional<SxDXF>())
|
||||
{
|
||||
m_SxDXF = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of PIVOTFORMAT union of records
|
||||
class PIVOTFORMAT: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTFORMAT)
|
||||
@ -49,7 +47,11 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTFORMAT;
|
||||
static const ElementType type = typePIVOTFORMAT;
|
||||
|
||||
BaseObjectPtr m_SxFormat;
|
||||
BaseObjectPtr m_PIVOTRULE;
|
||||
BaseObjectPtr m_SxDXF;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,8 +31,8 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTFRT.h"
|
||||
#include <Logic/Biff_unions/PIVOTFRT9.h>
|
||||
#include <Logic/Biff_unions/PIVOTADDL.h>
|
||||
#include "PIVOTFRT9.h"
|
||||
#include "PIVOTADDL.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -99,7 +99,7 @@ int PIVOTVD::serialize(std::wostream & strm)
|
||||
|
||||
if (vd_ex->ifmt > 0)
|
||||
{
|
||||
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt);
|
||||
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt != 44 ? vd_ex->ifmt : 0);
|
||||
}
|
||||
|
||||
if (vd->stName.value().empty() == false)
|
||||
|
||||
@ -38,16 +38,25 @@
|
||||
#include "PIVOTPI.h"
|
||||
#include "PIVOTLI.h"
|
||||
#include "PIVOTEX.h"
|
||||
#include "PIVOTADDL.h"
|
||||
#include "PIVOTFORMAT.h"
|
||||
#include "PIVOTFRT9.h"
|
||||
|
||||
#include "../Biff_records/SXDI.h"
|
||||
#include "../Biff_records/SxView.h"
|
||||
#include "../Biff_records/SXAddl.h"
|
||||
#include "../Biff_records/SXEx.h"
|
||||
#include "../Biff_records/SxFormat.h"
|
||||
#include "../Biff_records/SxDXF.h"
|
||||
#include "../Biff_records/SXViewEx9.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
PIVOTVIEW::PIVOTVIEW()
|
||||
{
|
||||
indexCache = -1;
|
||||
indexStream = -1;
|
||||
indexCache = -1;
|
||||
}
|
||||
|
||||
PIVOTVIEW::~PIVOTVIEW()
|
||||
@ -62,6 +71,8 @@ BaseObjectPtr PIVOTVIEW::clone()
|
||||
// PIVOTVIEW = PIVOTCORE [PIVOTFRT]
|
||||
const bool PIVOTVIEW::loadContent(BinProcessor& proc)
|
||||
{
|
||||
global_info_ = proc.getGlobalWorkbookInfo();
|
||||
|
||||
if(!proc.mandatory<PIVOTCORE>())
|
||||
{
|
||||
return false;
|
||||
@ -95,8 +106,24 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
if (!view) return 0;
|
||||
|
||||
PIVOTFRT* frt = dynamic_cast<PIVOTFRT*>(m_PIVOTFRT.get());
|
||||
PIVOTEX* pivot_ex = dynamic_cast<PIVOTEX*>(core->m_PIVOTEX.get());
|
||||
|
||||
indexCache = view->iCache;
|
||||
PIVOTADDL* addls = frt ? dynamic_cast<PIVOTADDL*>(frt->m_PIVOTADDL.get()) : NULL;
|
||||
PIVOTFRT9* frt9 = frt ? dynamic_cast<PIVOTFRT9*>(frt->m_PIVOTFRT9.get()) : NULL;
|
||||
|
||||
SXEx *view_ex = pivot_ex ? dynamic_cast<SXEx*>(pivot_ex->m_SXEx.get()) : NULL;
|
||||
SXViewEx9 *view_ex9 = pivot_ex ? dynamic_cast<SXViewEx9*>(frt9->m_SXViewEx9.get()) : NULL;
|
||||
SXAddl_SXCView_SXDVer10Info *view_ex10 = addls ? dynamic_cast<SXAddl_SXCView_SXDVer10Info*>(addls->m_SXAddl_SXCView_SXDVer10Info.get()) : NULL;
|
||||
SXAddl_SXCView_SXDVer12Info *view_ex12 = addls ? dynamic_cast<SXAddl_SXCView_SXDVer12Info*>(addls->m_SXAddl_SXCView_SXDVer12Info.get()) : NULL;
|
||||
|
||||
indexStream = global_info_->arPivotCacheStream[view->iCache];
|
||||
|
||||
std::map<int, int>::iterator pFindIndex = global_info_->mapPivotCacheIndex.find(indexStream);
|
||||
|
||||
if (pFindIndex == global_info_->mapPivotCacheIndex.end())
|
||||
return 0;
|
||||
|
||||
indexCache = pFindIndex->second;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
@ -105,8 +132,11 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
|
||||
CP_XML_ATTR(L"name", view->stTable.value());
|
||||
CP_XML_ATTR(L"cacheId", view->iCache);
|
||||
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
|
||||
CP_XML_ATTR(L"cacheId", indexCache);
|
||||
if (view->sxaxis4Data.bRw)
|
||||
{
|
||||
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
|
||||
}
|
||||
CP_XML_ATTR(L"applyNumberFormats", view->fAtrNum);
|
||||
CP_XML_ATTR(L"applyBorderFormats", view->fAtrBdr);
|
||||
CP_XML_ATTR(L"applyFontFormats", view->fAtrFnt);
|
||||
@ -117,15 +147,39 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_ATTR(L"dataCaption", view->stData.value());
|
||||
}
|
||||
CP_XML_ATTR(L"asteriskTotals", 1);
|
||||
CP_XML_ATTR(L"showMemberPropertyTips", 0);
|
||||
CP_XML_ATTR(L"useAutoFormatting", view->fAutoFormat);
|
||||
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
|
||||
CP_XML_ATTR(L"itemPrintTitles", 1);
|
||||
CP_XML_ATTR(L"indent", 0);
|
||||
CP_XML_ATTR(L"compact", 0);
|
||||
CP_XML_ATTR(L"compactData", 0);
|
||||
CP_XML_ATTR(L"gridDropZones", 1);
|
||||
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
|
||||
if (view_ex9)
|
||||
{
|
||||
CP_XML_ATTR(L"itemPrintTitles", view_ex9->fPrintTitles);
|
||||
CP_XML_ATTR(L"outline", view_ex9->fLineMode);
|
||||
|
||||
CP_XML_ATTR(L"outlineData", view_ex12 ? view_ex12->fOutlineData : view_ex9->fLineMode);
|
||||
}
|
||||
CP_XML_ATTR(L"asteriskTotals", view_ex10 ? view_ex10->fNotVisualTotals : 0);
|
||||
|
||||
if (view_ex12)
|
||||
{
|
||||
CP_XML_ATTR(L"indent", view_ex12->cIndentInc );
|
||||
CP_XML_ATTR(L"published", view_ex12->fPublished);
|
||||
CP_XML_ATTR(L"compact", view_ex12->fCompactData);
|
||||
CP_XML_ATTR(L"compactData", view_ex12->fCompactData);
|
||||
|
||||
CP_XML_ATTR(L"gridDropZones", !view_ex12->fNewDropZones);
|
||||
CP_XML_ATTR(L"showDrill", !view_ex12->fHideDrillIndicators);
|
||||
CP_XML_ATTR(L"printDrill", view_ex12->fPrintDrillIndicators);
|
||||
}
|
||||
|
||||
if (view_ex)
|
||||
{
|
||||
if (!view_ex->fEnableWizard) CP_XML_ATTR(L"enableWizard", 0);
|
||||
if (!view_ex->fEnableDrilldown) CP_XML_ATTR(L"enableDrill", 0);
|
||||
//CP_XML_ATTR(L"disableFieldList", !view_ex->fEnableFieldDialog);//enableFieldPropert
|
||||
|
||||
if (!view_ex->stError.value().empty())
|
||||
CP_XML_ATTR(L"errorCaption", view_ex->stError.value());
|
||||
}
|
||||
|
||||
CP_XML_NODE(L"location")
|
||||
{
|
||||
@ -133,54 +187,66 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
CP_XML_ATTR(L"firstHeaderRow", view->rwFirstHead - view->ref.rowFirst );
|
||||
CP_XML_ATTR(L"firstDataRow", view->rwFirstData - view->ref.rowFirst);
|
||||
CP_XML_ATTR(L"firstDataCol", view->colFirstData - view->ref.columnFirst);
|
||||
CP_XML_ATTR(L"rowPageCount", 1);
|
||||
CP_XML_ATTR(L"colPageCount", 1);
|
||||
}
|
||||
CP_XML_NODE(L"pivotFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDim);//Sxvd
|
||||
for (size_t i = 0; i < core->m_arPIVOTVD.size(); i++)
|
||||
|
||||
if (view->cDimPg > 0)
|
||||
{
|
||||
core->m_arPIVOTVD[i]->serialize(CP_XML_STREAM());
|
||||
CP_XML_ATTR(L"rowPageCount", view->cDimPg);
|
||||
CP_XML_ATTR(L"colPageCount", 1);
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTIVD.size() >= 1)
|
||||
if (!core->m_arPIVOTVD.empty())
|
||||
{
|
||||
CP_XML_NODE(L"pivotFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDim);//Sxvd
|
||||
for (size_t i = 0; i < core->m_arPIVOTVD.size(); i++)
|
||||
{
|
||||
core->m_arPIVOTVD[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
int index_ivd = 0;
|
||||
int index_tli = 0;
|
||||
|
||||
if (view->cDimRw > 0 && index_ivd < core->m_arPIVOTIVD.size())
|
||||
{
|
||||
CP_XML_NODE(L"rowFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimRw);
|
||||
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[0].get());
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[index_ivd].get());
|
||||
ivd->serialize(CP_XML_STREAM());
|
||||
index_ivd++;
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTLI.size() >= 1)//0 or 2
|
||||
if (view->cRw > 0 && index_tli < core->m_arPIVOTLI.size())
|
||||
{
|
||||
CP_XML_NODE(L"rowItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cRw);
|
||||
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[0].get());
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[index_tli].get());
|
||||
line->serialize(CP_XML_STREAM());
|
||||
index_tli++;
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTIVD.size() == 2)//0 or 2
|
||||
if (view->cDimCol > 0 && index_ivd < core->m_arPIVOTIVD.size())
|
||||
{
|
||||
CP_XML_NODE(L"colFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimCol);
|
||||
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[1].get());
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[index_ivd].get());
|
||||
ivd->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTLI.size() == 2)//0 or 2
|
||||
if (view->cCol > 0 && index_tli < core->m_arPIVOTLI.size())
|
||||
{
|
||||
CP_XML_NODE(L"colItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cCol);
|
||||
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[1].get());
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[index_tli].get());
|
||||
line->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
@ -193,7 +259,7 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
core->m_PIVOTPI->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arSXDI.empty() == false)
|
||||
if (!core->m_arSXDI.empty())
|
||||
{
|
||||
CP_XML_NODE(L"dataFields")
|
||||
{
|
||||
@ -204,14 +270,23 @@ int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
}
|
||||
}
|
||||
}
|
||||
//CP_XML_NODE(L"pivotTableStyleInfo")
|
||||
//{
|
||||
// CP_XML_ATTR(L"showRowHeaders", 1);
|
||||
// CP_XML_ATTR(L"showColHeaders", 1);
|
||||
// CP_XML_ATTR(L"showRowStripes", 0);
|
||||
// CP_XML_ATTR(L"showColStripes", 0);
|
||||
// CP_XML_ATTR(L"showLastColumn", 1);
|
||||
//}
|
||||
|
||||
|
||||
if ((addls) && (addls->m_SXAddl_SXCView_SXDTableStyleClient))
|
||||
{
|
||||
SXAddl_SXCView_SXDTableStyleClient* table_style = dynamic_cast<SXAddl_SXCView_SXDTableStyleClient*>(addls->m_SXAddl_SXCView_SXDTableStyleClient.get());
|
||||
CP_XML_NODE(L"pivotTableStyleInfo")
|
||||
{
|
||||
if (!table_style->stName.value().empty())
|
||||
CP_XML_ATTR(L"name", table_style->stName.value());
|
||||
|
||||
CP_XML_ATTR(L"showRowHeaders", table_style->fRowHeaders);
|
||||
CP_XML_ATTR(L"showColHeaders", table_style->fColumnHeaders);
|
||||
CP_XML_ATTR(L"showRowStripes", table_style->fRowStrips);
|
||||
CP_XML_ATTR(L"showColStripes", table_style->fColumnStrips);
|
||||
CP_XML_ATTR(L"showLastColumn", table_style->fLastColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user