diff --git a/src/xlsx/xlsxpackage.cpp b/src/xlsx/xlsxpackage.cpp index 94abde9..dd8f7a6 100644 --- a/src/xlsx/xlsxpackage.cpp +++ b/src/xlsx/xlsxpackage.cpp @@ -139,7 +139,7 @@ bool Package::parsePackage(QIODevice *packageDevice) QString xlworkbook_Dir = xlworkbook_PathList[0]; QString xlworkbook_Name = xlworkbook_PathList[1]; QSharedPointer book = Workbook::loadFromXmlData(zipReader.fileData(xlworkbook_Path)); - QList > sheetNameIdPairList = book->d_func()->sheetNameIdPairList; + QList sheetNameIdPairList = book->d_func()->sheetItemInfoList; Relationships xlworkbook_Rels = Relationships::loadFromXmlData( zipReader.fileData(xlworkbook_Dir+QStringLiteral("/_rels/")+xlworkbook_Name+QStringLiteral(".rels"))); @@ -177,11 +177,11 @@ bool Package::parsePackage(QIODevice *packageDevice) return false; for (int i=0; i pair = sheetNameIdPairList[i]; - QString worksheet_rId = pair.second; + XlsxSheetItemInfo info = sheetNameIdPairList[i]; + QString worksheet_rId = info.rId; QString name = xlworkbook_Rels.getRelationshipById(worksheet_rId).target; QString worksheet_path = xlworkbook_Dir + QLatin1String("/") + name; - Worksheet *sheet = m_document->workbook()->addWorksheet(pair.first); + Worksheet *sheet = m_document->workbook()->addWorksheet(info.name, info.sheetId); sheet->loadFromXmlData(zipReader.fileData(worksheet_path)); } diff --git a/src/xlsx/xlsxworkbook.cpp b/src/xlsx/xlsxworkbook.cpp index 83ae267..8f8e989 100755 --- a/src/xlsx/xlsxworkbook.cpp +++ b/src/xlsx/xlsxworkbook.cpp @@ -136,6 +136,21 @@ Worksheet *Workbook::addWorksheet(const QString &name) return insertWorkSheet(d->worksheets.size(), name); } +/*! + * \internal + * Used only when load the xlsx file!! + */ +Worksheet *Workbook::addWorksheet(const QString &name, int sheetId) +{ + Q_D(Workbook); + if (sheetId > d->last_sheet_id) + d->last_sheet_id = sheetId; + + Worksheet *sheet = new Worksheet(name, sheetId, this); + d->worksheets.append(QSharedPointer(sheet)); + return sheet; +} + Worksheet *Workbook::insertWorkSheet(int index, const QString &name) { Q_D(Workbook); @@ -325,10 +340,14 @@ QSharedPointer Workbook::loadFromXmlFile(QIODevice *device) QXmlStreamReader::TokenType token = reader.readNext(); if (token == QXmlStreamReader::StartElement) { if (reader.name() == QLatin1String("sheet")) { + XlsxSheetItemInfo info; QXmlStreamAttributes attributes = reader.attributes(); - QString sheetName = attributes.value(QLatin1String("name")).toString(); - QString rId = attributes.value(QLatin1String("r:id")).toString(); - book->d_func()->sheetNameIdPairList.append(QPair(sheetName, rId)); + info.name = attributes.value(QLatin1String("name")).toString(); + info.sheetId = attributes.value(QLatin1String("sheetId")).toInt(); + info.rId = attributes.value(QLatin1String("r:id")).toString(); + if (attributes.hasAttribute(QLatin1String("state"))) + info.state = attributes.value(QLatin1String("state")).toString(); + book->d_func()->sheetItemInfoList.append(info); } else if (reader.name() == QLatin1String("workbookPr")) { QXmlStreamAttributes attrs = reader.attributes(); if (attrs.hasAttribute(QLatin1String("date1904"))) diff --git a/src/xlsx/xlsxworkbook.h b/src/xlsx/xlsxworkbook.h index 381ac90..198285a 100755 --- a/src/xlsx/xlsxworkbook.h +++ b/src/xlsx/xlsxworkbook.h @@ -85,7 +85,7 @@ private: QList images(); QList drawings(); void prepareDrawings(); - + Worksheet *addWorksheet(const QString &name, int sheetId); WorkbookPrivate * const d_ptr; }; diff --git a/src/xlsx/xlsxworkbook_p.h b/src/xlsx/xlsxworkbook_p.h index 7eb01b6..daced11 100644 --- a/src/xlsx/xlsxworkbook_p.h +++ b/src/xlsx/xlsxworkbook_p.h @@ -30,6 +30,16 @@ namespace QXlsx { +struct XlsxSheetItemInfo +{ + XlsxSheetItemInfo(){} + + QString name; + int sheetId; + QString rId; + QString state; +}; + class WorkbookPrivate { Q_DECLARE_PUBLIC(Workbook) @@ -44,7 +54,7 @@ public: QList images; QList drawings; - QList > sheetNameIdPairList;//Data from xml file + QList sheetItemInfoList;//Data from xml file bool strings_to_numbers_enabled; bool date1904;