mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Fix richStr conversion
This commit is contained in:
@ -194,6 +194,41 @@ void OOX::Spreadsheet::CXlsb::PrepareSi()
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
//подготовка шрифтов в richString для конвертации в xlsb
|
||||
void OOX::Spreadsheet::CXlsb::PrepareRichStr()
|
||||
{
|
||||
if(m_pStyles && m_pStyles->m_oFonts.IsInit())
|
||||
{
|
||||
auto lambdaSi = [&](OOX::Spreadsheet::CSi* si)
|
||||
{
|
||||
for(size_t i = 0, length = si->m_arrItems.size(); i < length; ++i)
|
||||
{
|
||||
OOX::Spreadsheet::WritingElement* we = si->m_arrItems[i];
|
||||
if(OOX::et_x_r == we->getType())
|
||||
{
|
||||
OOX::Spreadsheet::CRun* pRun = static_cast<OOX::Spreadsheet::CRun*>(we);
|
||||
if(pRun->m_oRPr.IsInit() && !pRun->m_oRPr->m_nFontIndex.IsInit())
|
||||
{
|
||||
auto font = pRun->m_oRPr->toFont();
|
||||
m_pStyles->m_oFonts->AddFont(font);
|
||||
pRun->m_oRPr->m_nFontIndex.Init();
|
||||
pRun->m_oRPr->m_nFontIndex = m_pStyles->m_oFonts->m_arrItems.size() - 1;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if(m_pSharedStrings)
|
||||
{
|
||||
for(auto &si : m_pSharedStrings->m_arrItems)
|
||||
{
|
||||
lambdaSi(si);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//отложенный парсинг SheetData
|
||||
void OOX::Spreadsheet::CXlsb::ReadSheetData()
|
||||
{
|
||||
|
||||
@ -72,6 +72,7 @@ namespace OOX
|
||||
void LinkTables();
|
||||
void ReadSheetData();
|
||||
void WriteSheetData();
|
||||
void PrepareRichStr();
|
||||
void SetPropForWriteSheet(const std::wstring &sPath, OOX::CContentTypes& oContentTypes);
|
||||
void WriteSheet(CWorksheet* worksheet);
|
||||
|
||||
|
||||
@ -153,10 +153,10 @@ namespace OOX
|
||||
auto crunPtr = static_cast<CRun*>(m_arrItems[i]);
|
||||
ptr->fRichStr = true;
|
||||
USHORT ind = 0;
|
||||
XLSB::StrRun run;
|
||||
run.ich = ptr->str.value().size();
|
||||
ptr->str = ptr->str.value() + crunPtr->toBin(ind);
|
||||
XLSB::StrRun run;
|
||||
run.ifnt = ind;
|
||||
run.ich = ptr->str.value().size();
|
||||
ptr->rgsStrRun.push_back(run);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1488,6 +1488,26 @@ namespace OOX
|
||||
m_oVertAlign = font->m_oVertAlign;
|
||||
|
||||
}
|
||||
CFont* CRPr::toFont()
|
||||
{
|
||||
auto font(new CFont);
|
||||
font->m_oBold = m_oBold;
|
||||
font->m_oCharset = m_oCharset;
|
||||
font->m_oColor = m_oColor;
|
||||
font->m_oCondense = m_oCondense;
|
||||
font->m_oExtend = m_oExtend;
|
||||
font->m_oFamily = m_oFamily;
|
||||
font->m_oItalic = m_oItalic;
|
||||
font->m_oOutline = m_oOutline;
|
||||
font->m_oRFont = m_oRFont;
|
||||
font->m_oScheme = m_oScheme;
|
||||
font->m_oShadow = m_oShadow;
|
||||
font->m_oStrike = m_oStrike;
|
||||
font->m_oSz = m_oSz;
|
||||
font->m_oUnderline = m_oUnderline;
|
||||
font->m_oVertAlign = m_oVertAlign;
|
||||
return font;
|
||||
}
|
||||
|
||||
} //Spreadsheet
|
||||
} // OOX
|
||||
|
||||
@ -304,6 +304,7 @@ namespace OOX
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
void fromFont(CFont* font);
|
||||
CFont* CRPr::toFont();
|
||||
void fromXLSB (NSBinPptxRW::CBinaryFileReader& oStream, _UINT16 nType);
|
||||
void toXLSB (NSBinPptxRW::CXlsbBinaryWriter& oStream) const;
|
||||
_UINT32 getXLSBSize() const;
|
||||
|
||||
@ -165,6 +165,7 @@ namespace NExtractTools
|
||||
oXlsb.m_bWriteToXlsb = true;
|
||||
oXlsb.Read(oox_path);
|
||||
oXlsb.LinkTables();
|
||||
oXlsb.PrepareRichStr();
|
||||
|
||||
OOX::CContentTypes oContentTypes;
|
||||
oXlsb.SetPropForWriteSheet(sTo, oContentTypes);
|
||||
|
||||
Reference in New Issue
Block a user