diff --git a/src/xlsx/xlsxpackage.cpp b/src/xlsx/xlsxpackage.cpp index a3da444..6958c2c 100644 --- a/src/xlsx/xlsxpackage.cpp +++ b/src/xlsx/xlsxpackage.cpp @@ -180,22 +180,14 @@ void Package::writeWorksheetFiles(ZipWriter &zipWriter) if (sheet->isChartsheet()) continue; - QByteArray data; - QBuffer buffer(&data); - buffer.open(QIODevice::WriteOnly); - sheet->saveToXmlFile(&buffer); - zipWriter.addFile(QStringLiteral("xl/worksheets/sheet%1.xml").arg(index), data); + zipWriter.addFile(QStringLiteral("xl/worksheets/sheet%1.xml").arg(index), sheet->saveToXmlData()); index += 1; } } void Package::writeWorkbookFile(ZipWriter &zipWriter) { - QByteArray data; - QBuffer buffer(&data); - buffer.open(QIODevice::WriteOnly); - m_workbook->saveToXmlFile(&buffer); - zipWriter.addFile(QStringLiteral("xl/workbook.xml"), data); + zipWriter.addFile(QStringLiteral("xl/workbook.xml"), m_workbook->saveToXmlData()); } void Package::writeDrawingFiles(ZipWriter &zipWriter) diff --git a/src/xlsx/xlsxworksheet.cpp b/src/xlsx/xlsxworksheet.cpp index 986b716..b1ad808 100755 --- a/src/xlsx/xlsxworksheet.cpp +++ b/src/xlsx/xlsxworksheet.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include @@ -83,6 +84,9 @@ WorksheetPrivate::~WorksheetPrivate() foreach (XlsxColumnInfo *col, colsInfo) delete col; + + if (drawing) + delete drawing; } /* @@ -202,11 +206,11 @@ int WorksheetPrivate::checkDimensions(int row, int col, bool ignore_row, bool ig * \param index Index of the worksheet in the workbook * \param parent */ -Worksheet::Worksheet(const QString &name, Workbook *parent) : - QObject(parent), d_ptr(new WorksheetPrivate(this)) +Worksheet::Worksheet(const QString &name, Workbook *workbook) : + d_ptr(new WorksheetPrivate(this)) { d_ptr->name = name; - d_ptr->workbook = parent; + d_ptr->workbook = workbook; } Worksheet::~Worksheet() @@ -877,7 +881,7 @@ void Worksheet::prepareImage(int index, int image_id, int drawing_id) { Q_D(Worksheet); if (!d->drawing) { - d->drawing = new Drawing(this); + d->drawing = new Drawing; d->drawing->embedded = true; d->externDrawingList.append(QStringLiteral("../drawings/drawing%1.xml").arg(drawing_id)); } @@ -1038,4 +1042,28 @@ XlsxObjectPositionData WorksheetPrivate::pixelsToEMUs(const XlsxObjectPositionDa return result; } +QByteArray Worksheet::saveToXmlData() +{ + QByteArray data; + QBuffer buffer(&data); + buffer.open(QIODevice::WriteOnly); + saveToXmlFile(&buffer); + + return data; +} + +QSharedPointer Worksheet::loadFromXmlFile(QIODevice *device) +{ + return QSharedPointer(new Worksheet(QString())); +} + +QSharedPointer Worksheet::loadFromXmlData(const QByteArray &data) +{ + QBuffer buffer; + buffer.setData(data); + buffer.open(QIODevice::ReadOnly); + + return loadFromXmlFile(&buffer); +} + } //namespace diff --git a/src/xlsx/xlsxworksheet.h b/src/xlsx/xlsxworksheet.h index 4a254c7..abf5ade 100755 --- a/src/xlsx/xlsxworksheet.h +++ b/src/xlsx/xlsxworksheet.h @@ -31,6 +31,7 @@ #include #include #include +#include class QIODevice; class QDateTime; class QUrl; @@ -45,9 +46,8 @@ class Drawing; struct XlsxImageData; class WorksheetPrivate; -class Q_XLSX_EXPORT Worksheet : public QObject +class Q_XLSX_EXPORT Worksheet { - Q_OBJECT Q_DECLARE_PRIVATE(Worksheet) public: int write(const QString row_column, const QVariant &value, Format *format=0); @@ -74,11 +74,15 @@ public: void setZeroValuesHidden(bool enable); void saveToXmlFile(QIODevice *device); + QByteArray saveToXmlData(); + static QSharedPointer loadFromXmlFile(QIODevice *device); + static QSharedPointer loadFromXmlData(const QByteArray &data); + ~Worksheet(); private: friend class Package; friend class Workbook; - Worksheet(const QString &sheetName, Workbook *parent=0); + Worksheet(const QString &sheetName, Workbook *book=0); virtual bool isChartsheet() const; QString name() const;