File indexing completed on 2025-01-19 13:27:37
0001 /* 0002 * This file is part of Office 2007 Filters for Calligra 0003 * 0004 * Copyright (C) 2010 Sebastian Sauer <sebsauer@kdab.com> 0005 * Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 0006 * 0007 * Contact: Suresh Chande suresh.chande@nokia.com 0008 * 0009 * This library is free software; you can redistribute it and/or 0010 * modify it under the terms of the GNU Lesser General Public License 0011 * version 2.1 as published by the Free Software Foundation. 0012 * 0013 * This library is distributed in the hope that it will be useful, but 0014 * WITHOUT ANY WARRANTY; without even the implied warranty of 0015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0016 * Lesser General Public License for more details. 0017 * 0018 * You should have received a copy of the GNU Lesser General Public 0019 * License along with this library; if not, write to the Free Software 0020 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 0021 * 02110-1301 USA 0022 * 0023 */ 0024 0025 #ifndef XLSXXMLWORKSHEETREADER_H 0026 #define XLSXXMLWORKSHEETREADER_H 0027 0028 #include <KoBorder.h> // needed by DrawingMLMethods 0029 0030 //#include <MsooXmlThemesReader.h> 0031 #include <MsooXmlTheme.h> 0032 #include <MsooXmlCommonReader.h> 0033 0034 #include <KoGenStyle.h> 0035 #include <styles/KoCharacterStyle.h> 0036 0037 #include "XlsxXmlDocumentReader.h" 0038 0039 class XlsxXmlWorksheetReaderContext; 0040 class XlsxComments; 0041 class XlsxStyles; 0042 class XlsxImport; 0043 class Sheet; 0044 0045 //! A class reading MSOOXML XLSX markup - xl/worksheets/sheet*.xml part. 0046 class XlsxXmlWorksheetReader : public MSOOXML::MsooXmlCommonReader 0047 { 0048 public: 0049 explicit XlsxXmlWorksheetReader(KoOdfWriters *writers); 0050 0051 ~XlsxXmlWorksheetReader() override; 0052 0053 //! Reads/parses the XML. 0054 KoFilter::ConversionStatus read(MSOOXML::MsooXmlReaderContext* context = 0) override; 0055 0056 protected: 0057 KoFilter::ConversionStatus readInternal(); 0058 KoFilter::ConversionStatus read_chartsheet(); 0059 KoFilter::ConversionStatus read_worksheet(); 0060 KoFilter::ConversionStatus read_dialogsheet(); 0061 KoFilter::ConversionStatus read_sheetHelper(const QString& type); 0062 KoFilter::ConversionStatus read_sheetFormatPr(); 0063 KoFilter::ConversionStatus read_cols(); 0064 KoFilter::ConversionStatus read_col(); 0065 KoFilter::ConversionStatus read_sheetData(); 0066 KoFilter::ConversionStatus read_conditionalFormatting(); 0067 KoFilter::ConversionStatus read_cfRule(); 0068 KoFilter::ConversionStatus read_formula(); 0069 KoFilter::ConversionStatus read_row(); 0070 KoFilter::ConversionStatus read_c(); 0071 KoFilter::ConversionStatus read_f(); 0072 KoFilter::ConversionStatus read_v(); 0073 KoFilter::ConversionStatus read_mergeCell(); 0074 KoFilter::ConversionStatus read_mergeCells(); 0075 KoFilter::ConversionStatus read_drawing(); 0076 KoFilter::ConversionStatus read_legacyDrawing(); 0077 KoFilter::ConversionStatus read_hyperlink(); 0078 KoFilter::ConversionStatus read_hyperlinks(); 0079 KoFilter::ConversionStatus read_picture(); 0080 KoFilter::ConversionStatus read_autoFilter(); 0081 KoFilter::ConversionStatus read_filterColumn(); 0082 KoFilter::ConversionStatus read_filters(); 0083 KoFilter::ConversionStatus read_filter(); 0084 KoFilter::ConversionStatus read_customFilters(); 0085 KoFilter::ConversionStatus read_customFilter(); 0086 KoFilter::ConversionStatus read_oleObjects(); 0087 KoFilter::ConversionStatus read_oleObject(); 0088 KoFilter::ConversionStatus read_controls(); 0089 KoFilter::ConversionStatus read_control(); 0090 KoFilter::ConversionStatus read_tableParts(); 0091 KoFilter::ConversionStatus read_tablePart(); 0092 0093 XlsxXmlWorksheetReaderContext* m_context; 0094 0095 KoGenStyle m_tableStyle; 0096 //! for table:table-column 0097 int m_columnCount; 0098 //! for table:table-row 0099 int m_currentRow; 0100 //! for table:table-cell 0101 int m_currentColumn; 0102 //! Used in read_f() and read_v() 0103 QString m_value; 0104 0105 // for optimization 0106 static const char officeValue[]; 0107 static const char officeDateValue[]; 0108 static const char officeTimeValue[]; 0109 static const char officeStringValue[]; 0110 static const char officeBooleanValue[]; 0111 0112 private: 0113 void init(); 0114 ///Column width measured as the number of characters of the maximum digit width of the 0115 ///numbers 0, 1, 2,..., 9 as rendered in the normal style's font... 0116 /// @return column width in cm 0117 QString computeColumnWidth(qreal widthNumber) const; 0118 0119 QString processRowStyle(qreal height = -1.0); 0120 0121 void showWarningAboutWorksheetSize(); 0122 void saveColumnStyle(const QString& widthString); 0123 void appendTableColumns(int columns, const QString& width = QString()); 0124 void appendTableCells(int cells); 0125 //! Saves annotation element (comments) for cell specified by @a col and @a row it there is any annotation defined. 0126 void saveAnnotation(int col, int row); 0127 0128 typedef QPair<int, QMap<QString, QString> > Condition; 0129 QList<Condition> m_conditionalIndices; 0130 QMap<QString, QList<Condition> > m_conditionalStyles; 0131 0132 QString m_formula; 0133 0134 #include <MsooXmlCommonReaderMethods.h> 0135 #include <MsooXmlCommonReaderDrawingMLMethods.h> 0136 0137 class Private; 0138 Private* const d; 0139 }; 0140 0141 class XlsxXmlWorksheetReaderContext : public MSOOXML::MsooXmlReaderContext 0142 { 0143 public: 0144 //! Creates the context object. 0145 XlsxXmlWorksheetReaderContext( 0146 uint _worksheetNumber, 0147 uint _numberOfWorkSheets, 0148 const QString& _worksheetName, 0149 const QString& _state, 0150 const QString _path, const QString _file, 0151 MSOOXML::DrawingMLTheme*& _themes, 0152 const QVector<QString>& _sharedStrings, 0153 const XlsxComments& _comments, 0154 const XlsxStyles& _styles, 0155 MSOOXML::MsooXmlRelationships& _relationships, 0156 XlsxImport* _import, 0157 QMap<QString, QString> _oleReplacements, 0158 QMap<QString, QString> _oleBeginFrames, 0159 QVector<XlsxXmlDocumentReaderContext::AutoFilter>& autoFilters); 0160 0161 ~XlsxXmlWorksheetReaderContext() override; 0162 0163 Sheet* sheet; 0164 const uint worksheetNumber; 0165 const uint numberOfWorkSheets; 0166 const QString worksheetName; 0167 QString state; 0168 MSOOXML::DrawingMLTheme* themes; 0169 const QVector<QString> *sharedStrings; 0170 const XlsxComments* comments; 0171 const XlsxStyles* styles; 0172 0173 XlsxImport* import; 0174 const QString path; 0175 const QString file; 0176 0177 QMap<QString, QString> oleReplacements; 0178 QMap<QString, QString> oleFrameBegins; 0179 0180 XlsxXmlDocumentReaderContext::AutoFilterCondition currentFilterCondition; 0181 QVector<XlsxXmlDocumentReaderContext::AutoFilter>& autoFilters; 0182 0183 bool firstRoundOfReading; 0184 0185 QList<QMap<QString, QString> > conditionalStyleForPosition(const QString& positionLetter, int positionNumber); 0186 0187 QList<QPair<QString, QMap<QString, QString> > >conditionalStyles; 0188 }; 0189 0190 #endif