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
{
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
{
......
......@@ -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")
{
......
......@@ -39,14 +39,35 @@ void Window1::readFields(CFRecord& record)
{
unsigned short flags;
record >> xWn >> yWn >> dxWn >> dyWn >> flags >> itabCur >> itabFirst >> ctabSel >> wTabRatio;
fHidden = GETBIT(flags, 0);
fIconic = GETBIT(flags, 1);
fVeryHidden = GETBIT(flags, 2);
fDspHScroll = GETBIT(flags, 3);
fDspVScroll = GETBIT(flags, 4);
fBotAdornment = GETBIT(flags, 5);
fNoAFDateGroup = GETBIT(flags, 6);
fHidden = GETBIT(flags, 0);
fIconic = GETBIT(flags, 1);
fVeryHidden = GETBIT(flags, 2);
fDspHScroll = GETBIT(flags, 3);
fDspVScroll = GETBIT(flags, 4);
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
......@@ -22,6 +22,7 @@ public:
static const ElementType type = typeWindow1;
int serialize(std::wostream & stream);
//-----------------------------
BIFF_SHORT xWn;
BIFF_SHORT yWn;
......
......@@ -2,13 +2,15 @@
#include "FORMATTING.h"
#include <Logic/Biff_records/Font.h>
#include <Logic/Biff_records/Format.h>
#include <Logic/Biff_unions/XFS.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>
namespace XLS
{
......@@ -76,6 +78,12 @@ const bool FORMATTING::loadContent(BinProcessor& proc)
}
//----------------------------------------------------------------------------------------------------
proc.optional<TABLESTYLES>();
if (proc.optional<THEME>()) // - china_price.xls
{
}
proc.optional<Compat12>(); //china_price.xls
if (proc.optional<Palette>())
{
m_Palette = elements_.back();
......
......@@ -154,14 +154,29 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.optional<ObNoMacros>();
proc.optional<CodeName>();
proc.optional<FNGROUPS>();
proc.repeated<Lbl>(0, 0);
proc.optional<OleObjectSize>();
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<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<CalcPrecision>();
......@@ -185,6 +200,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.optional<RecalcId>(); // OpenOffice Calc stored files workaround
proc.repeated<Window1>(0, 0); // OpenOffice Calc stored files workaround
if (proc.mandatory<FORMATTING>())
{
m_Formating = elements_.back();
......@@ -233,6 +249,7 @@ const bool GlobalsSubstream::loadContent(BinProcessor& proc)
proc.repeated<RTD>(0, 0);
proc.optional<RecalcId>();
proc.optional<Date1904>(); //china-price.xls
count = proc.repeated<HFPicture>(0, 0);
while(count > 0)
......
......@@ -35,6 +35,7 @@ public:
std::vector<BaseObjectPtr> m_arHFPicture;
std::vector<BaseObjectPtr> m_arLBL;
std::vector<BaseObjectPtr> m_arMSODRAWINGGROUP;
std::vector<BaseObjectPtr> m_arWindow1;
unsigned short code_page_;
};
......
......@@ -338,6 +338,10 @@ void XlsConverter::convert(XLS::GlobalsSubstream* global)
{
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;
......@@ -514,7 +518,12 @@ void XlsConverter::convert(XLS::LBL * def_name)
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)
{
if (theme == NULL) return;
......
......@@ -30,6 +30,7 @@ namespace XLS
class GlobalsSubstream;
class ChartSheetSubstream;
class WINDOW;
class FORMATTING;
class THEME;
class SHAREDSTRINGS;
......@@ -79,6 +80,7 @@ public:
void convert(XLS::OBJECTS * objects);
void convert(XLS::MSODRAWINGGROUP * mso_drawing);
void convert(XLS::TxO * text_obj);
void convert(XLS::WINDOW * window);
void convert(ODRAW::OfficeArtRecord * art);
void convert(ODRAW::OfficeArtBStoreContainer* art_bstore);
......
......@@ -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: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_STREAM() << workbook_content.str();
......
......@@ -37,6 +37,7 @@ public:
std::wostream & shared_strings() { return xlsx_shared_strings_; }
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_table_context & get_table_context() { return xlsx_table_context_; }
......@@ -72,6 +73,7 @@ private:
std::wstringstream xlsx_shared_strings_;
std::wstringstream xlsx_defined_names_;
std::wstringstream xlsx_workbook_views_;
xlsx_drawing_context_handle xlsx_drawing_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