From bee1f3fc7016c11042a522732884eb484f5dc15e Mon Sep 17 00:00:00 2001 From: Jay Two Date: Sat, 18 Jul 2020 21:01:58 +0900 Subject: [PATCH] testing for issue #95 --- IssueTest/test.cpp | 47 ++++++++++++++++------------- QXlsx/header/xlsxdocument.h | 1 + QXlsx/header/xlsxdrawinganchor_p.h | 2 ++ QXlsx/header/xlsxmediafile_p.h | 42 +++----------------------- QXlsx/header/xlsxworksheet.h | 1 + QXlsx/source/xlsxdocument.cpp | 8 +++++ QXlsx/source/xlsxdrawinganchor.cpp | 9 ++++++ QXlsx/source/xlsxworksheet.cpp | 29 ++++++++++++++++++ README.ko.md | 7 ++++- README.md | 13 +++++--- TestExcel/image.cpp | 30 +++++++++++++++--- markdown.data/arcvalut.png | Bin 0 -> 20518 bytes 12 files changed, 120 insertions(+), 69 deletions(-) create mode 100644 markdown.data/arcvalut.png diff --git a/IssueTest/test.cpp b/IssueTest/test.cpp index f2054b0..6c71e0f 100644 --- a/IssueTest/test.cpp +++ b/IssueTest/test.cpp @@ -7,6 +7,9 @@ #include #include #include +#include +#include +#include #include using namespace std; @@ -18,39 +21,41 @@ using namespace std; #include "xlsxrichstring.h" #include "xlsxworkbook.h" -int test91( QVector params ); +int test95( QVector params ); int test( QVector params ) { qDebug() << "[debug] current path : " << QDir::currentPath(); - return test91( params ); + return test95( params ); } -// tested in Qt 5.14.1, MingW 7.3.0 64bit -int test91( QVector params ) +int test95( QVector params ) { using namespace QXlsx; - Document doc(":/91.xlsx"); // made by ms excel 2019 - if (!doc.isLoadPackage()) { - qDebug() << "Failed to load xlsx."; - return (-1); - } + Document xlsx; - QXlsx::CellRange range = doc.dimension(); - for (int i = 2; i < range.rowCount() + 1; i++) + for (int i=0; i<10; ++i) { - for (int j = 1; j < range.columnCount()+1; j++) - { - QString dataStr; - auto tmpCell = doc.cellAt(i, j); - if(tmpCell) - { - dataStr = tmpCell->value().toString().trimmed(); - qDebug() << dataStr; - } - } + QImage image(40, 30, QImage::Format_RGB32); + image.fill( uint(qrand() % 16581375) ); + + int index = xlsx.insertImage( 10*i, 5, image ); + + QImage img; + if ( xlsx.getImage( index, img ) ) + { + QString filename; + filename = QString("image %1.png").arg( index ); + img.save( filename ); + + qDebug() << " [image index] " << index; + } } + xlsx.saveAs("image1.xlsx"); + + QXlsx::Document xlsx2("image1.xlsx"); + xlsx2.saveAs("image2.xlsx"); return 0; } diff --git a/QXlsx/header/xlsxdocument.h b/QXlsx/header/xlsxdocument.h index da50fcb..e449c05 100644 --- a/QXlsx/header/xlsxdocument.h +++ b/QXlsx/header/xlsxdocument.h @@ -42,6 +42,7 @@ public: QVariant read(int row, int col) const; int insertImage(int row, int col, const QImage &image); + bool getImage(int imageIndex, QImage& img); Chart *insertChart(int row, int col, const QSize &size); diff --git a/QXlsx/header/xlsxdrawinganchor_p.h b/QXlsx/header/xlsxdrawinganchor_p.h index 2a90109..4a09310 100644 --- a/QXlsx/header/xlsxdrawinganchor_p.h +++ b/QXlsx/header/xlsxdrawinganchor_p.h @@ -51,7 +51,9 @@ public: DrawingAnchor(Drawing *drawing, ObjectType objectType); virtual ~DrawingAnchor(); + void setObjectPicture(const QImage &img); + bool getObjectPicture(QImage &img); void setObjectGraphicFrame(QSharedPointer chart); diff --git a/QXlsx/header/xlsxmediafile_p.h b/QXlsx/header/xlsxmediafile_p.h index 4b00c7a..1c18578 100644 --- a/QXlsx/header/xlsxmediafile_p.h +++ b/QXlsx/header/xlsxmediafile_p.h @@ -1,43 +1,8 @@ -/**************************************************************************** -** Copyright (c) 2013-2014 Debao Zhang -** All right reserved. -** -** Permission is hereby granted, free of charge, to any person obtaining -** a copy of this software and associated documentation files (the -** "Software"), to deal in the Software without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Software, and to -** permit persons to whom the Software is furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be -** included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -** NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -** LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -** OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -** WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -** -****************************************************************************/ +// xlsxmediafile_p.h #ifndef QXLSX_XLSXMEDIAFILE_H #define QXLSX_XLSXMEDIAFILE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt Xlsx API. It exists for the convenience -// of the Qt Xlsx. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// - #include "xlsxglobal.h" #include @@ -51,6 +16,7 @@ public: MediaFile(const QString &fileName); MediaFile(const QByteArray &bytes, const QString &suffix, const QString &mimeType=QString()); +public: void set(const QByteArray &bytes, const QString &suffix, const QString &mimeType=QString()); QString suffix() const; QString mimeType() const; @@ -64,8 +30,8 @@ public: void setFileName(const QString &name); QString fileName() const; -private: - QString m_fileName; //... +protected: + QString m_fileName; QByteArray m_contents; QString m_suffix; QString m_mimeType; diff --git a/QXlsx/header/xlsxworksheet.h b/QXlsx/header/xlsxworksheet.h index 8cf4aab..80f1f74 100644 --- a/QXlsx/header/xlsxworksheet.h +++ b/QXlsx/header/xlsxworksheet.h @@ -98,6 +98,7 @@ public: Cell *cellAt(int row, int column) const; int insertImage(int row, int column, const QImage &image); + bool getImage(int imageIndex, QImage& img); Chart *insertChart(int row, int column, const QSize &size); bool mergeCells(const CellRange &range, const Format &format=Format()); diff --git a/QXlsx/source/xlsxdocument.cpp b/QXlsx/source/xlsxdocument.cpp index d1cb1e5..6f0825e 100644 --- a/QXlsx/source/xlsxdocument.cpp +++ b/QXlsx/source/xlsxdocument.cpp @@ -649,6 +649,14 @@ int Document::insertImage(int row, int column, const QImage &image) return 0; } +bool Document::getImage(int imageIndex, QImage& img) +{ + if (Worksheet *sheet = currentWorksheet()) + return sheet->getImage(imageIndex, img); + + return false; +} + /*! * Creates an chart with the given \a size and insert it to the current * active worksheet at the position \a row, \a col. diff --git a/QXlsx/source/xlsxdrawinganchor.cpp b/QXlsx/source/xlsxdrawinganchor.cpp index 409ac20..8c668f5 100644 --- a/QXlsx/source/xlsxdrawinganchor.cpp +++ b/QXlsx/source/xlsxdrawinganchor.cpp @@ -74,6 +74,15 @@ void DrawingAnchor::setObjectPicture(const QImage &img) m_objectType = Picture; } +bool DrawingAnchor::getObjectPicture(QImage &img) +{ + if ( m_pictureFile == nullptr ) + return false; + + bool ret = img.loadFromData( m_pictureFile->contents() ); + return ret; +} + //{{ liufeijin void DrawingAnchor::setObjectShape(const QImage &img) { diff --git a/QXlsx/source/xlsxworksheet.cpp b/QXlsx/source/xlsxworksheet.cpp index b2bd4f6..02da753 100644 --- a/QXlsx/source/xlsxworksheet.cpp +++ b/QXlsx/source/xlsxworksheet.cpp @@ -1117,6 +1117,35 @@ int Worksheet::insertImage(int row, int column, const QImage &image) return imageIndex; } +bool Worksheet::getImage(int imageIndex, QImage& img) +{ + Q_D(Worksheet); + + if( imageIndex <= (-1) ) + { + return false; + } + + if ( d->drawing == nullptr ) + { + return false; + } + + int realImageIndex = imageIndex - 1; // minus one + + DrawingAnchor* danchor = d->drawing->anchors.at( realImageIndex ); + // QSharedPointer // for multithread + if ( danchor == nullptr ) + { + return false; + } + + bool ret= danchor->getObjectPicture(img); + return ret; +} + + + /*! * Creates an chart with the given \a size and insert * at the position \a row, \a column. diff --git a/README.ko.md b/README.ko.md index 74e6fc0..f9c7593 100644 --- a/README.ko.md +++ b/README.ko.md @@ -40,13 +40,18 @@ - QXlsx 는 MIT 라이센스 입니다. [https://github.com/QtExcel/QXlsx](https://github.com/QtExcel/QXlsx) - 다음과 같은 놀라운 프로젝트들을 만들어 주신 분들에게 감사의 말씀을 올립니다. :+1: - Qt 는 LGPL v3 라이센스 또는 상업용 라이센스 입니다. [https://www.qt.io/](https://www.qt.io/) - - QtXlsx 는 MIT 라이센스 입니다. [https://github.com/dbzhang800/QtXlsxWriter](https://github.com/dbzhang800/QtXlsxWriter) + - QtXlsx 는 MIT 라이센스 입니다. :+1: [https://github.com/dbzhang800/QtXlsxWriter](https://github.com/dbzhang800/QtXlsxWriter) - Qt-Table-Printer 는 BSD 3-Clause 라이센스 입니다. [https://github.com/T0ny0/Qt-Table-Printer](https://github.com/T0ny0/Qt-Table-Printer) - recurse 는 MIT 라이센스 입니다. [https://github.com/pkoretic/recurse](https://github.com/pkoretic/recurse) - libfort 는 MIT 라이센스 입니다. [https://github.com/seleznevae/libfort](https://github.com/seleznevae/libfort) - colorprintf 는 MIT 라이센스 입니다. [https://github.com/VittGam/colorprintf](https://github.com/VittGam/colorprintf) - HelloActions-Qt 는 MIT 라이센스 입니다. [https://github.com/jaredtao/HelloActions-Qt](https://github.com/jaredtao/HelloActions-Qt) +## 축하 +- 우리의 코드가 북극에 갑니다. + ![](markdown.data/arcvalut.png) +- 자세한 정보는 링크를 보세요. https://archiveprogram.github.com/ + ## :email: 문의 - 이슈를 남겨 주세요. [https://github.com/QtExcel/QXlsx/issues](https://github.com/QtExcel/QXlsx/issues) - 프로젝트 참여에 관심이 있으신 분은 이슈로 연락주세요. diff --git a/README.md b/README.md index 8fc716b..a94db72 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ - You can also use it as a static library. ## How to use -- See [examples](Example.md). -- See [wiki](https://github.com/QtExcel/QXlsx/wiki). -- See [FAQ](https://github.com/QtExcel/QXlsx/wiki/FAQ). +- See [examples](Example.md) +- See [wiki](https://github.com/QtExcel/QXlsx/wiki) +- See [FAQ](https://github.com/QtExcel/QXlsx/wiki/FAQ) ## How to set up (Installation) @@ -40,13 +40,18 @@ - QXlsx is under MIT license. [https://github.com/QtExcel/QXlsx](https://github.com/QtExcel/QXlsx) - Thank you for creating the following amazing projects. :+1: - Qt is under LGPL v3 license or Commercial license. [https://www.qt.io/](https://www.qt.io/) - - QtXlsxWriter is under MIT license. [https://github.com/dbzhang800/QtXlsxWriter](https://github.com/dbzhang800/QtXlsxWriter) + - QtXlsxWriter is under MIT license. :+1: [https://github.com/dbzhang800/QtXlsxWriter](https://github.com/dbzhang800/QtXlsxWriter) - Qt-Table-Printer is under BSD 3-Clause license. [https://github.com/T0ny0/Qt-Table-Printer](https://github.com/T0ny0/Qt-Table-Printer) - recurse is under MIT license. [https://github.com/pkoretic/recurse](https://github.com/pkoretic/recurse) - libfort is under MIT license. [https://github.com/seleznevae/libfort](https://github.com/seleznevae/libfort) - colorprintf is under MIT license. [https://github.com/VittGam/colorprintf](https://github.com/VittGam/colorprintf) - HelloActions-Qt is under MIT license. [https://github.com/jaredtao/HelloActions-Qt](https://github.com/jaredtao/HelloActions-Qt) +## Congratulations +- Our code is going to the North Pole. + ![](markdown.data/arcvalut.png) +- See link for more information. https://archiveprogram.github.com/ + ## :email: Contact - Leave me a issue. [https://github.com/QtExcel/QXlsx/issues](https://github.com/QtExcel/QXlsx/issues) - If you are interested in participating in the project, please contact us by issue. diff --git a/TestExcel/image.cpp b/TestExcel/image.cpp index 8c32d5b..9a20dd5 100644 --- a/TestExcel/image.cpp +++ b/TestExcel/image.cpp @@ -4,18 +4,38 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include #include "xlsxdocument.h" int image() { - QXlsx::Document xlsx; - QImage image(40, 30, QImage::Format_RGB32); - image.fill(Qt::green); + using namespace QXlsx; + + Document xlsx; + for (int i=0; i<10; ++i) { - int index = xlsx.insertImage( 10*i, 5, image ); - qDebug() << " [image index] " << index; + QImage image(40, 30, QImage::Format_RGB32); + image.fill( uint(qrand() % 16581375) ); + + int index = xlsx.insertImage( 10*i, 5, image ); + + QImage img; + if ( xlsx.getImage( index, img ) ) + { + QString filename; + filename = QString("image %1.png").arg( index ); + img.save( filename ); + + qDebug() << " [image index] " << index; + } } xlsx.saveAs("image1.xlsx"); diff --git a/markdown.data/arcvalut.png b/markdown.data/arcvalut.png new file mode 100644 index 0000000000000000000000000000000000000000..6b261036f4bdd842f18ac77d01c254f6020d4a24 GIT binary patch literal 20518 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 literal 0 HcmV?d00001