Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
055a0257
Commit
055a0257
authored
Nov 27, 2017
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
XlsFormat - ...
parent
1e2e5996
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
121 additions
and
60 deletions
+121
-60
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/BiffRecord.cpp
...sFile2/source/XlsFormat/Logic/Biff_records/BiffRecord.cpp
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtClientAnchorSheet.cpp
...ogic/Biff_structures/ODRAW/OfficeArtClientAnchorSheet.cpp
+1
-2
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtDgContainer.cpp
...rmat/Logic/Biff_structures/ODRAW/OfficeArtDgContainer.cpp
+9
-2
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgArea3d.cpp
...ile2/source/XlsFormat/Logic/Biff_structures/PtgArea3d.cpp
+7
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgErr.cpp
...lsFile2/source/XlsFormat/Logic/Biff_structures/PtgErr.cpp
+1
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgRef3d.cpp
...File2/source/XlsFormat/Logic/Biff_structures/PtgRef3d.cpp
+6
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/COLUMNS.cpp
...ceXlsFile2/source/XlsFormat/Logic/Biff_unions/COLUMNS.cpp
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/METADATA.cpp
...eXlsFile2/source/XlsFormat/Logic/Biff_unions/METADATA.cpp
+3
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/XFS.cpp
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/XFS.cpp
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
...ceXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
+1
-0
ASCOfficeXlsFile2/source/XlsFormat/Logic/MacroSheetSubstream.cpp
...ceXlsFile2/source/XlsFormat/Logic/MacroSheetSubstream.cpp
+1
-2
ASCOfficeXlsFile2/source/XlsFormat/Logic/WorksheetSubstream.cpp
...iceXlsFile2/source/XlsFormat/Logic/WorksheetSubstream.cpp
+1
-2
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
+3
-3
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
...XlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
+85
-34
No files found.
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/BiffRecord.cpp
View file @
055a0257
...
...
@@ -70,7 +70,7 @@ const bool BiffRecord::read(CFStreamCacheReader& reader, BaseObject* parent, con
size_t
rdPtr
=
record
->
getRdPtr
();
size_t
typeId
=
getTypeId
();
if
(
record
->
getDataSize
()
!=
record
->
getRdPtr
()
&&
getTypeId
()
!=
rt_ANY_TYPE
&&
getTypeId
()
!=
rt_MsoDrawing
)
if
(
record
->
getDataSize
()
!=
record
->
getRdPtr
()
&&
getTypeId
()
!=
rt_ANY_TYPE
/* && getTypeId() != rt_MsoDrawing*/
)
{
Log
::
warning
(
STR
::
int2str
(
record
->
getDataSize
()
-
record
->
getRdPtr
(),
10
)
+
" unsigned chars were not processed while reading from "
+
record
->
getTypeString
());
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtClientAnchorSheet.cpp
View file @
055a0257
...
...
@@ -40,8 +40,7 @@ namespace ODRAW
{
OfficeArtClientAnchorSheet
::
OfficeArtClientAnchorSheet
()
:
OfficeArtRecord
(
0x00
,
ClientAnchor
)
OfficeArtClientAnchorSheet
::
OfficeArtClientAnchorSheet
()
:
OfficeArtRecord
(
0x00
,
ClientAnchor
)
{
_x
=
_y
=
_cx
=
_cy
=
0
;
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtDgContainer.cpp
View file @
055a0257
...
...
@@ -36,8 +36,7 @@
namespace
ODRAW
{
OfficeArtDgContainer
::
OfficeArtDgContainer
(
const
OfficeArtClientAnchorType
anchor_type
)
:
OfficeArtContainer
(
0x0F
,
DgContainer
,
anchor_type
)
OfficeArtDgContainer
::
OfficeArtDgContainer
(
const
OfficeArtClientAnchorType
anchor_type
)
:
OfficeArtContainer
(
0x0F
,
DgContainer
,
anchor_type
)
{
}
...
...
@@ -73,6 +72,14 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
{
try
{
OfficeArtRecordHeader
rh_test
;
record
>>
rh_test
;
record
.
RollRdPtrBack
(
8
);
//sizeof(OfficeArtRecordHeader)
if
((
rh_test
.
recType
&
0xF000
)
!=
0xF000
)
{
return
;
}
OfficeArtContainer
::
loadFields
(
record
);
}
catch
(...)
{
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgArea3d.cpp
View file @
055a0257
...
...
@@ -41,8 +41,7 @@ namespace XLS
{
PtgArea3d
::
PtgArea3d
(
const
CellRef
&
cell_base_ref_init
)
:
cell_base_ref
(
cell_base_ref_init
)
PtgArea3d
::
PtgArea3d
(
const
CellRef
&
cell_base_ref_init
)
:
cell_base_ref
(
cell_base_ref_init
)
{
}
...
...
@@ -137,8 +136,13 @@ void PtgArea3d::assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool f
std
::
wstring
link
=
global_info
->
arXti
[
ixti
].
link
;
if
(
!
link
.
empty
()
&&
!
range_ref
.
empty
())
link
+=
L"!"
;
if
(
full_ref
&&
link
.
empty
())
//4673306.xls defined name "Категория"
{
link
=
L"#REF!"
;
}
ptg_stack
.
push
(
link
+
range_ref
);
// full_ref ???
ptg_stack
.
push
(
link
+
range_ref
);
}
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgErr.cpp
View file @
055a0257
...
...
@@ -42,9 +42,7 @@ PtgErr::PtgErr()
}
PtgErr
::
PtgErr
(
const
std
::
wstring
str
)
:
err
(
str
),
OperandPtg
(
fixed_id
)
PtgErr
::
PtgErr
(
const
std
::
wstring
str
)
:
err
(
str
),
OperandPtg
(
fixed_id
)
{
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/PtgRef3d.cpp
View file @
055a0257
...
...
@@ -41,8 +41,7 @@ namespace XLS
{
PtgRef3d
::
PtgRef3d
(
const
CellRef
&
cell_base_ref_init
)
:
cell_base_ref
(
cell_base_ref_init
)
PtgRef3d
::
PtgRef3d
(
const
CellRef
&
cell_base_ref_init
)
:
cell_base_ref
(
cell_base_ref_init
)
{
}
...
...
@@ -133,7 +132,11 @@ void PtgRef3d::assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool fu
if
(
!
link
.
empty
()
&&
!
cell_ref
.
empty
())
link
+=
L"!"
;
ptg_stack
.
push
(
link
+
cell_ref
);
// full_ref ???
if
(
full_ref
&&
link
.
empty
())
//Stock symbols comparison1.xls defined name "check_phrase"
{
link
=
L"#REF!"
;
}
ptg_stack
.
push
(
link
+
cell_ref
);
}
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/COLUMNS.cpp
View file @
055a0257
...
...
@@ -77,7 +77,7 @@ const bool COLUMNS::loadContent(BinProcessor& proc)
for
(
int
i
=
column_info
->
colFirst
;
i
<=
column_info
->
colLast
;
i
++
)
{
global_info_
->
sheets_info
.
back
()
.
customColumnsWidth
.
insert
(
std
::
make_pair
(
i
,
column_info
->
coldx
/
256.
));
global_info_
->
sheets_info
[
global_info_
->
current_sheet
-
1
]
.
customColumnsWidth
.
insert
(
std
::
make_pair
(
i
,
column_info
->
coldx
/
256.
));
//else if (def_ok)
//{
// global_info_->sheets_info.back().customColumnsWidth.insert(std::make_pair(i, global_info_->sheets_info.back().defaultColumnWidth));
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/METADATA.cpp
View file @
055a0257
...
...
@@ -96,21 +96,21 @@ const bool METADATA::loadContent(BinProcessor& proc)
int
count2
=
proc
.
repeated
<
MDXSTR
>
(
0
,
0
);
while
(
!
elements_
.
empty
())
{
m_arMDXSTR
.
insert
(
m_arMD
TINFO
.
begin
(),
elements_
.
back
());
m_arMDXSTR
.
insert
(
m_arMD
XSTR
.
begin
(),
elements_
.
back
());
elements_
.
pop_back
();
}
int
count3
=
proc
.
repeated
<
Parenthesis_METADATA_1
>
(
0
,
0
);
while
(
!
elements_
.
empty
())
{
m_arMDTSET
.
insert
(
m_arMDT
INFO
.
begin
(),
elements_
.
back
());
m_arMDTSET
.
insert
(
m_arMDT
SET
.
begin
(),
elements_
.
back
());
elements_
.
pop_back
();
}
int
count4
=
proc
.
repeated
<
MDBLOCK
>
(
0
,
0
);
while
(
!
elements_
.
empty
())
{
m_arMDBLOCK
.
insert
(
m_arMD
TINFO
.
begin
(),
elements_
.
back
());
m_arMDBLOCK
.
insert
(
m_arMD
BLOCK
.
begin
(),
elements_
.
back
());
elements_
.
pop_back
();
}
if
(
count1
>
0
||
count2
>
0
||
count3
>
0
||
count4
>
0
)
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/XFS.cpp
View file @
055a0257
...
...
@@ -68,7 +68,7 @@ const bool XFS::loadContent(BinProcessor& proc)
int
cellXfs_count
=
0
;
XF
xf
(
cell_xf_current_id
,
style_xf_current_id
);
int
count
=
proc
.
repeated
(
xf
,
16
,
0
);
int
count
=
proc
.
repeated
(
xf
,
0
/*16*/
,
0
);
// "Stock symbols comparison1.xls" (второй FORMATING)
int
ind
=
0
;
while
(
count
>
0
&&
elements_
.
size
()
>
0
)
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
View file @
055a0257
...
...
@@ -127,6 +127,7 @@ CHARTSHEETCONTENT = [WriteProtect] [SheetExt] [WebPub] *HFPicture PAGESETUP Prin
const
bool
ChartSheetSubstream
::
loadContent
(
BinProcessor
&
proc
)
{
global_info_
=
proc
.
getGlobalWorkbookInfo
();
global_info_
->
current_sheet
=
ws_index_
+
1
;
int
count
=
0
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/MacroSheetSubstream.cpp
View file @
055a0257
...
...
@@ -98,8 +98,7 @@ const bool MacroSheetSubstream::loadContent(BinProcessor& proc)
return
false
;
}
global_info_
=
proc
.
getGlobalWorkbookInfo
();
global_info_
->
current_sheet
=
global_info_
->
sheets_info
.
size
();
global_info_
->
current_sheet
=
ws_index_
+
1
;
proc
.
optional
<
Uncalced
>
();
proc
.
mandatory
<
Index
>
();
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/WorksheetSubstream.cpp
View file @
055a0257
...
...
@@ -104,8 +104,7 @@ WORKSHEET = BOF WORKSHEETCONTENT
const
bool
WorksheetSubstream
::
loadContent
(
BinProcessor
&
proc
)
{
global_info_
=
proc
.
getGlobalWorkbookInfo
();
global_info_
->
current_sheet
=
global_info_
->
sheets_info
.
size
();
global_info_
->
current_sheet
=
ws_index_
+
1
;
global_info_
->
cmt_rules
=
0
;
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
View file @
055a0257
...
...
@@ -1991,10 +1991,10 @@ void XlsConverter::convert_transform(std::vector<ODRAW::OfficeArtFOPTEPtr> & pro
{
case
0x0004
:
{
double
d
=
props
[
i
]
->
op
/
65536.
;
d
*=
60000
;
//60 000 per 1 gr - 19.5.5 oox
double
d
=
props
[
i
]
->
op
/
65536.
;
if
(
d
<
0
)
d
+=
360
;
xlsx_context
->
get_drawing_context
().
set_rotation
(
(
int
)
d
);
xlsx_context
->
get_drawing_context
().
set_rotation
(
d
);
}
break
;
}
}
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
View file @
055a0257
...
...
@@ -550,32 +550,34 @@ void xlsx_drawing_context::end_group()
{
if
(
current_level
<
1
)
return
;
serialize_group
();
std
::
vector
<
_drawing_state_ptr
>*
cur_states
=
NULL
;
for
(
size_t
i
=
0
;
i
<
current_drawing_states
->
size
();
i
++
)
{
int
level
=
current_level
;
cur_states
=
current_drawing_states
;
while
(
level
>
0
)
{
_drawing_state_ptr
&
drawing_state
=
cur_states
->
front
();
if
(
i
!=
0
||
level
!=
current_level
)
// группа сама себя
{
if
(
!
current_drawing_states
->
empty
())
{
int
level
=
current_level
;
cur_states
=
current_drawing_states
;
while
(
level
>
0
)
{
double
kf_x
=
(
double
)
drawing_state
->
child_anchor
.
cx
/
drawing_state
->
group_anchor
.
cx
;
double
kf_y
=
(
double
)
drawing_state
->
child_anchor
.
cy
/
drawing_state
->
group_anchor
.
cy
;
_drawing_state_ptr
&
drawing_state
=
cur_states
->
front
();
if
(
i
!=
0
||
level
!=
current_level
)
// группа сама себя
{
double
kf_x
=
(
double
)
drawing_state
->
child_anchor
.
cx
/
drawing_state
->
group_anchor
.
cx
;
double
kf_y
=
(
double
)
drawing_state
->
child_anchor
.
cy
/
drawing_state
->
group_anchor
.
cy
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
cx
*=
kf_x
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
cy
*=
kf_y
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
cx
*=
kf_x
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
cy
*=
kf_y
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
x
=
current_drawing_states
->
at
(
i
)
->
child_anchor
.
x
*
kf_x
+
drawing_state
->
child_anchor
.
x
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
y
=
current_drawing_states
->
at
(
i
)
->
child_anchor
.
y
*
kf_y
+
drawing_state
->
child_anchor
.
y
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
x
=
current_drawing_states
->
at
(
i
)
->
child_anchor
.
x
*
kf_x
+
drawing_state
->
child_anchor
.
x
;
current_drawing_states
->
at
(
i
)
->
child_anchor
.
y
=
current_drawing_states
->
at
(
i
)
->
child_anchor
.
y
*
kf_y
+
drawing_state
->
child_anchor
.
y
;
}
level
--
;
cur_states
=
cur_states
->
front
()
->
parent_drawing_states
;
}
level
--
;
cur_states
=
cur_states
->
front
()
->
parent_drawing_states
;
}
}
serialize_group
();
current_drawing_states
=
current_drawing_states
->
front
()
->
parent_drawing_states
;
...
...
@@ -770,6 +772,29 @@ void xlsx_drawing_context::end_drawing()
if
(
current_drawing_states
->
back
()
->
type
==
external_items
::
typeGroup
)
return
;
//std::vector<_drawing_state_ptr>* cur_states = current_drawing_states;;
//
//int level = current_level;
//while (level > 0)
//{
// _drawing_state_ptr & drawing_state = cur_states->front();
// double kf_x = (double)drawing_state->child_anchor.cx / drawing_state->group_anchor.cx;
// double kf_y = (double)drawing_state->child_anchor.cy / drawing_state->group_anchor.cy;
// current_drawing_states->back()->child_anchor.cx *= kf_x;
// current_drawing_states->back()->child_anchor.cy *= kf_y;
//
// current_drawing_states->back()->child_anchor.x = drawing_state->group_anchor.x +
// (long)(kf_x * (current_drawing_states->back()->child_anchor.x - drawing_state->group_anchor.x));
// current_drawing_states->back()->child_anchor.y = drawing_state->group_anchor.y +
// (long)(kf_y * (current_drawing_states->back()->child_anchor.y - drawing_state->group_anchor.y));
// level--;
// cur_states = cur_states->front()->parent_drawing_states;
//}
end_drawing
(
current_drawing_states
->
back
());
if
(
current_drawing_states
->
back
()
->
type
==
external_items
::
typeComment
||
...
...
@@ -794,6 +819,13 @@ void xlsx_drawing_context::end_drawing(_drawing_state_ptr & drawing_state)
if
(
drawing_state
->
id
<
0
)
drawing_state
->
id
=
count_object
+
0x20000
;
if
(
current_level
>
0
&&
drawing_state
->
rotation
>
0
&&
((
int
)
drawing_state
->
rotation
%
90
==
0
))
{
int
v
=
drawing_state
->
child_anchor
.
cx
;
drawing_state
->
child_anchor
.
cx
=
drawing_state
->
child_anchor
.
cy
;
drawing_state
->
child_anchor
.
cy
=
v
;
}
if
(
drawing_state
->
type
==
external_items
::
typeImage
||
(
drawing_state
->
type
==
external_items
::
typeShape
&&
drawing_state
->
shape_id
==
msosptPictureFrame
))
{
...
...
@@ -993,10 +1025,6 @@ void xlsx_drawing_context::serialize_vml_shape(_drawing_state_ptr & drawing_stat
{
CP_XML_ATTR
(
L"stroked"
,
L"f"
);
}
if
(
drawing_state
->
line
.
fill
.
type
==
fillNone
)
{
CP_XML_ATTR
(
L"stroked"
,
L"f"
);
}
if
(
drawing_state
->
fill
.
type
==
fillNone
)
{
CP_XML_ATTR
(
L"filled"
,
L"f"
);
...
...
@@ -1009,10 +1037,10 @@ void xlsx_drawing_context::serialize_vml_shape(_drawing_state_ptr & drawing_stat
CP_XML_ATTR
(
L"on"
,
L"t"
);
}
CP_XML_NODE
(
L"v:wrap"
)
{
CP_XML_ATTR
(
L"v:type"
,
L"none"
);
}
//
CP_XML_NODE(L"v:wrap")
//
{
//
CP_XML_ATTR(L"v:type", L"none");
//
}
CP_XML_NODE
(
L"v:fill"
)
{
...
...
@@ -1074,6 +1102,17 @@ void xlsx_drawing_context::serialize_vml_shape(_drawing_state_ptr & drawing_stat
CP_XML_STREAM
()
<<
drawing_state
->
text
.
vml_content
;
}
}
if
(
drawing_state
->
type_control
==
0x000b
)
{
CP_XML_NODE
(
L"v:textbox"
)
{
CP_XML_ATTR
(
L"o:singleclick"
,
L"f"
);
CP_XML_NODE
(
L"div"
)
{
CP_XML_ATTR
(
L"style"
,
L"text-align:left"
);
}
}
}
CP_XML_NODE
(
L"x:ClientData"
)
{
switch
(
drawing_state
->
type_control
)
...
...
@@ -1118,8 +1157,12 @@ void xlsx_drawing_context::serialize_vml_shape(_drawing_state_ptr & drawing_stat
}
}
CP_XML_NODE
(
L"x:AutoFill"
)
{
CP_XML_CONTENT
(
"False"
);}
CP_XML_NODE
(
L"x:Row"
)
{
CP_XML_CONTENT
(
drawing_state
->
object
.
row
);}
CP_XML_NODE
(
L"x:Column"
)
{
CP_XML_CONTENT
(
drawing_state
->
object
.
col
);}
//if (drawing_state->type_control != 0x000b)
{
CP_XML_NODE
(
L"x:Row"
)
{
CP_XML_CONTENT
(
drawing_state
->
object
.
row
);}
CP_XML_NODE
(
L"x:Column"
)
{
CP_XML_CONTENT
(
drawing_state
->
object
.
col
);}
}
if
(
drawing_state
->
object
.
bVisible
)
CP_XML_NODE
(
L"x:Visible"
);
...
...
@@ -1507,11 +1550,11 @@ void xlsx_drawing_context::serialize_shape(_drawing_state_ptr & drawing_state)
CP_XML_NODE
(
L"xdr:cNvSpPr"
)
{
if
(
drawing_state
->
bTextBox
)
CP_XML_ATTR
(
L"txBox"
,
1
);
CP_XML_NODE
(
L"a:spLocks"
)
{
CP_XML_ATTR
(
L"noGrp"
,
1
);
CP_XML_ATTR
(
L"noChangeArrowheads"
,
1
);
}
//
CP_XML_NODE(L"a:spLocks")
//
{
//
CP_XML_ATTR(L"noGrp", 1);
//
CP_XML_ATTR(L"noChangeArrowheads", 1);
//
}
}
}
...
...
@@ -1938,7 +1981,7 @@ void xlsx_drawing_context::serialize_xfrm(std::wostream & stream, _drawing_state
if
(
drawing_state
->
flipV
)
CP_XML_ATTR
(
L"flipV"
,
true
);
if
(
drawing_state
->
flipH
)
CP_XML_ATTR
(
L"flipH"
,
true
);
if
(
drawing_state
->
rotation
!=
0
)
CP_XML_ATTR
(
L"rot"
,
drawing_state
->
rotation
);
if
(
drawing_state
->
rotation
!=
0
)
CP_XML_ATTR
(
L"rot"
,
(
int
)(
drawing_state
->
rotation
*
60000
)
);
CP_XML_NODE
(
L"a:off"
)
{
...
...
@@ -2655,8 +2698,16 @@ void xlsx_drawing_context::set_rotation (double val)
{
if
(
current_drawing_states
==
NULL
)
return
;
if
(
current_drawing_states
->
empty
())
return
;
if
(
val
<
0.001
)
return
;
current_drawing_states
->
back
()
->
rotation
=
val
;
if
(((
int
)
current_drawing_states
->
back
()
->
rotation
%
90
)
==
0
&&
current_level
>
0
)
{
int
v
=
current_drawing_states
->
back
()
->
child_anchor
.
cx
;
current_drawing_states
->
back
()
->
child_anchor
.
cx
=
current_drawing_states
->
back
()
->
child_anchor
.
cy
;
current_drawing_states
->
back
()
->
child_anchor
.
cy
=
v
;
}
}
void
xlsx_drawing_context
::
set_line_color
(
int
nColor
,
const
std
::
wstring
&
sColor
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment