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