diff --git a/README.md b/README.md index a51c732..2912059 100644 --- a/README.md +++ b/README.md @@ -80,3 +80,4 @@ The library, the header files, and the feature file will be installed to your sy * http://www.codeproject.com/Articles/210014/How-to-read-and-write-xlsx-Excel-2007-file-Part-II * http://epplus.codeplex.com/ * http://excelpackage.codeplex.com/ +* http://spreadsheetlight.com/ diff --git a/src/xlsx/qtxlsx.pri b/src/xlsx/qtxlsx.pri index 4033050..4829a9e 100755 --- a/src/xlsx/qtxlsx.pri +++ b/src/xlsx/qtxlsx.pri @@ -22,7 +22,9 @@ HEADERS += $$PWD/xlsxdocpropscore_p.h \ $$PWD/xlsxworksheet_p.h \ $$PWD/xlsxformat_p.h \ $$PWD/xlsxglobal.h \ - $$PWD/xlsxdrawing_p.h + $$PWD/xlsxdrawing_p.h \ + $$PWD/xlsxxmlreader_p.h \ + $$PWD/xlsxzipreader_p.h SOURCES += $$PWD/xlsxdocpropscore.cpp \ $$PWD/xlsxdocpropsapp.cpp \ @@ -38,4 +40,6 @@ SOURCES += $$PWD/xlsxdocpropscore.cpp \ $$PWD/xlsxworksheet.cpp \ $$PWD/xlsxzipwriter.cpp \ $$PWD/xlsxpackage.cpp \ - $$PWD/xlsxdrawing.cpp + $$PWD/xlsxdrawing.cpp \ + $$PWD/xlsxxmlreader.cpp \ + $$PWD/xlsxzipreader.cpp diff --git a/src/xlsx/xlsxxmlreader.cpp b/src/xlsx/xlsxxmlreader.cpp new file mode 100644 index 0000000..49d758a --- /dev/null +++ b/src/xlsx/xlsxxmlreader.cpp @@ -0,0 +1,10 @@ +#include "xlsxxmlreader_p.h" + +namespace QXlsx { + +XmlStreamReader::XmlStreamReader(QIODevice *device) : + QXmlStreamReader(device) +{ +} + +} // namespace QXlsx diff --git a/src/xlsx/xlsxxmlreader_p.h b/src/xlsx/xlsxxmlreader_p.h new file mode 100644 index 0000000..2c78dff --- /dev/null +++ b/src/xlsx/xlsxxmlreader_p.h @@ -0,0 +1,16 @@ +#ifndef QXLSX_XLSXXMLREADER_H +#define QXLSX_XLSXXMLREADER_H + +#include + +namespace QXlsx { + +class XmlStreamReader : public QXmlStreamReader +{ +public: + XmlStreamReader(QIODevice *device); +}; + +} // namespace QXlsx + +#endif // QXLSX_XLSXXMLREADER_H diff --git a/src/xlsx/xlsxzipreader.cpp b/src/xlsx/xlsxzipreader.cpp new file mode 100644 index 0000000..e47c724 --- /dev/null +++ b/src/xlsx/xlsxzipreader.cpp @@ -0,0 +1,48 @@ +#include "xlsxzipreader_p.h" + +#include + +namespace QXlsx { + +ZipReader::ZipReader(const QString &filePath) : + m_reader(new QZipReader(filePath)) +{ + init(); +} + +ZipReader::ZipReader(QIODevice *device) : + m_reader(new QZipReader(device)) +{ + init(); +} + +ZipReader::~ZipReader() +{ + +} + +void ZipReader::init() +{ + QList allFiles = m_reader->fileInfoList(); + foreach (const QZipReader::FileInfo &fi, allFiles) { + if (fi.isFile) + m_filePaths.append(fi.filePath); + } +} + +bool ZipReader::exists() const +{ + return m_reader->exists(); +} + +QStringList ZipReader::filePaths() const +{ + return m_filePaths; +} + +QByteArray ZipReader::fileData(const QString &fileName) const +{ + return m_reader->fileData(fileName); +} + +} // namespace QXlsx diff --git a/src/xlsx/xlsxzipreader_p.h b/src/xlsx/xlsxzipreader_p.h new file mode 100644 index 0000000..4d05fa3 --- /dev/null +++ b/src/xlsx/xlsxzipreader_p.h @@ -0,0 +1,31 @@ +#ifndef QXLSX_XLSXZIPREADER_P_H +#define QXLSX_XLSXZIPREADER_P_H + +#include "xlsxglobal.h" +#include +#include +class QZipReader; +class QIODevice; + +namespace QXlsx { + +class XLSX_AUTOTEST_EXPORT ZipReader +{ +public: + explicit ZipReader(const QString &fileName); + explicit ZipReader(QIODevice *device); + ~ZipReader(); + bool exists() const; + QStringList filePaths() const; + QByteArray fileData(const QString &fileName) const; + +private: + Q_DISABLE_COPY(ZipReader) + void init(); + QScopedPointer m_reader; + QStringList m_filePaths; +}; + +} // namespace QXlsx + +#endif // QXLSX_XLSXZIPREADER_P_H diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 9183dcb..24d0c2d 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,4 +1,5 @@ TEMPLATE=subdirs SUBDIRS=\ utility \ - mergecell + mergecell \ + zipreader diff --git a/tests/auto/zipreader/tst_zipreadertest.cpp b/tests/auto/zipreader/tst_zipreadertest.cpp new file mode 100644 index 0000000..c388ea6 --- /dev/null +++ b/tests/auto/zipreader/tst_zipreadertest.cpp @@ -0,0 +1,40 @@ +#include "private/xlsxzipreader_p.h" +#include +#include +#include + +const char fileContent[] = "\x50\x4B\x03\x04\x0A\x00\x00\x00\x00\x00\x8F\x51\x25\x43\x82\x89\xD1\xF7\x05\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x68\x65\x6C\x6C\x6F\x2E\x74\x78\x74\x48\x65\x6C\x6C\x6F\x50\x4B\x03\x04\x0A\x00\x00\x00\x00\x00\xB8\x53\x25\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x71\x74\x2F\x50\x4B\x03\x04\x0A\x00\x00\x00\x00\x00\x92\x51\x25\x43\x2E\x19\xFC\x34\x04\x00\x00\x00\x04\x00\x00\x00\x0B\x00\x00\x00\x71\x74\x2F\x78\x6C\x73\x78\x2E\x74\x78\x74\x58\x6C\x73\x78\x50\x4B\x01\x02\x14\x00\x0A\x00\x00\x00\x00\x00\x8F\x51\x25\x43\x82\x89\xD1\xF7\x05\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x01\x00\x20\x00\x00\x00\x00\x00\x00\x00\x68\x65\x6C\x6C\x6F\x2E\x74\x78\x74\x50\x4B\x01\x02\x14\x00\x0A\x00\x00\x00\x00\x00\xB8\x53\x25\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x2C\x00\x00\x00\x71\x74\x2F\x50\x4B\x01\x02\x14\x00\x0A\x00\x00\x00\x00\x00\x92\x51\x25\x43\x2E\x19\xFC\x34\x04\x00\x00\x00\x04\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00\x01\x00\x20\x00\x00\x00\x4D\x00\x00\x00\x71\x74\x2F\x78\x6C\x73\x78\x2E\x74\x78\x74\x50\x4B\x05\x06\x00\x00\x00\x00\x03\x00\x03\x00\xA1\x00\x00\x00\x7A\x00\x00\x00\x00\x00"; + +class ZipReaderTest : public QObject +{ + Q_OBJECT + +public: + ZipReaderTest(); + +private Q_SLOTS: + void testFileList(); +}; + +ZipReaderTest::ZipReaderTest() +{ +} + +void ZipReaderTest::testFileList() +{ + QByteArray data(fileContent, sizeof(fileContent) - 1); + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXlsx::ZipReader reader(&buffer); + + QStringList files = reader.filePaths(); + QVERIFY(files.contains("hello.txt")); + QVERIFY(files.contains("qt/xlsx.txt")); + QCOMPARE(reader.fileData("hello.txt"), QByteArray("Hello")); + QCOMPARE(reader.fileData("qt/xlsx.txt"), QByteArray("Xlsx")); +} + +QTEST_APPLESS_MAIN(ZipReaderTest) + +#include "tst_zipreadertest.moc" diff --git a/tests/auto/zipreader/zipreader.pro b/tests/auto/zipreader/zipreader.pro new file mode 100644 index 0000000..fc6a792 --- /dev/null +++ b/tests/auto/zipreader/zipreader.pro @@ -0,0 +1,18 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-09-05T10:09:38 +# +#------------------------------------------------- + +QT += testlib xlsx xlsx-private +CONFIG += testcase +DEFINES += XLSX_TEST + +TARGET = tst_zipreadertest +CONFIG += console +CONFIG -= app_bundle + +TEMPLATE = app + +SOURCES += tst_zipreadertest.cpp +DEFINES += SRCDIR=\\\"$$PWD/\\\"