Commit 8aa53255 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlFormat - fix присланного файла (china-price.xls), созданного не по стандарту...

XlFormat - fix присланного файла (china-price.xls), созданного не по стандарту (перепутаны поля) + НастройкиПросмотра workbook

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@67969 954022d7-b5bf-4e40-9824-e11837661b57
parent 9ea63082
...@@ -37,7 +37,7 @@ CFRecordPtr CFStreamCacheReader::getNextRecord(const CFRecordType::TypeId desira ...@@ -37,7 +37,7 @@ CFRecordPtr CFStreamCacheReader::getNextRecord(const CFRecordType::TypeId desira
{ {
CFRecordType::TypeString rec_name = records_cache.front()->getTypeString(); CFRecordType::TypeString rec_name = records_cache.front()->getTypeString();
//Log::warning(rec_name); Log::warning(rec_name);
if (desirable_type == rt_MsoDrawingGroup) // rt_MsoDrawingGroup + rt_Continue if (desirable_type == rt_MsoDrawingGroup) // rt_MsoDrawingGroup + rt_Continue
{ {
......
...@@ -395,7 +395,7 @@ int Font::serialize_properties(std::wostream & stream, bool rPr) ...@@ -395,7 +395,7 @@ int Font::serialize_properties(std::wostream & stream, bool rPr)
} }
} }
if (dyHeight.value()) if ((dyHeight.value()) && (dyHeight > 0))
{ {
CP_XML_NODE(L"sz") CP_XML_NODE(L"sz")
{ {
......
...@@ -39,14 +39,35 @@ void Window1::readFields(CFRecord& record) ...@@ -39,14 +39,35 @@ void Window1::readFields(CFRecord& record)
{ {
unsigned short flags; unsigned short flags;
record >> xWn >> yWn >> dxWn >> dyWn >> flags >> itabCur >> itabFirst >> ctabSel >> wTabRatio; record >> xWn >> yWn >> dxWn >> dyWn >> flags >> itabCur >> itabFirst >> ctabSel >> wTabRatio;
fHidden = GETBIT(flags, 0);
fIconic = GETBIT(flags, 1); fHidden = GETBIT(flags, 0);
fVeryHidden = GETBIT(flags, 2); fIconic = GETBIT(flags, 1);
fDspHScroll = GETBIT(flags, 3); fVeryHidden = GETBIT(flags, 2);
fDspVScroll = GETBIT(flags, 4); fDspHScroll = GETBIT(flags, 3);
fBotAdornment = GETBIT(flags, 5); fDspVScroll = GETBIT(flags, 4);
fNoAFDateGroup = GETBIT(flags, 6); fBotAdornment = GETBIT(flags, 5);
fNoAFDateGroup = GETBIT(flags, 6);
} }
int Window1::serialize(std::wostream & stream)
{
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"workbookView")
{
CP_XML_ATTR(L"activeTab" , itabCur);
CP_XML_ATTR(L"firstSheet" , itabFirst);
CP_XML_ATTR(L"tabRatio" , wTabRatio);
CP_XML_ATTR(L"windowHeight" , dyWn);
CP_XML_ATTR(L"windowWidth" , dxWn);
CP_XML_ATTR(L"yWindow" , yWn);
CP_XML_ATTR(L"xWindow" , xWn);
}
}
return 0;
}
} // namespace XLS } // namespace XLS
...@@ -22,6 +22,7 @@ public: ...@@ -22,6 +22,7 @@ public:
static const ElementType type = typeWindow1; static const ElementType type = typeWindow1;
int serialize(std::wostream & stream);
//----------------------------- //-----------------------------
BIFF_SHORT xWn; BIFF_SHORT xWn;
BIFF_SHORT yWn; BIFF_SHORT yWn;
......
...@@ -2,13 +2,15 @@ ...@@ -2,13 +2,15 @@
#include "FORMATTING.h" #include "FORMATTING.h"
#include <Logic/Biff_records/Font.h> #include <Logic/Biff_records/Font.h>
#include <Logic/Biff_records/Format.h> #include <Logic/Biff_records/Format.h>
#include <Logic/Biff_unions/XFS.h>
#include <Logic/Biff_records/DXF.h> #include <Logic/Biff_records/DXF.h>
#include <Logic/Biff_unions/STYLES.h> #include <Logic/Biff_unions/STYLES.h>
#include <Logic/Biff_records/Palette.h> #include <Logic/Biff_records/Palette.h>
#include <Logic/Biff_records/ClrtClient.h> #include <Logic/Biff_records/ClrtClient.h>
#include <Logic/Biff_records/TableStyles.h> #include <Logic/Biff_records/TableStyles.h>
#include <Logic/Biff_records/Compat12.h>
#include <Logic/Biff_unions/TABLESTYLES.h> #include <Logic/Biff_unions/TABLESTYLES.h>
#include <Logic/Biff_unions/XFS.h>
#include <Logic/Biff_unions/THEME.h>
namespace XLS namespace XLS
{ {
...@@ -76,6 +78,12 @@ const bool FORMATTING::loadContent(BinProcessor& proc) ...@@ -76,6 +78,12 @@ const bool FORMATTING::loadContent(BinProcessor& proc)
} }
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
proc.optional<TABLESTYLES>(); proc.optional<TABLESTYLES>();
if (proc.optional<THEME>()) // - china_price.xls
{
}
proc.optional<Compat12>(); //china_price.xls
if (proc.optional<Palette>()) if (proc.optional<Palette>())
{ {
m_Palette = elements_.back(); m_Palette = elements_.back();
......
...@@ -154,14 +154,29 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc) ...@@ -154,14 +154,29 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.optional<ObNoMacros>(); proc.optional<ObNoMacros>();
proc.optional<CodeName>(); proc.optional<CodeName>();
proc.optional<FNGROUPS>(); proc.optional<FNGROUPS>();
proc.repeated<Lbl>(0, 0); proc.repeated<Lbl>(0, 0);
proc.optional<OleObjectSize>(); proc.optional<OleObjectSize>();
proc.mandatory<PROTECTION>(); proc.mandatory<PROTECTION>();
proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround (Window1 must exist at least once according to [MS-XLS]) count = proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround (Window1 must exist at least once according to [MS-XLS])
while(count > 0)
{
m_arWindow1.insert(m_arWindow1.begin(), elements_.back());
elements_.pop_back();
count--;
}
proc.mandatory<Backup>(); proc.mandatory<Backup>();
proc.mandatory<HideObj>(); proc.mandatory<HideObj>();
proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround count = proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround
while(count > 0)
{
m_arWindow1.insert(m_arWindow1.begin(), elements_.back());
elements_.pop_back();
count--;
}
proc.mandatory<Date1904>(); proc.mandatory<Date1904>();
proc.mandatory<CalcPrecision>(); proc.mandatory<CalcPrecision>();
...@@ -185,6 +200,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc) ...@@ -185,6 +200,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.optional<RecalcId>(); // OpenOffice Calc stored files workaround proc.optional<RecalcId>(); // OpenOffice Calc stored files workaround
proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround
if (proc.mandatory<FORMATTING>()) if (proc.mandatory<FORMATTING>())
{ {
m_Formating = elements_.back(); m_Formating = elements_.back();
...@@ -233,6 +249,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc) ...@@ -233,6 +249,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.repeated<RTD>(0, 0); proc.repeated<RTD>(0, 0);
proc.optional<RecalcId>(); proc.optional<RecalcId>();
proc.optional<Date1904>(); //china-price.xls
count = proc.repeated<HFPicture>(0, 0); count = proc.repeated<HFPicture>(0, 0);
while(count > 0) while(count > 0)
......
...@@ -35,6 +35,7 @@ public: ...@@ -35,6 +35,7 @@ public:
std::vector<BaseObjectPtr> m_arHFPicture; std::vector<BaseObjectPtr> m_arHFPicture;
std::vector<BaseObjectPtr> m_arLBL; std::vector<BaseObjectPtr> m_arLBL;
std::vector<BaseObjectPtr> m_arMSODRAWINGGROUP; std::vector<BaseObjectPtr> m_arMSODRAWINGGROUP;
std::vector<BaseObjectPtr> m_arWindow1;
unsigned short code_page_; unsigned short code_page_;
}; };
......
...@@ -338,6 +338,10 @@ void XlsConverter::convert(XLS::GlobalsSubstream* global) ...@@ -338,6 +338,10 @@ void XlsConverter::convert(XLS::GlobalsSubstream* global)
{ {
convert((XLS::MSODRAWINGGROUP*)global->m_arMSODRAWINGGROUP[i].get()); convert((XLS::MSODRAWINGGROUP*)global->m_arMSODRAWINGGROUP[i].get());
} }
for (int i = 0 ; i < global->m_arWindow1.size(); i++)
{
global->m_arWindow1[i]->serialize(xlsx_context->workbook_views());
}
} }
typedef boost::unordered_map<XLS::FillInfo, int> mapFillInfo; typedef boost::unordered_map<XLS::FillInfo, int> mapFillInfo;
...@@ -514,7 +518,12 @@ void XlsConverter::convert(XLS::LBL * def_name) ...@@ -514,7 +518,12 @@ void XlsConverter::convert(XLS::LBL * def_name)
def_name->serialize(xlsx_context->defined_names()); def_name->serialize(xlsx_context->defined_names());
} }
void XlsConverter::convert(XLS::WINDOW * window)
{
if (window == NULL) return;
//window->serialize(xlsx_context->worksheet_view());
}
void XlsConverter::convert(XLS::THEME* theme) void XlsConverter::convert(XLS::THEME* theme)
{ {
if (theme == NULL) return; if (theme == NULL) return;
......
...@@ -30,6 +30,7 @@ namespace XLS ...@@ -30,6 +30,7 @@ namespace XLS
class GlobalsSubstream; class GlobalsSubstream;
class ChartSheetSubstream; class ChartSheetSubstream;
class WINDOW;
class FORMATTING; class FORMATTING;
class THEME; class THEME;
class SHAREDSTRINGS; class SHAREDSTRINGS;
...@@ -79,6 +80,7 @@ public: ...@@ -79,6 +80,7 @@ public:
void convert(XLS::OBJECTS * objects); void convert(XLS::OBJECTS * objects);
void convert(XLS::MSODRAWINGGROUP * mso_drawing); void convert(XLS::MSODRAWINGGROUP * mso_drawing);
void convert(XLS::TxO * text_obj); void convert(XLS::TxO * text_obj);
void convert(XLS::WINDOW * window);
void convert(ODRAW::OfficeArtRecord * art); void convert(ODRAW::OfficeArtRecord * art);
void convert(ODRAW::OfficeArtBStoreContainer* art_bstore); void convert(ODRAW::OfficeArtBStoreContainer* art_bstore);
......
...@@ -180,6 +180,11 @@ void xlsx_conversion_context::end_document() ...@@ -180,6 +180,11 @@ void xlsx_conversion_context::end_document()
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main"); CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships"); CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_NODE(L"bookViews")
{
CP_XML_STREAM() << xlsx_workbook_views_.str();
}
CP_XML_NODE(L"sheets") CP_XML_NODE(L"sheets")
{ {
CP_XML_STREAM() << workbook_content.str(); CP_XML_STREAM() << workbook_content.str();
......
...@@ -37,6 +37,7 @@ public: ...@@ -37,6 +37,7 @@ public:
std::wostream & shared_strings() { return xlsx_shared_strings_; } std::wostream & shared_strings() { return xlsx_shared_strings_; }
std::wostream & defined_names() { return xlsx_defined_names_; } std::wostream & defined_names() { return xlsx_defined_names_; }
std::wostream & workbook_views() { return xlsx_workbook_views_; }
xlsx_text_context & get_text_context() { return xlsx_text_context_; } xlsx_text_context & get_text_context() { return xlsx_text_context_; }
xlsx_table_context & get_table_context() { return xlsx_table_context_; } xlsx_table_context & get_table_context() { return xlsx_table_context_; }
...@@ -72,6 +73,7 @@ private: ...@@ -72,6 +73,7 @@ private:
std::wstringstream xlsx_shared_strings_; std::wstringstream xlsx_shared_strings_;
std::wstringstream xlsx_defined_names_; std::wstringstream xlsx_defined_names_;
std::wstringstream xlsx_workbook_views_;
xlsx_drawing_context_handle xlsx_drawing_context_handle_; xlsx_drawing_context_handle xlsx_drawing_context_handle_;
//xlsx_comments_context_handle xlsx_comments_context_handle_; //xlsx_comments_context_handle xlsx_comments_context_handle_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment