Commit f7bbdfba authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

(1.0.0.110): XlsxSerializerCom

Bug 23773 - Экспортируется только один комментарий из нескольких, добавленных к документу.
больше не инициализируются default значение chart при открытии и сохранении.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@55470 954022d7-b5bf-4e40-9824-e11837661b57
parent fa3fdd7f
......@@ -1178,7 +1178,7 @@ namespace OOX{
EElementType CT_ChartSpace::getType(){return et_ct_chartspace;}
CT_Boolean::CT_Boolean()
{
m_val = new bool;
/*m_val = new bool;
CString s_m_val("True");
{
CString sValLower = s_m_val.MakeLower();
......@@ -1186,7 +1186,8 @@ namespace OOX{
*m_val = false;
else
*m_val = true;
}
}*/
m_val = NULL;
}
CT_Boolean::~CT_Boolean()
{
......@@ -1272,20 +1273,24 @@ namespace OOX{
EElementType CT_RelId::getType(){return et_ct_relid;}
CT_PageSetup::CT_PageSetup()
{
m_paperSize = new unsigned long;
/*m_paperSize = new unsigned long;
CString s_m_paperSize("1");
{
*m_paperSize = _ttoi(s_m_paperSize);
}
}*/
m_paperSize = NULL;
m_paperHeight = NULL;
m_paperWidth = NULL;
m_firstPageNumber = new unsigned long;
/*m_firstPageNumber = new unsigned long;
CString s_m_firstPageNumber("1");
{
*m_firstPageNumber = _ttoi(s_m_firstPageNumber);
}
}*/
m_firstPageNumber = NULL;
/*m_orientation = new ST_PageSetupOrientation;
*m_orientation = st_pagesetuporientationDEFAULT;*/
m_orientation = NULL;
m_blackAndWhite = new bool;
/*m_blackAndWhite = new bool;
CString s_m_blackAndWhite("False");
{
CString sValLower = s_m_blackAndWhite.MakeLower();
......@@ -1293,8 +1298,9 @@ namespace OOX{
*m_blackAndWhite = false;
else
*m_blackAndWhite = true;
}
m_draft = new bool;
}*/
m_blackAndWhite = NULL;
/*m_draft = new bool;
CString s_m_draft("False");
{
CString sValLower = s_m_draft.MakeLower();
......@@ -1302,8 +1308,9 @@ namespace OOX{
*m_draft = false;
else
*m_draft = true;
}
m_useFirstPageNumber = new bool;
}*/
m_draft = NULL;
/*m_useFirstPageNumber = new bool;
CString s_m_useFirstPageNumber("False");
{
CString sValLower = s_m_useFirstPageNumber.MakeLower();
......@@ -1311,22 +1318,26 @@ namespace OOX{
*m_useFirstPageNumber = false;
else
*m_useFirstPageNumber = true;
}
m_horizontalDpi = new long;
}*/
m_useFirstPageNumber = NULL;
/*m_horizontalDpi = new long;
CString s_m_horizontalDpi("600");
{
*m_horizontalDpi = _ttoi(s_m_horizontalDpi);
}
m_verticalDpi = new long;
}*/
m_horizontalDpi = NULL;
/*m_verticalDpi = new long;
CString s_m_verticalDpi("600");
{
*m_verticalDpi = _ttoi(s_m_verticalDpi);
}
m_copies = new unsigned long;
}*/
m_verticalDpi = NULL;
/*m_copies = new unsigned long;
CString s_m_copies("1");
{
*m_copies = _ttoi(s_m_copies);
}
}*/
m_copies = NULL;
}
CT_PageSetup::~CT_PageSetup()
{
......@@ -1692,7 +1703,7 @@ namespace OOX{
m_evenFooter = NULL;
m_firstHeader = NULL;
m_firstFooter = NULL;
m_alignWithMargins = new bool;
/*m_alignWithMargins = new bool;
CString s_m_alignWithMargins("True");
{
CString sValLower = s_m_alignWithMargins.MakeLower();
......@@ -1700,8 +1711,9 @@ namespace OOX{
*m_alignWithMargins = false;
else
*m_alignWithMargins = true;
}
m_differentOddEven = new bool;
}*/
m_alignWithMargins = NULL;
/*m_differentOddEven = new bool;
CString s_m_differentOddEven("False");
{
CString sValLower = s_m_differentOddEven.MakeLower();
......@@ -1709,8 +1721,9 @@ namespace OOX{
*m_differentOddEven = false;
else
*m_differentOddEven = true;
}
m_differentFirst = new bool;
}*/
m_differentOddEven = NULL;
/*m_differentFirst = new bool;
CString s_m_differentFirst("False");
{
CString sValLower = s_m_differentFirst.MakeLower();
......@@ -1718,7 +1731,8 @@ namespace OOX{
*m_differentFirst = false;
else
*m_differentFirst = true;
}
}*/
m_differentFirst = NULL;
}
CT_HeaderFooter::~CT_HeaderFooter()
{
......@@ -2059,6 +2073,8 @@ namespace OOX{
EElementType CT_ExternalData::getType(){return et_ct_externaldata;}
CT_DispBlanksAs::CT_DispBlanksAs()
{
/*m_val = new ST_DispBlanksAs;
*m_val = st_dispblanksasZERO;*/
m_val = NULL;
}
CT_DispBlanksAs::~CT_DispBlanksAs()
......@@ -2280,6 +2296,8 @@ namespace OOX{
EElementType CT_Extension::getType(){return et_ct_extension;}
CT_LegendPos::CT_LegendPos()
{
/*m_val = new ST_LegendPos;
*m_val = st_legendposR;*/
m_val = NULL;
}
CT_LegendPos::~CT_LegendPos()
......@@ -2646,6 +2664,8 @@ namespace OOX{
EElementType CT_ManualLayout::getType(){return et_ct_manuallayout;}
CT_LayoutTarget::CT_LayoutTarget()
{
/*m_val = new ST_LayoutTarget;
*m_val = st_layouttargetOUTER;*/
m_val = NULL;
}
CT_LayoutTarget::~CT_LayoutTarget()
......@@ -2687,6 +2707,8 @@ namespace OOX{
EElementType CT_LayoutTarget::getType(){return et_ct_layouttarget;}
CT_LayoutMode::CT_LayoutMode()
{
/*m_val = new ST_LayoutMode;
*m_val = st_layoutmodeFACTOR;*/
m_val = NULL;
}
CT_LayoutMode::~CT_LayoutMode()
......@@ -3283,6 +3305,8 @@ namespace OOX{
EElementType CT_LogBase::getType(){return et_ct_logbase;}
CT_Orientation::CT_Orientation()
{
/*m_val = new ST_Orientation;
*m_val = st_orientationMINMAX;*/
m_val = NULL;
}
CT_Orientation::~CT_Orientation()
......@@ -3824,6 +3848,8 @@ namespace OOX{
EElementType CT_NumFmt::getType(){return et_ct_numfmt;}
CT_TickMark::CT_TickMark()
{
/*m_val = new ST_TickMark;
*m_val = st_tickmarkCROSS;*/
m_val = NULL;
}
CT_TickMark::~CT_TickMark()
......@@ -3865,6 +3891,8 @@ namespace OOX{
EElementType CT_TickMark::getType(){return et_ct_tickmark;}
CT_TickLblPos::CT_TickLblPos()
{
/*m_val = new ST_TickLblPos;
*m_val = st_ticklblposNEXTTO;*/
m_val = NULL;
}
CT_TickLblPos::~CT_TickLblPos()
......@@ -3985,6 +4013,8 @@ namespace OOX{
EElementType CT_Skip::getType(){return et_ct_skip;}
CT_TimeUnit::CT_TimeUnit()
{
/*m_val = new ST_TimeUnit;
*m_val = st_timeunitDAYS;*/
m_val = NULL;
}
CT_TimeUnit::~CT_TimeUnit()
......@@ -4364,11 +4394,12 @@ namespace OOX{
EElementType CT_DateAx::getType(){return et_ct_dateax;}
CT_LblOffset::CT_LblOffset()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("100%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_LblOffset::~CT_LblOffset()
{
......@@ -4888,6 +4919,8 @@ namespace OOX{
EElementType CT_DispUnitsLbl::getType(){return et_ct_dispunitslbl;}
CT_BuiltInUnit::CT_BuiltInUnit()
{
/*m_val = new ST_BuiltInUnit;
*m_val = st_builtinunitTHOUSANDS;*/
m_val = NULL;
}
CT_BuiltInUnit::~CT_BuiltInUnit()
......@@ -5345,6 +5378,8 @@ namespace OOX{
EElementType CT_ValAx::getType(){return et_ct_valax;}
CT_SizeRepresents::CT_SizeRepresents()
{
/*m_val = new ST_SizeRepresents;
*m_val = st_sizerepresentsAREA;*/
m_val = NULL;
}
CT_SizeRepresents::~CT_SizeRepresents()
......@@ -5386,11 +5421,12 @@ namespace OOX{
EElementType CT_SizeRepresents::getType(){return et_ct_sizerepresents;}
CT_BubbleScale::CT_BubbleScale()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("100%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_BubbleScale::~CT_BubbleScale()
{
......@@ -5952,11 +5988,12 @@ namespace OOX{
EElementType CT_MarkerStyle::getType(){return et_ct_markerstyle;}
CT_MarkerSize::CT_MarkerSize()
{
m_val = new unsigned char;
/*m_val = new unsigned char;
CString s_m_val("5");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_MarkerSize::~CT_MarkerSize()
{
......@@ -7080,6 +7117,8 @@ namespace OOX{
EElementType CT_Trendline::getType(){return et_ct_trendline;}
CT_TrendlineType::CT_TrendlineType()
{
/*m_val = new ST_TrendlineType;
*m_val = st_trendlinetypeLINEAR;*/
m_val = NULL;
}
CT_TrendlineType::~CT_TrendlineType()
......@@ -7121,11 +7160,12 @@ namespace OOX{
EElementType CT_TrendlineType::getType(){return et_ct_trendlinetype;}
CT_Order::CT_Order()
{
m_val = new unsigned char;
/*m_val = new unsigned char;
CString s_m_val("2");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_Order::~CT_Order()
{
......@@ -7163,11 +7203,12 @@ namespace OOX{
EElementType CT_Order::getType(){return et_ct_order;}
CT_Period::CT_Period()
{
m_val = new unsigned long;
/*m_val = new unsigned long;
CString s_m_val("2");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_Period::~CT_Period()
{
......@@ -7492,6 +7533,8 @@ namespace OOX{
EElementType CT_ErrDir::getType(){return et_ct_errdir;}
CT_ErrBarType::CT_ErrBarType()
{
/*m_val = new ST_ErrBarType;
*m_val = st_errbartypeBOTH;*/
m_val = NULL;
}
CT_ErrBarType::~CT_ErrBarType()
......@@ -7533,6 +7576,8 @@ namespace OOX{
EElementType CT_ErrBarType::getType(){return et_ct_errbartype;}
CT_ErrValType::CT_ErrValType()
{
/*m_val = new ST_ErrValType;
*m_val = st_errvaltypeFIXEDVAL;*/
m_val = NULL;
}
CT_ErrValType::~CT_ErrValType()
......@@ -8685,11 +8730,12 @@ namespace OOX{
EElementType CT_SurfaceChart::getType(){return et_ct_surfacechart;}
CT_SecondPieSize::CT_SecondPieSize()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("75%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_SecondPieSize::~CT_SecondPieSize()
{
......@@ -8727,6 +8773,8 @@ namespace OOX{
EElementType CT_SecondPieSize::getType(){return et_ct_secondpiesize;}
CT_SplitType::CT_SplitType()
{
/*m_val = new ST_SplitType;
*m_val = st_splittypeAUTO;*/
m_val = NULL;
}
CT_SplitType::~CT_SplitType()
......@@ -8768,6 +8816,8 @@ namespace OOX{
EElementType CT_SplitType::getType(){return et_ct_splittype;}
CT_OfPieType::CT_OfPieType()
{
/*m_val = new ST_OfPieType;
*m_val = st_ofpietypePIE;*/
m_val = NULL;
}
CT_OfPieType::~CT_OfPieType()
......@@ -9184,11 +9234,12 @@ namespace OOX{
EElementType CT_PieSer::getType(){return et_ct_pieser;}
CT_GapAmount::CT_GapAmount()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("150%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_GapAmount::~CT_GapAmount()
{
......@@ -9388,6 +9439,8 @@ namespace OOX{
EElementType CT_Bar3DChart::getType(){return et_ct_bar3dchart;}
CT_BarDir::CT_BarDir()
{
/*m_val = new ST_BarDir;
*m_val = st_bardirCOL;*/
m_val = NULL;
}
CT_BarDir::~CT_BarDir()
......@@ -9429,6 +9482,8 @@ namespace OOX{
EElementType CT_BarDir::getType(){return et_ct_bardir;}
CT_BarGrouping::CT_BarGrouping()
{
/*m_val = new ST_BarGrouping;
*m_val = st_bargroupingCLUSTERED;*/
m_val = NULL;
}
CT_BarGrouping::~CT_BarGrouping()
......@@ -9685,6 +9740,8 @@ namespace OOX{
EElementType CT_BarSer::getType(){return et_ct_barser;}
CT_Shape::CT_Shape()
{
/*m_val = new ST_Shape;
*m_val = st_shapeBOX;*/
m_val = NULL;
}
CT_Shape::~CT_Shape()
......@@ -9726,11 +9783,12 @@ namespace OOX{
EElementType CT_Shape::getType(){return et_ct_shape;}
CT_Overlap::CT_Overlap()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("0%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_Overlap::~CT_Overlap()
{
......@@ -9934,11 +9992,12 @@ namespace OOX{
EElementType CT_BarChart::getType(){return et_ct_barchart;}
CT_HoleSize::CT_HoleSize()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("10%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_HoleSize::~CT_HoleSize()
{
......@@ -10082,11 +10141,12 @@ namespace OOX{
EElementType CT_DoughnutChart::getType(){return et_ct_doughnutchart;}
CT_FirstSliceAng::CT_FirstSliceAng()
{
m_val = new unsigned long;
/*m_val = new unsigned long;
CString s_m_val("0");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_FirstSliceAng::~CT_FirstSliceAng()
{
......@@ -10503,6 +10563,8 @@ namespace OOX{
EElementType CT_ScatterSer::getType(){return et_ct_scatterser;}
CT_ScatterStyle::CT_ScatterStyle()
{
/*m_val = new ST_ScatterStyle;
*m_val = st_scatterstyleMARKER;*/
m_val = NULL;
}
CT_ScatterStyle::~CT_ScatterStyle()
......@@ -10813,6 +10875,8 @@ namespace OOX{
EElementType CT_RadarSer::getType(){return et_ct_radarser;}
CT_RadarStyle::CT_RadarStyle()
{
/*m_val = new ST_RadarStyle;
*m_val = st_radarstyleSTANDARD;*/
m_val = NULL;
}
CT_RadarStyle::~CT_RadarStyle()
......@@ -11539,6 +11603,8 @@ namespace OOX{
EElementType CT_Line3DChart::getType(){return et_ct_line3dchart;}
CT_Grouping::CT_Grouping()
{
/*m_val = new ST_Grouping;
*m_val = st_groupingSTANDARD;*/
m_val = NULL;
}
CT_Grouping::~CT_Grouping()
......@@ -12811,11 +12877,12 @@ namespace OOX{
EElementType CT_Surface::getType(){return et_ct_surface;}
CT_Perspective::CT_Perspective()
{
m_val = new unsigned char;
/*m_val = new unsigned char;
CString s_m_val("30");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_Perspective::~CT_Perspective()
{
......@@ -12853,11 +12920,12 @@ namespace OOX{
EElementType CT_Perspective::getType(){return et_ct_perspective;}
CT_DepthPercent::CT_DepthPercent()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("100%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_DepthPercent::~CT_DepthPercent()
{
......@@ -12895,11 +12963,12 @@ namespace OOX{
EElementType CT_DepthPercent::getType(){return et_ct_depthpercent;}
CT_RotY::CT_RotY()
{
m_val = new unsigned long;
/*m_val = new unsigned long;
CString s_m_val("0");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_RotY::~CT_RotY()
{
......@@ -12937,11 +13006,12 @@ namespace OOX{
EElementType CT_RotY::getType(){return et_ct_roty;}
CT_HPercent::CT_HPercent()
{
m_val = new CString;
/*m_val = new CString;
CString s_m_val("100%");
{
*m_val = s_m_val;
}
}*/
m_val = NULL;
}
CT_HPercent::~CT_HPercent()
{
......@@ -12979,11 +13049,12 @@ namespace OOX{
EElementType CT_HPercent::getType(){return et_ct_hpercent;}
CT_RotX::CT_RotX()
{
m_val = new char;
/*m_val = new char;
CString s_m_val("0");
{
*m_val = _ttoi(s_m_val);
}
}*/
m_val = NULL;
}
CT_RotX::~CT_RotX()
{
......
......@@ -2467,19 +2467,23 @@ namespace BinXlsxRW {
if(pPair->m_value->IsValid())
{
OOX::Spreadsheet::CCommentItem& oComment = *pPair->m_value;
SerializeCommon::CommentData* pSavedData = getSavedComment(oComment);
CAtlArray<SerializeCommon::CommentData*> aCommentDatas;
getSavedComment(oComment, aCommentDatas);
nCurPos = m_oBcw.WriteItemStart(c_oSerWorksheetsTypes::Comment);
// , , , Excel
WriteComment(oComment, pSavedData, oComment.m_oText);
WriteComment(oComment, aCommentDatas, oComment.m_oText);
m_oBcw.WriteItemEnd(nCurPos);
RELEASEOBJECT(pSavedData);
for(int i = 0, length = aCommentDatas.GetCount(); i < length; ++i)
{
RELEASEOBJECT(aCommentDatas[i]);
}
aCommentDatas.RemoveAll();
}
}
};
SerializeCommon::CommentData* getSavedComment(OOX::Spreadsheet::CCommentItem& oComment)
void getSavedComment(OOX::Spreadsheet::CCommentItem& oComment, CAtlArray<SerializeCommon::CommentData*>& aDatas)
{
SerializeCommon::CommentData* pCommentData = NULL;
if(oComment.m_sGfxdata.IsInit())
{
const CString& sGfxData = oComment.m_sGfxdata.get2();
......@@ -2501,17 +2505,15 @@ namespace BinXlsxRW {
oBufferedStream.SetBuffer(&oBuffer);
oBufferedStream.Create((BYTE*)(pBuffer + nSignatureSize + nDataLengthSize), nLength);
pCommentData = new SerializeCommon::CommentData();
BinaryCommentReader oBinaryCommentReader(oBufferedStream, NULL);
oBinaryCommentReader.ReadCommentDataExternal(nLength, pCommentData);
oBinaryCommentReader.ReadExternal(nLength, &aDatas);
}
sGfxDataA.ReleaseBuffer();
RELEASEARRAYOBJECTS(pBuffer);
}
}
return pCommentData;
}
void WriteComment(OOX::Spreadsheet::CCommentItem& oComment, SerializeCommon::CommentData* pCommentData, nullable<OOX::Spreadsheet::CSi>& oCommentText)
void WriteComment(OOX::Spreadsheet::CCommentItem& oComment, CAtlArray<SerializeCommon::CommentData*>& aCommentDatas, nullable<OOX::Spreadsheet::CSi>& oCommentText)
{
int nCurPos = 0;
int nRow = 0;
......@@ -2533,7 +2535,7 @@ namespace BinXlsxRW {
m_oBcw.m_oStream.WriteByte(c_oSer_Comments::CommentDatas);
m_oBcw.m_oStream.WriteByte(c_oSerPropLenType::Variable);
nCurPos = m_oBcw.WriteItemWithLengthStart();
WriteCommentData(oComment, pCommentData, oCommentText);
WriteCommentData(oComment, aCommentDatas, oCommentText);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
if(oComment.m_nLeft.IsInit())
......@@ -2621,13 +2623,28 @@ namespace BinXlsxRW {
m_oBcw.m_oStream.WriteBool(oComment.m_bSize.get());
}
}
void WriteCommentData(OOX::Spreadsheet::CCommentItem& oComment, SerializeCommon::CommentData* pCommentData, nullable<OOX::Spreadsheet::CSi>& oCommentText)
void WriteCommentData(OOX::Spreadsheet::CCommentItem& oComment, CAtlArray<SerializeCommon::CommentData*>& aCommentDatas, nullable<OOX::Spreadsheet::CSi>& oCommentText)
{
int nCurPos = 0;
if(aCommentDatas.GetCount() > 0)
{
for(int i = 0, length = aCommentDatas.GetCount(); i < length; ++i)
{
nCurPos = m_oBcw.WriteItemStart(c_oSer_Comments::CommentData);
if(0 == i)
WriteCommentDataContent(&oComment, aCommentDatas[i], &oCommentText);
else
WriteCommentDataContent(NULL, aCommentDatas[i], NULL);
m_oBcw.WriteItemEnd(nCurPos);
}
}
else
{
nCurPos = m_oBcw.WriteItemStart(c_oSer_Comments::CommentData);
WriteCommentDataContent(&oComment, pCommentData, &oCommentText);
WriteCommentDataContent(&oComment, NULL, &oCommentText);
m_oBcw.WriteItemEnd(nCurPos);
}
}
void WriteCommentDataContent(OOX::Spreadsheet::CCommentItem* pComment, SerializeCommon::CommentData* pCommentData, nullable<OOX::Spreadsheet::CSi>* pCommentText)
{
int nCurPos = 0;
......@@ -2637,16 +2654,13 @@ namespace BinXlsxRW {
m_oBcw.m_oStream.WriteByte(c_oSer_CommentData::Text);
m_oBcw.m_oStream.WriteString2(sText);
}
if(NULL != pCommentData)
{
if(NULL == pCommentText)
{
if(!pCommentData->sText.IsEmpty())
else if(NULL != pCommentData && !pCommentData->sText.IsEmpty())
{
m_oBcw.m_oStream.WriteByte(c_oSer_CommentData::Text);
m_oBcw.m_oStream.WriteString2(pCommentData->sText);
}
}
if(NULL != pCommentData)
{
if(!pCommentData->sTime.IsEmpty())
{
m_oBcw.m_oStream.WriteByte(c_oSer_CommentData::Time);
......
......@@ -1524,9 +1524,23 @@ namespace BinXlsxRW {
{
return Read1(length, &BinaryCommentReader::ReadComments, this, poResult);
}
int ReadCommentDataExternal(long length, void* poResult)
int ReadExternal(long length, void* poResult)
{
return Read1(length, &BinaryCommentReader::ReadCommentData, this, poResult);
return Read1(length, &BinaryCommentReader::ReadCommentDatasExternal, this, poResult);
}
int ReadCommentDatasExternal(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
CAtlArray<SerializeCommon::CommentData*>* pCommentDatas = static_cast<CAtlArray<SerializeCommon::CommentData*>*>(poResult);
if ( c_oSer_Comments::CommentData == type )
{
SerializeCommon::CommentData* oCommentData = new SerializeCommon::CommentData();
res = Read1(length, &BinaryCommentReader::ReadCommentData, this, oCommentData);
pCommentDatas->Add(oCommentData);
}
else
res = c_oSerConstants::ReadUnknown;
return res;
}
int ReadComments(BYTE type, long length, void* poResult)
{
......@@ -1557,7 +1571,46 @@ namespace BinXlsxRW {
else if ( c_oSer_Comments::Col == type )
pNewComment->m_nCol = m_oBufferedStream.ReadLong();
else if ( c_oSer_Comments::CommentDatas == type )
{
if(!pNewComment->m_sGfxdata.IsInit())
{
int nStartPos = m_oBufferedStream.GetPosition();
BYTE* pSourceBuffer = m_oBufferedStream.ReadPointer(length);
m_oBufferedStream.Seek(nStartPos);
CStringA sSignature(_T("XLST"));
int nSignatureSize = sSignature.GetLength();
int nDataLengthSize = sizeof(long);
int nJunkSize = 2;
int nWriteBufferLength = nSignatureSize + nDataLengthSize + length + nJunkSize;
BYTE* pWriteBuffer = new BYTE[nWriteBufferLength];
memcpy(pWriteBuffer, sSignature.GetBuffer(), nSignatureSize);
sSignature.ReleaseBuffer();
memcpy(pWriteBuffer + nSignatureSize, &length, nDataLengthSize);
memcpy(pWriteBuffer + nSignatureSize + nDataLengthSize, pSourceBuffer, length);
// 0, Excel .
memset(pWriteBuffer + nSignatureSize + nDataLengthSize + length, 0, nJunkSize);
int nBase64BufferLen = Base64::Base64EncodeGetRequiredLength(nWriteBufferLength, Base64::B64_BASE64_FLAG_NONE);
BYTE* pbBase64Buffer = new BYTE[nBase64BufferLen];
CString sGfxdata;
if(TRUE == Base64::Base64Encode(pWriteBuffer, nWriteBufferLength, (LPSTR)pbBase64Buffer, &nBase64BufferLen, Base64::B64_BASE64_FLAG_NONE))
{
sGfxdata = CString((LPSTR)pbBase64Buffer, nBase64BufferLen);
// Excel
sGfxdata.Append(_T("\r\n"));
}
RELEASEARRAYOBJECTS(pbBase64Buffer);
RELEASEARRAYOBJECTS(pWriteBuffer);
if(!sGfxdata.IsEmpty())
{
pNewComment->m_sGfxdata.Init();
pNewComment->m_sGfxdata->Append(sGfxdata);
}
}
res = Read1(length, &BinaryCommentReader::ReadCommentDatas, this, pNewComment);
}
else if ( c_oSer_Comments::Left == type )
pNewComment->m_nLeft = m_oBufferedStream.ReadLong();
else if ( c_oSer_Comments::Top == type )
......@@ -1596,43 +1649,6 @@ namespace BinXlsxRW {
OOX::Spreadsheet::CCommentItem* pNewComment = static_cast<OOX::Spreadsheet::CCommentItem*>(poResult);
if ( c_oSer_Comments::CommentData == type )
{
if(!pNewComment->m_sGfxdata.IsInit())
{
int nStartPos = m_oBufferedStream.GetPosition();
BYTE* pSourceBuffer = m_oBufferedStream.ReadPointer(length);
m_oBufferedStream.Seek(nStartPos);
CStringA sSignature(_T("XLST"));
int nSignatureSize = sSignature.GetLength();
int nDataLengthSize = sizeof(long);
int nJunkSize = 2;
int nWriteBufferLength = nSignatureSize + nDataLengthSize + length + nJunkSize;
BYTE* pWriteBuffer = new BYTE[nWriteBufferLength];
memcpy(pWriteBuffer, sSignature.GetBuffer(), nSignatureSize);
sSignature.ReleaseBuffer();
memcpy(pWriteBuffer + nSignatureSize, &length, nDataLengthSize);
memcpy(pWriteBuffer + nSignatureSize + nDataLengthSize, pSourceBuffer, length);
// 0, Excel .
memset(pWriteBuffer + nSignatureSize + nDataLengthSize + length, 0, nJunkSize);
int nBase64BufferLen = Base64::Base64EncodeGetRequiredLength(nWriteBufferLength, Base64::B64_BASE64_FLAG_NONE);
BYTE* pbBase64Buffer = new BYTE[nBase64BufferLen];
CString sGfxdata;
if(TRUE == Base64::Base64Encode(pWriteBuffer, nWriteBufferLength, (LPSTR)pbBase64Buffer, &nBase64BufferLen, Base64::B64_BASE64_FLAG_NONE))
{
sGfxdata = CString((LPSTR)pbBase64Buffer, nBase64BufferLen);
// Excel
sGfxdata.Append(_T("\r\n"));
}
RELEASEARRAYOBJECTS(pbBase64Buffer);
RELEASEARRAYOBJECTS(pWriteBuffer);
if(!sGfxdata.IsEmpty())
{
pNewComment->m_sGfxdata.Init();
pNewComment->m_sGfxdata->Append(sGfxdata);
}
}
if(!pNewComment->m_oText.IsInit())
{
SerializeCommon::CommentData oCommentData;
......
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