Code refactoring: Clean up
This commit is contained in:
+14
-25
@@ -145,9 +145,9 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
if (rels_xl.isEmpty())
|
if (rels_xl.isEmpty())
|
||||||
return false;
|
return false;
|
||||||
QString xlworkbook_Path = rels_xl[0].target;
|
QString xlworkbook_Path = rels_xl[0].target;
|
||||||
QStringList xlworkbook_PathList = splitPath(xlworkbook_Path);
|
QString xlworkbook_Dir = splitPath(xlworkbook_Path)[0];
|
||||||
QString xlworkbook_Dir = xlworkbook_PathList[0];
|
|
||||||
workbook->relationships().loadFromXmlData(zipReader.fileData(getRelFilePath(xlworkbook_Path)));
|
workbook->relationships().loadFromXmlData(zipReader.fileData(getRelFilePath(xlworkbook_Path)));
|
||||||
|
workbook->setFilePath(xlworkbook_Path);
|
||||||
workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path));
|
workbook->loadFromXmlData(zipReader.fileData(xlworkbook_Path));
|
||||||
|
|
||||||
//load styles
|
//load styles
|
||||||
@@ -180,33 +180,22 @@ bool DocumentPrivate::loadPackage(QIODevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load worksheets
|
//load worksheets
|
||||||
QList<XlsxRelationship> rels_worksheets = workbook->relationships().documentRelationships(QStringLiteral("/worksheet"));
|
for (int i=0; i<workbook->worksheetCount(); ++i) {
|
||||||
if (rels_worksheets.isEmpty())
|
Worksheet *sheet = workbook->worksheet(i);
|
||||||
return false;
|
QString rel_path = getRelFilePath(sheet->filePath());
|
||||||
|
|
||||||
QList<XlsxSheetItemInfo> sheetNameIdPairList = workbook->d_func()->sheetItemInfoList;
|
|
||||||
|
|
||||||
for (int i=0; i<sheetNameIdPairList.size(); ++i) {
|
|
||||||
XlsxSheetItemInfo info = sheetNameIdPairList[i];
|
|
||||||
QString worksheet_path = xlworkbook_Dir + QLatin1String("/") + workbook->relationships().getRelationshipById(info.rId).target;
|
|
||||||
QString rel_path = getRelFilePath(worksheet_path);
|
|
||||||
Worksheet *sheet = workbook->addWorksheet(info.name, info.sheetId);
|
|
||||||
//If the .rel file exists, load it.
|
//If the .rel file exists, load it.
|
||||||
if (zipReader.filePaths().contains(rel_path))
|
if (zipReader.filePaths().contains(rel_path))
|
||||||
sheet->relationships().loadFromXmlData(zipReader.fileData(rel_path));
|
sheet->relationships().loadFromXmlData(zipReader.fileData(rel_path));
|
||||||
sheet->loadFromXmlData(zipReader.fileData(worksheet_path));
|
sheet->loadFromXmlData(zipReader.fileData(sheet->filePath()));
|
||||||
|
}
|
||||||
|
|
||||||
//load drawing if exists
|
//load drawings
|
||||||
if (!sheet->drawingPath().isEmpty()) {
|
for (int i=0; i<workbook->drawings().size(); ++i) {
|
||||||
QString drawingPath = QDir::cleanPath(splitPath(worksheet_path)[0] + QLatin1String("/") + sheet->drawingPath());
|
Drawing *drawing = workbook->drawings()[i];
|
||||||
Drawing *drawing = new Drawing(workbook.data());
|
QString rel_path = getRelFilePath(drawing->filePath());
|
||||||
drawing->pathInPackage = drawingPath;
|
if (zipReader.filePaths().contains(rel_path))
|
||||||
QString drawing_rel_path = getRelFilePath(drawingPath);
|
drawing->relationships.loadFromXmlData(zipReader.fileData(rel_path));
|
||||||
if (zipReader.filePaths().contains(drawing_rel_path))
|
drawing->loadFromXmlData(zipReader.fileData(drawing->filePath()));
|
||||||
drawing->relationships.loadFromXmlData(zipReader.fileData(drawing_rel_path));
|
|
||||||
drawing->loadFromXmlData(zipReader.fileData(drawingPath));
|
|
||||||
sheet->setDrawing(drawing);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//load charts
|
//load charts
|
||||||
|
|||||||
@@ -64,8 +64,6 @@ public:
|
|||||||
Workbook *workbook;
|
Workbook *workbook;
|
||||||
QList<DrawingAnchor *> anchors;
|
QList<DrawingAnchor *> anchors;
|
||||||
mutable Relationships relationships;
|
mutable Relationships relationships;
|
||||||
|
|
||||||
QString pathInPackage;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QXlsx
|
} // namespace QXlsx
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ void DrawingAnchor::loadXmlObjectGraphicFrame(QXmlStreamReader &reader)
|
|||||||
if (reader.name() == QLatin1String("chart")) {
|
if (reader.name() == QLatin1String("chart")) {
|
||||||
QString rId = reader.attributes().value(QLatin1String("r:id")).toString();
|
QString rId = reader.attributes().value(QLatin1String("r:id")).toString();
|
||||||
QString name = m_drawing->relationships.getRelationshipById(rId).target;
|
QString name = m_drawing->relationships.getRelationshipById(rId).target;
|
||||||
QString path = QDir::cleanPath(splitPath(m_drawing->pathInPackage)[0] + QLatin1String("/") + name);
|
QString path = QDir::cleanPath(splitPath(m_drawing->filePath())[0] + QLatin1String("/") + name);
|
||||||
|
|
||||||
bool exist = false;
|
bool exist = false;
|
||||||
QList<QSharedPointer<ChartFile> > cfs = m_drawing->workbook->chartFiles();
|
QList<QSharedPointer<ChartFile> > cfs = m_drawing->workbook->chartFiles();
|
||||||
@@ -222,7 +222,7 @@ void DrawingAnchor::loadXmlObjectPicture(QXmlStreamReader &reader)
|
|||||||
if (reader.name() == QLatin1String("blip")) {
|
if (reader.name() == QLatin1String("blip")) {
|
||||||
QString rId = reader.attributes().value(QLatin1String("r:embed")).toString();
|
QString rId = reader.attributes().value(QLatin1String("r:embed")).toString();
|
||||||
QString name = m_drawing->relationships.getRelationshipById(rId).target;
|
QString name = m_drawing->relationships.getRelationshipById(rId).target;
|
||||||
QString path = QDir::cleanPath(splitPath(m_drawing->pathInPackage)[0] + QLatin1String("/") + name);
|
QString path = QDir::cleanPath(splitPath(m_drawing->filePath())[0] + QLatin1String("/") + name);
|
||||||
|
|
||||||
bool exist = false;
|
bool exist = false;
|
||||||
QList<QSharedPointer<MediaFile> > mfs = m_drawing->workbook->mediaFiles();
|
QList<QSharedPointer<MediaFile> > mfs = m_drawing->workbook->mediaFiles();
|
||||||
|
|||||||
@@ -31,11 +31,13 @@
|
|||||||
#include "xlsxworksheet_p.h"
|
#include "xlsxworksheet_p.h"
|
||||||
#include "xlsxformat_p.h"
|
#include "xlsxformat_p.h"
|
||||||
#include "xlsxmediafile_p.h"
|
#include "xlsxmediafile_p.h"
|
||||||
|
#include "xlsxutility_p.h"
|
||||||
|
|
||||||
#include <QXmlStreamWriter>
|
#include <QXmlStreamWriter>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE_XLSX
|
QT_BEGIN_NAMESPACE_XLSX
|
||||||
|
|
||||||
@@ -485,14 +487,17 @@ bool Workbook::loadFromXmlFile(QIODevice *device)
|
|||||||
QXmlStreamReader::TokenType token = reader.readNext();
|
QXmlStreamReader::TokenType token = reader.readNext();
|
||||||
if (token == QXmlStreamReader::StartElement) {
|
if (token == QXmlStreamReader::StartElement) {
|
||||||
if (reader.name() == QLatin1String("sheet")) {
|
if (reader.name() == QLatin1String("sheet")) {
|
||||||
XlsxSheetItemInfo info;
|
|
||||||
QXmlStreamAttributes attributes = reader.attributes();
|
QXmlStreamAttributes attributes = reader.attributes();
|
||||||
info.name = attributes.value(QLatin1String("name")).toString();
|
const QString name = attributes.value(QLatin1String("name")).toString();
|
||||||
info.sheetId = attributes.value(QLatin1String("sheetId")).toString().toInt();
|
int sheetId = attributes.value(QLatin1String("sheetId")).toString().toInt();
|
||||||
info.rId = attributes.value(QLatin1String("r:id")).toString();
|
const QString rId = attributes.value(QLatin1String("r:id")).toString();
|
||||||
if (attributes.hasAttribute(QLatin1String("state")))
|
// if (attributes.hasAttribute(QLatin1String("state")))
|
||||||
info.state = attributes.value(QLatin1String("state")).toString();
|
// QString state = attributes.value(QLatin1String("state")).toString();
|
||||||
d->sheetItemInfoList.append(info);
|
|
||||||
|
Worksheet *sheet = addWorksheet(name, sheetId);
|
||||||
|
const QString path = d->relationships.getRelationshipById(rId).target;
|
||||||
|
const QString fullPath = QDir::cleanPath(splitPath(filePath())[0] +QLatin1String("/")+ path);
|
||||||
|
sheet->setFilePath(fullPath);
|
||||||
} else if (reader.name() == QLatin1String("workbookPr")) {
|
} else if (reader.name() == QLatin1String("workbookPr")) {
|
||||||
QXmlStreamAttributes attrs = reader.attributes();
|
QXmlStreamAttributes attrs = reader.attributes();
|
||||||
if (attrs.hasAttribute(QLatin1String("date1904")))
|
if (attrs.hasAttribute(QLatin1String("date1904")))
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
#include <QXmlStreamWriter>
|
#include <QXmlStreamWriter>
|
||||||
#include <QXmlStreamReader>
|
#include <QXmlStreamReader>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
@@ -60,8 +61,6 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p)
|
|||||||
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
|
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
|
||||||
, showOutlineSymbols(true), showWhiteSpace(true)
|
, showOutlineSymbols(true), showWhiteSpace(true)
|
||||||
{
|
{
|
||||||
drawing = 0;
|
|
||||||
|
|
||||||
previous_row = 0;
|
previous_row = 0;
|
||||||
|
|
||||||
outline_row_level = 0;
|
outline_row_level = 0;
|
||||||
@@ -75,8 +74,6 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p)
|
|||||||
|
|
||||||
WorksheetPrivate::~WorksheetPrivate()
|
WorksheetPrivate::~WorksheetPrivate()
|
||||||
{
|
{
|
||||||
if (drawing)
|
|
||||||
delete drawing;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1026,9 +1023,9 @@ bool Worksheet::insertImage(int row, int column, const QImage &image)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!d->drawing)
|
if (!d->drawing)
|
||||||
d->drawing = new Drawing(d->workbook);
|
d->drawing = QSharedPointer<Drawing>(new Drawing(d->workbook));
|
||||||
|
|
||||||
DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing, DrawingAnchor::Picture);
|
DrawingOneCellAnchor *anchor = new DrawingOneCellAnchor(d->drawing.data(), DrawingAnchor::Picture);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The size are expressed as English Metric Units (EMUs). There are
|
The size are expressed as English Metric Units (EMUs). There are
|
||||||
@@ -1451,7 +1448,7 @@ void WorksheetPrivate::saveXmlDrawings(QXmlStreamWriter &writer) const
|
|||||||
if (!drawing)
|
if (!drawing)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int idx = workbook->drawings().indexOf(drawing);
|
int idx = workbook->drawings().indexOf(drawing.data());
|
||||||
relationships.addWorksheetRelationship(QStringLiteral("/drawing"), QStringLiteral("../drawings/drawing%1.xml").arg(idx+1));
|
relationships.addWorksheetRelationship(QStringLiteral("/drawing"), QStringLiteral("../drawings/drawing%1.xml").arg(idx+1));
|
||||||
|
|
||||||
writer.writeEmptyElement(QStringLiteral("drawing"));
|
writer.writeEmptyElement(QStringLiteral("drawing"));
|
||||||
@@ -1699,32 +1696,7 @@ CellRange Worksheet::dimension() const
|
|||||||
Drawing *Worksheet::drawing() const
|
Drawing *Worksheet::drawing() const
|
||||||
{
|
{
|
||||||
Q_D(const Worksheet);
|
Q_D(const Worksheet);
|
||||||
return d->drawing;
|
return d->drawing.data();
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
*
|
|
||||||
* When loading the .xlsx package, the drawing{x}.xml file path
|
|
||||||
* is extracted when we parse the sheet{x}.xml file.
|
|
||||||
*/
|
|
||||||
QString Worksheet::drawingPath() const
|
|
||||||
{
|
|
||||||
Q_D(const Worksheet);
|
|
||||||
return d->drawingPath_in_zip;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \internal
|
|
||||||
*
|
|
||||||
* Note, the object will be managed by this sheet.
|
|
||||||
*/
|
|
||||||
void Worksheet::setDrawing(Drawing *draw)
|
|
||||||
{
|
|
||||||
Q_D(Worksheet);
|
|
||||||
Q_ASSERT(!d->drawing);
|
|
||||||
|
|
||||||
d->drawing = draw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2114,7 +2086,10 @@ bool Worksheet::loadFromXmlFile(QIODevice *device)
|
|||||||
d->loadXmlHyperlinks(reader);
|
d->loadXmlHyperlinks(reader);
|
||||||
} else if (reader.name() == QLatin1String("drawing")) {
|
} else if (reader.name() == QLatin1String("drawing")) {
|
||||||
QString rId = reader.attributes().value(QStringLiteral("r:id")).toString();
|
QString rId = reader.attributes().value(QStringLiteral("r:id")).toString();
|
||||||
d->drawingPath_in_zip = d->relationships.getRelationshipById(rId).target;
|
QString name = d->relationships.getRelationshipById(rId).target;
|
||||||
|
QString path = QDir::cleanPath(splitPath(filePath())[0] + QLatin1String("/") + name);
|
||||||
|
d->drawing = QSharedPointer<Drawing>(new Drawing(d->workbook));
|
||||||
|
d->drawing->filePath() = path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,8 +151,6 @@ private:
|
|||||||
int sheetId() const;
|
int sheetId() const;
|
||||||
|
|
||||||
Drawing *drawing() const;
|
Drawing *drawing() const;
|
||||||
void setDrawing(Drawing *d);
|
|
||||||
QString drawingPath() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE_XLSX
|
QT_END_NAMESPACE_XLSX
|
||||||
|
|||||||
@@ -146,8 +146,7 @@ public:
|
|||||||
|
|
||||||
Workbook *workbook;
|
Workbook *workbook;
|
||||||
mutable Relationships relationships;
|
mutable Relationships relationships;
|
||||||
Drawing *drawing;
|
QSharedPointer<Drawing> drawing;
|
||||||
QString drawingPath_in_zip;
|
|
||||||
QMap<int, QMap<int, QSharedPointer<Cell> > > cellTable;
|
QMap<int, QMap<int, QSharedPointer<Cell> > > cellTable;
|
||||||
QMap<int, QMap<int, QString> > comments;
|
QMap<int, QMap<int, QString> > comments;
|
||||||
QMap<int, QMap<int, QSharedPointer<XlsxHyperlinkData> > > urlTable;
|
QMap<int, QMap<int, QSharedPointer<XlsxHyperlinkData> > > urlTable;
|
||||||
|
|||||||
Reference in New Issue
Block a user