diff --git a/ASCOfficeDocxFile2/BinReader/ReaderClasses.h b/ASCOfficeDocxFile2/BinReader/ReaderClasses.h
index d12d2aed07..306ca428f1 100644
--- a/ASCOfficeDocxFile2/BinReader/ReaderClasses.h
+++ b/ASCOfficeDocxFile2/BinReader/ReaderClasses.h
@@ -2297,6 +2297,8 @@ public:
std::wstring Layout;
std::wstring tblPrChange;
std::wstring TableCellSpacing;
+ std::wstring Caption;
+ std::wstring Description;
bool IsEmpty()
{
return Jc.empty() && TableInd.empty() && TableW.empty() && TableCellMar.empty() && TableBorders.empty() && Shd.empty() && tblpPr.empty()&& Style.empty() && Look.empty() && tblPrChange.empty() && TableCellSpacing.empty() && RowBandSize.empty() && ColBandSize.empty();
@@ -2336,8 +2338,20 @@ public:
sRes += (TableCellMar);
if(false == Look.empty())
sRes += (Look);
+ if(!Caption.empty())
+ {
+ sRes += L"";
+ }
+ if(!Description.empty())
+ {
+ sRes += L"";
+ }
if(!tblPrChange.empty())
- sRes += (tblPrChange);
+ sRes += (tblPrChange);
sRes += L"";
return sRes;
}
diff --git a/ASCOfficeDocxFile2/BinReader/Readers.h b/ASCOfficeDocxFile2/BinReader/Readers.h
index 8aa31e3e10..fff01a6af5 100644
--- a/ASCOfficeDocxFile2/BinReader/Readers.h
+++ b/ASCOfficeDocxFile2/BinReader/Readers.h
@@ -1760,6 +1760,14 @@ public:
long nSpacing = SerializeCommon::Round( g_dKoef_mm_to_twips * dSpacing);
pWiterTblPr->TableCellSpacing = L"";
}
+ else if( c_oSerProp_tblPrType::tblCaption == type )
+ {
+ pWiterTblPr->Caption = m_oBufferedStream.GetString3(length);
+ }
+ else if( c_oSerProp_tblPrType::tblDescription == type )
+ {
+ pWiterTblPr->Description = m_oBufferedStream.GetString3(length);
+ }
else
res = c_oSerConstants::ReadUnknown;
return res;
diff --git a/ASCOfficeDocxFile2/BinWriter/BinReaderWriterDefines.h b/ASCOfficeDocxFile2/BinWriter/BinReaderWriterDefines.h
index 2bbb37945f..92cdc830a7 100644
--- a/ASCOfficeDocxFile2/BinWriter/BinReaderWriterDefines.h
+++ b/ASCOfficeDocxFile2/BinWriter/BinReaderWriterDefines.h
@@ -288,7 +288,9 @@ extern int g_nCurFormatVersion;
tblPrChange = 13,
TableCellSpacing = 14,
RowBandSize = 15,
- ColBandSize = 16
+ ColBandSize = 16,
+ tblCaption = 17,
+ tblDescription = 18
};}
namespace c_oSer_tblpPrType{enum c_oSer_tblpPrType
{
diff --git a/ASCOfficeDocxFile2/BinWriter/BinWriters.h b/ASCOfficeDocxFile2/BinWriter/BinWriters.h
index 5ce411d90f..d6fca1876c 100644
--- a/ASCOfficeDocxFile2/BinWriter/BinWriters.h
+++ b/ASCOfficeDocxFile2/BinWriter/BinWriters.h
@@ -1846,6 +1846,16 @@ namespace BinDocxRW
m_oBcw.WriteItemEnd(nCurPos);
}
}
+ if(tblPr.m_oTblCaption.IsInit())
+ {
+ m_oBcw.m_oStream.WriteBYTE(c_oSerProp_tblPrType::tblCaption);
+ m_oBcw.m_oStream.WriteStringW(tblPr.m_oTblCaption->ToString2());
+ }
+ if(tblPr.m_oTblDescription.IsInit())
+ {
+ m_oBcw.m_oStream.WriteBYTE(c_oSerProp_tblPrType::tblDescription);
+ m_oBcw.m_oStream.WriteStringW(tblPr.m_oTblDescription->ToString2());
+ }
}
void WriteTblMar(const OOX::Logic::CTblCellMar& cellMar)
{
diff --git a/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.cpp b/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.cpp
index d4604ce080..04eab7255c 100644
--- a/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.cpp
+++ b/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.cpp
@@ -31,6 +31,7 @@
*/
#include "DrawingExt.h"
#include "../../XlsxFormat/Worksheets/Sparkline.h"
+#include "../../XlsxFormat/Table/Table.h"
#include "../Diagram/DiagramData.h"
namespace OOX
@@ -43,6 +44,7 @@ namespace OOX
if ((m_sUri.IsInit()) && (*m_sUri == L"{63B3BB69-23CF-44E3-9099-C40C66FF867C}" ||
*m_sUri == L"{05C60535-1F16-4fd2-B633-F4F36F0B64E0}" ||
+ *m_sUri == L"{504A1905-F514-4f6f-8877-14C23A59335A}" ||
*m_sUri == L"http://schemas.microsoft.com/office/drawing/2008/diagram"))
{
int nCurDepth = oReader.GetDepth();
@@ -61,6 +63,10 @@ namespace OOX
{
m_oDataModelExt = oReader;
}
+ else if (sName == _T("table"))
+ {
+ m_oAltTextTable = oReader;
+ }
}
}
else
@@ -99,6 +105,12 @@ namespace OOX
m_oSparklineGroups->toXML(writer);
sResult += writer.GetData().c_str();
}
+ if(m_oAltTextTable.IsInit())
+ {
+ NSStringUtils::CStringBuilder writer;
+ m_oAltTextTable->toXML(writer);
+ sResult += writer.GetData().c_str();
+ }
sResult += _T("");
sResult += sNamespace;
diff --git a/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.h b/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.h
index 35fb91755a..d871052b14 100644
--- a/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.h
+++ b/Common/DocxFormat/Source/DocxFormat/Drawing/DrawingExt.h
@@ -41,6 +41,7 @@ namespace OOX
namespace Spreadsheet
{
class CSparklineGroups;
+ class CAltTextTable;
}
namespace Drawing
{
@@ -194,6 +195,7 @@ namespace OOX
nullable m_oCompatExt;
nullable m_oSparklineGroups;
nullable m_oDataModelExt;
+ nullable m_oAltTextTable;
};
//--------------------------------------------------------------------------------
// COfficeArtExtensionList 20.1.2.2.15 (Part 1)
diff --git a/Common/DocxFormat/Source/XlsxFormat/Table/Table.h b/Common/DocxFormat/Source/XlsxFormat/Table/Table.h
index 956ee2a13c..31916f5074 100644
--- a/Common/DocxFormat/Source/XlsxFormat/Table/Table.h
+++ b/Common/DocxFormat/Source/XlsxFormat/Table/Table.h
@@ -41,6 +41,57 @@ namespace OOX
{
namespace Spreadsheet
{
+ class CAltTextTable : public WritingElement
+ {
+ public:
+ WritingElementSpreadsheet_AdditionConstructors(CAltTextTable)
+ CAltTextTable()
+ {
+ }
+ virtual ~CAltTextTable()
+ {
+ }
+
+ public:
+ virtual std::wstring toXML() const
+ {
+ return _T("");
+ }
+ virtual void toXML(NSStringUtils::CStringBuilder& writer) const
+ {
+ writer.WriteString(L"");
+ }
+ virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
+ {
+ ReadAttributes( oReader );
+
+ if ( !oReader.IsEmptyNode() )
+ oReader.ReadTillEnd();
+ }
+
+ virtual EElementType getType () const
+ {
+ return et_AltTextTable;
+ }
+
+ private:
+ void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
+ {
+ // Читаем атрибуты
+ WritingElement_ReadAttributes_Start( oReader )
+
+ WritingElement_ReadAttributes_Read_if ( oReader, _T("altText"), m_oAltText )
+ WritingElement_ReadAttributes_Read_if ( oReader, _T("altTextSummary"), m_oAltTextSummary )
+
+ WritingElement_ReadAttributes_End( oReader )
+ }
+ public:
+ nullable m_oAltText;
+ nullable m_oAltTextSummary;
+ };
class CTableStyleInfo : public WritingElement
{
public:
@@ -315,7 +366,10 @@ namespace OOX
m_oTableColumns->toXML(writer);
if(m_oTableStyleInfo.IsInit())
m_oTableStyleInfo->toXML(writer);
-
+ if(m_oExtLst.IsInit())
+ {
+ writer.WriteString(m_oExtLst->toXMLWithNS(_T("")));
+ }
writer.WriteString(L"");
}
}
@@ -339,6 +393,8 @@ namespace OOX
m_oTableColumns = oReader;
else if ( _T("tableStyleInfo") == sName )
m_oTableStyleInfo = oReader;
+ else if (_T("extLst") == sName)
+ m_oExtLst = oReader;
}
}
@@ -372,6 +428,8 @@ namespace OOX
nullable m_oSortState;
nullable m_oTableColumns;
nullable m_oTableStyleInfo;
+
+ nullable m_oExtLst;
};
class CTablePart : public WritingElement
{
diff --git a/Common/DocxFormat/Source/XlsxFormat/WritingElement.h b/Common/DocxFormat/Source/XlsxFormat/WritingElement.h
index 07c70a286d..98206b65cc 100644
--- a/Common/DocxFormat/Source/XlsxFormat/WritingElement.h
+++ b/Common/DocxFormat/Source/XlsxFormat/WritingElement.h
@@ -385,6 +385,7 @@ namespace Spreadsheet
et_TableColumns,
et_TableColumn,
et_TableStyleInfo,
+ et_AltTextTable,
et_SortState,
et_SortCondition,
et_Autofilter,
diff --git a/XlsxSerializerCom/Common/BinReaderWriterDefines.h b/XlsxSerializerCom/Common/BinReaderWriterDefines.h
index 37527e38d2..2a1b93996a 100644
--- a/XlsxSerializerCom/Common/BinReaderWriterDefines.h
+++ b/XlsxSerializerCom/Common/BinReaderWriterDefines.h
@@ -494,7 +494,8 @@ namespace BinXlsxRW
SortState = 5,
TableColumns = 6,
TableStyleInfo = 7,
- HeaderRowCount = 8
+ HeaderRowCount = 8,
+ AltTextTable = 9
};}
namespace c_oSer_TableStyleInfo{enum c_oSer_TableStyleInfo
{
@@ -801,6 +802,11 @@ namespace BinXlsxRW
SparklineRef = 29,
SparklineSqRef = 30
};}
+ namespace c_oSer_AltTextTable{enum c_oSer_AltTextTable
+ {
+ AltText = 0,
+ AltTextSummary = 1
+ };}
}
#endif //
diff --git a/XlsxSerializerCom/Reader/BinaryWriter.h b/XlsxSerializerCom/Reader/BinaryWriter.h
index 48a4833a23..3f81380b4d 100644
--- a/XlsxSerializerCom/Reader/BinaryWriter.h
+++ b/XlsxSerializerCom/Reader/BinaryWriter.h
@@ -145,6 +145,33 @@ namespace BinXlsxRW {
WriteTableStyleInfo(oTable.m_oTableStyleInfo.get());
m_oBcw.WriteItemEnd(nCurPos);
}
+ if(oTable.m_oExtLst.IsInit())
+ {
+ for(size_t i = 0; i < oTable.m_oExtLst->m_arrExt.size(); ++i)
+ {
+ OOX::Drawing::COfficeArtExtension* pExt = oTable.m_oExtLst->m_arrExt[i];
+ if(pExt->m_oAltTextTable.IsInit())
+ {
+ nCurPos = m_oBcw.WriteItemStart(c_oSer_TablePart::AltTextTable);
+ WriteAltTextTable(pExt->m_oAltTextTable.get());
+ m_oBcw.WriteItemWithLengthEnd(nCurPos);
+ }
+ }
+ }
+ }
+ void WriteAltTextTable(const OOX::Spreadsheet::CAltTextTable& oAltTextTable)
+ {
+ int nCurPos = 0;
+ if(oAltTextTable.m_oAltText.IsInit())
+ {
+ m_oBcw.m_oStream.WriteBYTE(c_oSer_AltTextTable::AltText);
+ m_oBcw.m_oStream.WriteStringW(oAltTextTable.m_oAltText.get());
+ }
+ if(oAltTextTable.m_oAltTextSummary.IsInit())
+ {
+ m_oBcw.m_oStream.WriteBYTE(c_oSer_AltTextTable::AltTextSummary);
+ m_oBcw.m_oStream.WriteStringW(oAltTextTable.m_oAltTextSummary.get());
+ }
}
void WriteAutoFilter(const OOX::Spreadsheet::CAutofilter& oAutofilter)
{
diff --git a/XlsxSerializerCom/Writer/BinaryReader.h b/XlsxSerializerCom/Writer/BinaryReader.h
index 385e90256c..39b10e417b 100644
--- a/XlsxSerializerCom/Writer/BinaryReader.h
+++ b/XlsxSerializerCom/Writer/BinaryReader.h
@@ -192,6 +192,37 @@ namespace BinXlsxRW {
pTable->m_oTableStyleInfo.Init();
res = Read2(length, &BinaryTableReader::ReadTableStyleInfo, this, pTable->m_oTableStyleInfo.GetPointer());
}
+ else if(c_oSer_TablePart::AltTextTable == type)
+ {
+ OOX::Drawing::COfficeArtExtension* pOfficeArtExtension = new OOX::Drawing::COfficeArtExtension();
+ pOfficeArtExtension->m_oAltTextTable.Init();
+
+ res = Read1(length, &BinaryTableReader::ReadAltTextTable, this, pOfficeArtExtension->m_oAltTextTable.GetPointer());
+
+ pOfficeArtExtension->m_sUri.Init();
+ pOfficeArtExtension->m_sUri->append(_T("{504A1905-F514-4f6f-8877-14C23A59335A}"));
+ pOfficeArtExtension->m_sAdditionalNamespace = _T(" xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"");
+ pTable->m_oExtLst.Init();
+ pTable->m_oExtLst->m_arrExt.push_back(pOfficeArtExtension);
+ }
+ else
+ res = c_oSerConstants::ReadUnknown;
+ return res;
+ }
+ int ReadAltTextTable(BYTE type, long length, void* poResult)
+ {
+ int res = c_oSerConstants::ReadOk;
+ OOX::Spreadsheet::CAltTextTable* pAltTextTable = static_cast(poResult);
+ if(c_oSer_AltTextTable::AltText == type)
+ {
+ pAltTextTable->m_oAltText.Init();
+ pAltTextTable->m_oAltText->append(m_oBufferedStream.GetString3(length));
+ }
+ else if(c_oSer_AltTextTable::AltTextSummary == type)
+ {
+ pAltTextTable->m_oAltTextSummary.Init();
+ pAltTextTable->m_oAltTextSummary->append(m_oBufferedStream.GetString3(length));
+ }
else
res = c_oSerConstants::ReadUnknown;
return res;