Warning, file /office/calligra/filters/sheets/xlsx/XlsxXmlWorksheetReader.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * This file is part of Office 2007 Filters for Calligra 0003 * 0004 * SPDX-FileCopyrightText: 2010 Sebastian Sauer <sebsauer@kdab.com> 0005 * SPDX-FileCopyrightText: 2009-2010 Nokia Corporation and /or its subsidiary(-ies). 0006 * 0007 * Contact: Suresh Chande suresh.chande@nokia.com 0008 * 0009 * SPDX-License-Identifier: LGPL-2.1-only 0010 * 0011 */ 0012 0013 #ifndef XLSXXMLWORKSHEETREADER_H 0014 #define XLSXXMLWORKSHEETREADER_H 0015 0016 #include <KoBorder.h> // needed by DrawingMLMethods 0017 0018 //#include <MsooXmlThemesReader.h> 0019 #include <MsooXmlTheme.h> 0020 #include <MsooXmlCommonReader.h> 0021 0022 #include <KoGenStyle.h> 0023 #include <styles/KoCharacterStyle.h> 0024 0025 #include "XlsxXmlDocumentReader.h" 0026 0027 class XlsxXmlWorksheetReaderContext; 0028 class XlsxComments; 0029 class XlsxStyles; 0030 class XlsxImport; 0031 class Sheet; 0032 0033 //! A class reading MSOOXML XLSX markup - xl/worksheets/sheet*.xml part. 0034 class XlsxXmlWorksheetReader : public MSOOXML::MsooXmlCommonReader 0035 { 0036 public: 0037 explicit XlsxXmlWorksheetReader(KoOdfWriters *writers); 0038 0039 ~XlsxXmlWorksheetReader() override; 0040 0041 //! Reads/parses the XML. 0042 KoFilter::ConversionStatus read(MSOOXML::MsooXmlReaderContext* context = 0) override; 0043 0044 protected: 0045 KoFilter::ConversionStatus readInternal(); 0046 KoFilter::ConversionStatus read_chartsheet(); 0047 KoFilter::ConversionStatus read_worksheet(); 0048 KoFilter::ConversionStatus read_dialogsheet(); 0049 KoFilter::ConversionStatus read_sheetHelper(const QString& type); 0050 KoFilter::ConversionStatus read_sheetFormatPr(); 0051 KoFilter::ConversionStatus read_cols(); 0052 KoFilter::ConversionStatus read_col(); 0053 KoFilter::ConversionStatus read_sheetData(); 0054 KoFilter::ConversionStatus read_conditionalFormatting(); 0055 KoFilter::ConversionStatus read_cfRule(); 0056 KoFilter::ConversionStatus read_formula(); 0057 KoFilter::ConversionStatus read_row(); 0058 KoFilter::ConversionStatus read_c(); 0059 KoFilter::ConversionStatus read_f(); 0060 KoFilter::ConversionStatus read_v(); 0061 KoFilter::ConversionStatus read_mergeCell(); 0062 KoFilter::ConversionStatus read_mergeCells(); 0063 KoFilter::ConversionStatus read_drawing(); 0064 KoFilter::ConversionStatus read_legacyDrawing(); 0065 KoFilter::ConversionStatus read_hyperlink(); 0066 KoFilter::ConversionStatus read_hyperlinks(); 0067 KoFilter::ConversionStatus read_picture(); 0068 KoFilter::ConversionStatus read_autoFilter(); 0069 KoFilter::ConversionStatus read_filterColumn(); 0070 KoFilter::ConversionStatus read_filters(); 0071 KoFilter::ConversionStatus read_filter(); 0072 KoFilter::ConversionStatus read_customFilters(); 0073 KoFilter::ConversionStatus read_customFilter(); 0074 KoFilter::ConversionStatus read_oleObjects(); 0075 KoFilter::ConversionStatus read_oleObject(); 0076 KoFilter::ConversionStatus read_controls(); 0077 KoFilter::ConversionStatus read_control(); 0078 KoFilter::ConversionStatus read_tableParts(); 0079 KoFilter::ConversionStatus read_tablePart(); 0080 0081 XlsxXmlWorksheetReaderContext* m_context; 0082 0083 KoGenStyle m_tableStyle; 0084 //! for table:table-column 0085 int m_columnCount; 0086 //! for table:table-row 0087 int m_currentRow; 0088 //! for table:table-cell 0089 int m_currentColumn; 0090 //! Used in read_f() and read_v() 0091 QString m_value; 0092 0093 // for optimization 0094 static const char officeValue[]; 0095 static const char officeDateValue[]; 0096 static const char officeTimeValue[]; 0097 static const char officeStringValue[]; 0098 static const char officeBooleanValue[]; 0099 0100 private: 0101 void init(); 0102 ///Column width measured as the number of characters of the maximum digit width of the 0103 ///numbers 0, 1, 2,..., 9 as rendered in the normal style's font... 0104 /// @return column width in cm 0105 QString computeColumnWidth(qreal widthNumber) const; 0106 0107 QString processRowStyle(qreal height = -1.0); 0108 0109 void showWarningAboutWorksheetSize(); 0110 void saveColumnStyle(const QString& widthString); 0111 void appendTableColumns(int columns, const QString& width = QString()); 0112 void appendTableCells(int cells); 0113 //! Saves annotation element (comments) for cell specified by @a col and @a row it there is any annotation defined. 0114 void saveAnnotation(int col, int row); 0115 0116 typedef QPair<int, QMap<QString, QString> > Condition; 0117 QList<Condition> m_conditionalIndices; 0118 QMap<QString, QList<Condition> > m_conditionalStyles; 0119 0120 QString m_formula; 0121 0122 #include <MsooXmlCommonReaderMethods.h> 0123 #include <MsooXmlCommonReaderDrawingMLMethods.h> 0124 0125 class Private; 0126 Private* const d; 0127 }; 0128 0129 class XlsxXmlWorksheetReaderContext : public MSOOXML::MsooXmlReaderContext 0130 { 0131 public: 0132 //! Creates the context object. 0133 XlsxXmlWorksheetReaderContext( 0134 uint _worksheetNumber, 0135 uint _numberOfWorkSheets, 0136 const QString& _worksheetName, 0137 const QString& _state, 0138 const QString _path, const QString _file, 0139 MSOOXML::DrawingMLTheme*& _themes, 0140 const QVector<QString>& _sharedStrings, 0141 const XlsxComments& _comments, 0142 const XlsxStyles& _styles, 0143 MSOOXML::MsooXmlRelationships& _relationships, 0144 XlsxImport* _import, 0145 QMap<QString, QString> _oleReplacements, 0146 QMap<QString, QString> _oleBeginFrames, 0147 QVector<XlsxXmlDocumentReaderContext::AutoFilter>& autoFilters); 0148 0149 ~XlsxXmlWorksheetReaderContext() override; 0150 0151 Sheet* sheet; 0152 const uint worksheetNumber; 0153 const uint numberOfWorkSheets; 0154 const QString worksheetName; 0155 QString state; 0156 MSOOXML::DrawingMLTheme* themes; 0157 const QVector<QString> *sharedStrings; 0158 const XlsxComments* comments; 0159 const XlsxStyles* styles; 0160 0161 XlsxImport* import; 0162 const QString path; 0163 const QString file; 0164 0165 QMap<QString, QString> oleReplacements; 0166 QMap<QString, QString> oleFrameBegins; 0167 0168 XlsxXmlDocumentReaderContext::AutoFilterCondition currentFilterCondition; 0169 QVector<XlsxXmlDocumentReaderContext::AutoFilter>& autoFilters; 0170 0171 bool firstRoundOfReading; 0172 0173 QList<QMap<QString, QString> > conditionalStyleForPosition(const QString& positionLetter, int positionNumber); 0174 0175 QList<QPair<QString, QMap<QString, QString> > >conditionalStyles; 0176 }; 0177 0178 #endif