Commit 6a8d0cf3 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlsFile2

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64388 954022d7-b5bf-4e40-9824-e11837661b57
parent a0d32619
...@@ -96,6 +96,13 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record) ...@@ -96,6 +96,13 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record)
m_OfficeArtFSP = child_records[i]; m_OfficeArtFSP = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--; child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break; }break;
case ODRAW::OfficeArtRecord::ChildAnchor:
case ODRAW::OfficeArtRecord::ClientAnchor:
{
m_OfficeArtAnchor = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
} }
} }
......
...@@ -54,6 +54,7 @@ public: ...@@ -54,6 +54,7 @@ public:
void loadFields(XLS::CFRecord& record); void loadFields(XLS::CFRecord& record);
OfficeArtRecordPtr m_OfficeArtFSP; OfficeArtRecordPtr m_OfficeArtFSP;
OfficeArtRecordPtr m_OfficeArtAnchor;
}; };
class OfficeArtClientData : public OfficeArtRecord class OfficeArtClientData : public OfficeArtRecord
......
...@@ -563,42 +563,26 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -563,42 +563,26 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
if (type_object < 0)continue;
ODRAW::OfficeArtSpContainer *sp = NULL; ODRAW::OfficeArtSpContainer *sp = NULL;
ODRAW::OfficeArtSpContainer *sp_text = NULL; if (( spgr) && (ind < spgr->child_records.size()))
if ( spgr)
{ {
if (ind < spgr->child_records.size()) sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind++].get());
{ }
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
ind++;
}
if ((text_obj && ind < spgr->child_records.size()) && text_obj->sp_enabled)
{
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
ind++;
}
if ((chart && ind < spgr->child_records.size()) && CHART->sp_enabled)
{
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
ind++;
}
}
if (note && text_obj)
{
//convert_comment(text_obj/*, note_obj*/);
note = false;
continue;
}
note = false;
if (type_object < 0)continue;
if (xlsx_context->get_drawing_context().start_drawing(type_object)) if (xlsx_context->get_drawing_context().start_drawing(type_object))
{ {
convert(sp); convert(sp);
convert(sp_text);
if (!sp->m_OfficeArtAnchor)
{
if (( spgr) && (ind < spgr->child_records.size()))
{
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind++].get());
}
convert(sp, true);
}
if (text_obj) if (text_obj)
{ {
...@@ -612,29 +596,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -612,29 +596,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
} }
xlsx_context->get_drawing_context().end_drawing(); xlsx_context->get_drawing_context().end_drawing();
} }
else
{
if (type_object == 0x19)
{
note = true;
}
}
if ( spgr )
{
while (ind < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls
{
ODRAW::OfficeArtClientData* client_data = NULL;
ODRAW::OfficeArtClientTextbox* text_client_data = NULL;
client_data = dynamic_cast<ODRAW::OfficeArtClientData*> (spgr->child_records[ind].get());
text_client_data = dynamic_cast<ODRAW::OfficeArtClientTextbox*> (spgr->child_records[ind].get());
if (client_data || text_client_data)
{
ind++;
}else break;
}
}
if (TEXTOBJECT || CHART) if (TEXTOBJECT || CHART)
{ {
elem++; elem++;
...@@ -642,16 +604,20 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -642,16 +604,20 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
} }
} }
void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp) void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp, bool anchor_only)
{ {
if (sp == NULL) return; if (sp == NULL) return;
convert(sp->m_OfficeArtFSP.get()); if (!anchor_only)
for (int i = 0; i < sp->child_records.size(); i++)
{ {
convert(sp->child_records[i].get()); convert(sp->m_OfficeArtFSP.get());
for (int i = 0; i < sp->child_records.size(); i++)
{
convert(sp->child_records[i].get());
}
} }
convert(sp->m_OfficeArtAnchor.get());
} }
void XlsConverter::convert(ODRAW::OfficeArtRecord * art) void XlsConverter::convert(ODRAW::OfficeArtRecord * art)
...@@ -676,8 +642,8 @@ void XlsConverter::convert(ODRAW::OfficeArtRecord * art) ...@@ -676,8 +642,8 @@ void XlsConverter::convert(ODRAW::OfficeArtRecord * art)
xlsx_context->get_drawing_context().set_anchor(strm.str()); xlsx_context->get_drawing_context().set_anchor(strm.str());
}break; }break;
} }
} }
void XlsConverter::convert(ODRAW::OfficeArtFSP * fsp) void XlsConverter::convert(ODRAW::OfficeArtFSP * fsp)
{ {
if (fsp == NULL) return; if (fsp == NULL) return;
...@@ -714,10 +680,10 @@ void XlsConverter::convert_fill_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr ...@@ -714,10 +680,10 @@ void XlsConverter::convert_fill_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr
}break; }break;
case 0x0186: case 0x0186:
{ {
//bool isIternal = false; bool isIternal = false;
//std::wstring target; std::wstring target;
//std::wstring rId = xlsx_context->get_mediaitems().find_image(props[i]->op , target, isIternal); std::wstring rId = xlsx_context->get_mediaitems().find_image(props[i]->op , target, isIternal);
//xlsx_context->get_drawing_context().set_image(target); xlsx_context->get_drawing_context().set_image(target);
}break; }break;
case 0x01BF: case 0x01BF:
{ {
......
...@@ -86,7 +86,7 @@ private: ...@@ -86,7 +86,7 @@ private:
void convert(ODRAW::OfficeArtRecord * art); void convert(ODRAW::OfficeArtRecord * art);
void convert(ODRAW::OfficeArtBStoreContainer* art_bstore); void convert(ODRAW::OfficeArtBStoreContainer* art_bstore);
void convert(ODRAW::OfficeArtSpContainer * sp); void convert(ODRAW::OfficeArtSpContainer * sp, bool anchor_only = false);
void convert(ODRAW::OfficeArtFOPT * fort); void convert(ODRAW::OfficeArtFOPT * fort);
void convert(ODRAW::OfficeArtFSP * fsp); void convert(ODRAW::OfficeArtFSP * fsp);
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
namespace oox { namespace oox {
const static std::wstring shemeColor[17] = const static std::wstring shemeColor[18] =
{L"lt1",L"dk1",L"lt2",L"dk2",L"accent1",L"accent2",L"accent3",L"accent4",L"accent5",L"accent6",L"dk1",L"dk2",L"folHlink",L"hlink",L"tx1",L"tx2",L"phClr"}; {L"accent1",L"accent2",L"accent3",L"accent4",L"accent5",L"accent6",L"bk1",L"bk2",L"dk1",L"dk2",L"folHlink",L"hlink",L"lt1",L"lt2",L"none", L"tx1",L"tx2",L"phClr"};
const static std::wstring systemColor[30] = const static std::wstring systemColor[30] =
{L"scrollBar", L"background", L"activeCaption", L"inactiveCaption", L"menu", L"window", L"windowFrame", L"menuText", L"windowText", {L"scrollBar", L"background", L"activeCaption", L"inactiveCaption", L"menu", L"window", L"windowFrame", L"menuText", L"windowText",
...@@ -412,7 +412,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color ...@@ -412,7 +412,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color
CP_XML_ATTR(L"val", color.rgb); CP_XML_ATTR(L"val", color.rgb);
} }
} }
else if (color.index >=0 && color.index < 17) else if (color.index >=0 && color.index < 17 && color.bScheme)
{ {
CP_XML_NODE(L"a:schemeClr") CP_XML_NODE(L"a:schemeClr")
{ {
...@@ -428,7 +428,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color ...@@ -428,7 +428,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color
} }
else else
{ {
CP_XML_NODE(L"a:sysClr") CP_XML_NODE(L"a:schemeClr")
{ {
CP_XML_ATTR(L"val", L"lt1"); CP_XML_ATTR(L"val", L"lt1");
} }
...@@ -592,6 +592,14 @@ void xlsx_drawing_context::set_anchor(const std::wstring & str) ...@@ -592,6 +592,14 @@ void xlsx_drawing_context::set_anchor(const std::wstring & str)
drawing_state.back().anchor = str; drawing_state.back().anchor = str;
} }
bool xlsx_drawing_context::is_anchor()
{
if (drawing_state.size() < 1 ) return false;
return !drawing_state.back().anchor.empty();
}
void xlsx_drawing_context::set_image(const std::wstring & str) void xlsx_drawing_context::set_image(const std::wstring & str)
{ {
if (drawing_state.size() < 1 )return; if (drawing_state.size() < 1 )return;
...@@ -635,8 +643,9 @@ void xlsx_drawing_context::set_line_color (const std::wstring & color) ...@@ -635,8 +643,9 @@ void xlsx_drawing_context::set_line_color (const std::wstring & color)
void xlsx_drawing_context::set_line_color (int index, int type) void xlsx_drawing_context::set_line_color (int index, int type)
{ {
if (drawing_state.size() < 1 )return; if (drawing_state.size() < 1 )return;
drawing_state.back().line.color.index = index; drawing_state.back().line.color.index = index;
drawing_state.back().line.color.rgb = L"";
if (type == 1) drawing_state.back().line.color.bScheme = true; if (type == 1) drawing_state.back().line.color.bScheme = true;
} }
void xlsx_drawing_context::set_fill_color (const std::wstring & color) void xlsx_drawing_context::set_fill_color (const std::wstring & color)
......
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
struct _line struct _line
{ {
_line() {opacity = 0; type = L"solidFill"; style = L"simple"; width = 0;} _line() {opacity = 0; type = L"solidFill"; style = L"simple"; width = 0; color.rgb = L"000000";}
_color color; _color color;
int opacity; int opacity;
std::wstring type; std::wstring type;
...@@ -152,7 +152,10 @@ public: ...@@ -152,7 +152,10 @@ public:
void set_line_width (int val); void set_line_width (int val);
void set_image (const std::wstring & str); void set_image (const std::wstring & str);
void set_anchor (const std::wstring & str); void set_anchor (const std::wstring & str);
bool is_anchor ();
void set_properties (const std::wstring & str); void set_properties (const std::wstring & str);
void set_hyperlink (const std::wstring & str); void set_hyperlink (const std::wstring & str);
......
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