Browse Source

Load orignal sheetId

master
Debao Zhang 11 years ago
parent
commit
ccd55974fa
  1. 8
      src/xlsx/xlsxpackage.cpp
  2. 25
      src/xlsx/xlsxworkbook.cpp
  3. 2
      src/xlsx/xlsxworkbook.h
  4. 12
      src/xlsx/xlsxworkbook_p.h

8
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<Workbook> book = Workbook::loadFromXmlData(zipReader.fileData(xlworkbook_Path));
QList<QPair<QString, QString> > sheetNameIdPairList = book->d_func()->sheetNameIdPairList;
QList<XlsxSheetItemInfo> 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<sheetNameIdPairList.size(); ++i) {
QPair<QString, QString> 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));
}

25
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<Worksheet>(sheet));
return sheet;
}
Worksheet *Workbook::insertWorkSheet(int index, const QString &name)
{
Q_D(Workbook);
@ -325,10 +340,14 @@ QSharedPointer<Workbook> 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<QString, QString>(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")))

2
src/xlsx/xlsxworkbook.h

@ -85,7 +85,7 @@ private:
QList<QImage> images();
QList<Drawing *> drawings();
void prepareDrawings();
Worksheet *addWorksheet(const QString &name, int sheetId);
WorkbookPrivate * const d_ptr;
};

12
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<QImage> images;
QList<Drawing *> drawings;
QList<QPair<QString, QString> > sheetNameIdPairList;//Data from xml file
QList<XlsxSheetItemInfo> sheetItemInfoList;//Data from xml file
bool strings_to_numbers_enabled;
bool date1904;

Loading…
Cancel
Save