Code refactoring: relationships of workbook
This commit is contained in:
@@ -137,14 +137,12 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
QString xlworkbook_Path = rels_xl[0].target;
|
QString xlworkbook_Path = rels_xl[0].target;
|
||||||
QStringList xlworkbook_PathList = splitPath(xlworkbook_Path);
|
QStringList xlworkbook_PathList = splitPath(xlworkbook_Path);
|
||||||
QString xlworkbook_Dir = xlworkbook_PathList[0];
|
QString xlworkbook_Dir = xlworkbook_PathList[0];
|
||||||
QString xlworkbook_Name = xlworkbook_PathList[1];
|
workbook->relationships().loadFromXmlData(zipReader.fileData(getRelFilePath(xlworkbook_Path)));
|
||||||
workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path));
|
workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path));
|
||||||
QList<XlsxSheetItemInfo> sheetNameIdPairList = workbook->d_func()->sheetItemInfoList;
|
QList<XlsxSheetItemInfo> sheetNameIdPairList = workbook->d_func()->sheetItemInfoList;
|
||||||
Relationships xlworkbook_Rels;
|
|
||||||
xlworkbook_Rels.loadFromXmlData(zipReader.fileData(xlworkbook_Dir+QStringLiteral("/_rels/")+xlworkbook_Name+QStringLiteral(".rels")));
|
|
||||||
|
|
||||||
//load styles
|
//load styles
|
||||||
QList<XlsxRelationship> rels_styles = xlworkbook_Rels.documentRelationships(QStringLiteral("/styles"));
|
QList<XlsxRelationship> rels_styles = workbook->relationships().documentRelationships(QStringLiteral("/styles"));
|
||||||
if (!rels_styles.isEmpty()) {
|
if (!rels_styles.isEmpty()) {
|
||||||
//In normal case this should be styles.xml which in xl
|
//In normal case this should be styles.xml which in xl
|
||||||
QString name = rels_styles[0].target;
|
QString name = rels_styles[0].target;
|
||||||
@@ -155,7 +153,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load sharedStrings
|
//load sharedStrings
|
||||||
QList<XlsxRelationship> rels_sharedStrings = xlworkbook_Rels.documentRelationships(QStringLiteral("/sharedStrings"));
|
QList<XlsxRelationship> rels_sharedStrings = workbook->relationships().documentRelationships(QStringLiteral("/sharedStrings"));
|
||||||
if (!rels_sharedStrings.isEmpty()) {
|
if (!rels_sharedStrings.isEmpty()) {
|
||||||
//In normal case this should be sharedStrings.xml which in xl
|
//In normal case this should be sharedStrings.xml which in xl
|
||||||
QString name = rels_sharedStrings[0].target;
|
QString name = rels_sharedStrings[0].target;
|
||||||
@@ -164,7 +162,7 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load theme
|
//load theme
|
||||||
QList<XlsxRelationship> rels_theme = xlworkbook_Rels.documentRelationships(QStringLiteral("/theme"));
|
QList<XlsxRelationship> rels_theme = workbook->relationships().documentRelationships(QStringLiteral("/theme"));
|
||||||
if (!rels_theme.isEmpty()) {
|
if (!rels_theme.isEmpty()) {
|
||||||
//In normal case this should be theme/theme1.xml which in xl
|
//In normal case this should be theme/theme1.xml which in xl
|
||||||
QString name = rels_theme[0].target;
|
QString name = rels_theme[0].target;
|
||||||
@@ -173,13 +171,13 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load worksheets
|
//load worksheets
|
||||||
QList<XlsxRelationship> rels_worksheets = xlworkbook_Rels.documentRelationships(QStringLiteral("/worksheet"));
|
QList<XlsxRelationship> rels_worksheets = workbook->relationships().documentRelationships(QStringLiteral("/worksheet"));
|
||||||
if (rels_worksheets.isEmpty())
|
if (rels_worksheets.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (int i=0; i<sheetNameIdPairList.size(); ++i) {
|
for (int i=0; i<sheetNameIdPairList.size(); ++i) {
|
||||||
XlsxSheetItemInfo info = sheetNameIdPairList[i];
|
XlsxSheetItemInfo info = sheetNameIdPairList[i];
|
||||||
QString worksheet_path = xlworkbook_Dir + QLatin1String("/") + xlworkbook_Rels.getRelationshipById(info.rId).target;
|
QString worksheet_path = xlworkbook_Dir + QLatin1String("/") + workbook->relationships().getRelationshipById(info.rId).target;
|
||||||
QString rel_path = getRelFilePath(worksheet_path);
|
QString rel_path = getRelFilePath(worksheet_path);
|
||||||
Worksheet *sheet = workbook->addWorksheet(info.name, info.sheetId);
|
Worksheet *sheet = workbook->addWorksheet(info.name, info.sheetId);
|
||||||
//If the .rel file exists, load it.
|
//If the .rel file exists, load it.
|
||||||
@@ -219,14 +217,7 @@ bool DocumentPrivate::savePackage(QIODevice *device) const
|
|||||||
|
|
||||||
// save workbook xml file
|
// save workbook xml file
|
||||||
zipWriter.addFile(QStringLiteral("xl/workbook.xml"), workbook->saveToXmlData());
|
zipWriter.addFile(QStringLiteral("xl/workbook.xml"), workbook->saveToXmlData());
|
||||||
Relationships rels;
|
zipWriter.addFile(QStringLiteral("xl/_rels/workbook.xml.rels"), workbook->relationships().saveToXmlData());
|
||||||
for (int i=0; i<workbook->worksheetCount(); ++i)
|
|
||||||
rels.addDocumentRelationship(QStringLiteral("/worksheet"), QStringLiteral("worksheets/sheet%1.xml").arg(i+1));
|
|
||||||
rels.addDocumentRelationship(QStringLiteral("/theme"), QStringLiteral("theme/theme1.xml"));
|
|
||||||
rels.addDocumentRelationship(QStringLiteral("/styles"), QStringLiteral("styles.xml"));
|
|
||||||
if (!workbook->sharedStrings()->isEmpty())
|
|
||||||
rels.addDocumentRelationship(QStringLiteral("/sharedStrings"), QStringLiteral("sharedStrings.xml"));
|
|
||||||
zipWriter.addFile(QStringLiteral("xl/_rels/workbook.xml.rels"), rels.saveToXmlData());
|
|
||||||
|
|
||||||
// save drawing xml files
|
// save drawing xml files
|
||||||
for (int i=0; i<workbook->drawings().size(); ++i) {
|
for (int i=0; i<workbook->drawings().size(); ++i) {
|
||||||
|
|||||||
@@ -397,6 +397,15 @@ void Workbook::prepareDrawings()
|
|||||||
void Workbook::saveToXmlFile(QIODevice *device) const
|
void Workbook::saveToXmlFile(QIODevice *device) const
|
||||||
{
|
{
|
||||||
Q_D(const Workbook);
|
Q_D(const Workbook);
|
||||||
|
d->relationships.clear();
|
||||||
|
|
||||||
|
for (int i=0; i<worksheetCount(); ++i)
|
||||||
|
d->relationships.addDocumentRelationship(QStringLiteral("/worksheet"), QStringLiteral("worksheets/sheet%1.xml").arg(i+1));
|
||||||
|
d->relationships.addDocumentRelationship(QStringLiteral("/theme"), QStringLiteral("theme/theme1.xml"));
|
||||||
|
d->relationships.addDocumentRelationship(QStringLiteral("/styles"), QStringLiteral("styles.xml"));
|
||||||
|
if (!sharedStrings()->isEmpty())
|
||||||
|
d->relationships.addDocumentRelationship(QStringLiteral("/sharedStrings"), QStringLiteral("sharedStrings.xml"));
|
||||||
|
|
||||||
QXmlStreamWriter writer(device);
|
QXmlStreamWriter writer(device);
|
||||||
|
|
||||||
writer.writeStartDocument(QStringLiteral("1.0"), true);
|
writer.writeStartDocument(QStringLiteral("1.0"), true);
|
||||||
@@ -554,4 +563,13 @@ bool Workbook::loadFromXmlData(const QByteArray &data)
|
|||||||
return loadFromXmlFile(&buffer);
|
return loadFromXmlFile(&buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \internal
|
||||||
|
*/
|
||||||
|
Relationships &Workbook::relationships()
|
||||||
|
{
|
||||||
|
Q_D(Workbook);
|
||||||
|
return d->relationships;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE_XLSX
|
QT_END_NAMESPACE_XLSX
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class Styles;
|
|||||||
class Drawing;
|
class Drawing;
|
||||||
class Document;
|
class Document;
|
||||||
class Theme;
|
class Theme;
|
||||||
|
class Relationships;
|
||||||
class DocumentPrivate;
|
class DocumentPrivate;
|
||||||
|
|
||||||
class WorkbookPrivate;
|
class WorkbookPrivate;
|
||||||
@@ -84,6 +85,7 @@ private:
|
|||||||
QByteArray saveToXmlData() const;
|
QByteArray saveToXmlData() const;
|
||||||
bool loadFromXmlFile(QIODevice *device);
|
bool loadFromXmlFile(QIODevice *device);
|
||||||
bool loadFromXmlData(const QByteArray &data);
|
bool loadFromXmlData(const QByteArray &data);
|
||||||
|
Relationships &relationships();
|
||||||
|
|
||||||
SharedStrings *sharedStrings() const;
|
SharedStrings *sharedStrings() const;
|
||||||
Styles *styles();
|
Styles *styles();
|
||||||
|
|||||||
@@ -38,6 +38,8 @@
|
|||||||
|
|
||||||
#include "xlsxworkbook.h"
|
#include "xlsxworkbook.h"
|
||||||
#include "xlsxtheme_p.h"
|
#include "xlsxtheme_p.h"
|
||||||
|
#include "xlsxrelationships_p.h"
|
||||||
|
|
||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@@ -78,6 +80,7 @@ public:
|
|||||||
WorkbookPrivate(Workbook *q);
|
WorkbookPrivate(Workbook *q);
|
||||||
|
|
||||||
Workbook *q_ptr;
|
Workbook *q_ptr;
|
||||||
|
mutable Relationships relationships;
|
||||||
|
|
||||||
QSharedPointer<SharedStrings> sharedStrings;
|
QSharedPointer<SharedStrings> sharedStrings;
|
||||||
QList<QSharedPointer<Worksheet> > worksheets;
|
QList<QSharedPointer<Worksheet> > worksheets;
|
||||||
|
|||||||
Reference in New Issue
Block a user