Add ZipReader and XmlStreamReader
This commit is contained in:
@@ -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://www.codeproject.com/Articles/210014/How-to-read-and-write-xlsx-Excel-2007-file-Part-II
|
||||||
* http://epplus.codeplex.com/
|
* http://epplus.codeplex.com/
|
||||||
* http://excelpackage.codeplex.com/
|
* http://excelpackage.codeplex.com/
|
||||||
|
* http://spreadsheetlight.com/
|
||||||
|
|||||||
+6
-2
@@ -22,7 +22,9 @@ HEADERS += $$PWD/xlsxdocpropscore_p.h \
|
|||||||
$$PWD/xlsxworksheet_p.h \
|
$$PWD/xlsxworksheet_p.h \
|
||||||
$$PWD/xlsxformat_p.h \
|
$$PWD/xlsxformat_p.h \
|
||||||
$$PWD/xlsxglobal.h \
|
$$PWD/xlsxglobal.h \
|
||||||
$$PWD/xlsxdrawing_p.h
|
$$PWD/xlsxdrawing_p.h \
|
||||||
|
$$PWD/xlsxxmlreader_p.h \
|
||||||
|
$$PWD/xlsxzipreader_p.h
|
||||||
|
|
||||||
SOURCES += $$PWD/xlsxdocpropscore.cpp \
|
SOURCES += $$PWD/xlsxdocpropscore.cpp \
|
||||||
$$PWD/xlsxdocpropsapp.cpp \
|
$$PWD/xlsxdocpropsapp.cpp \
|
||||||
@@ -38,4 +40,6 @@ SOURCES += $$PWD/xlsxdocpropscore.cpp \
|
|||||||
$$PWD/xlsxworksheet.cpp \
|
$$PWD/xlsxworksheet.cpp \
|
||||||
$$PWD/xlsxzipwriter.cpp \
|
$$PWD/xlsxzipwriter.cpp \
|
||||||
$$PWD/xlsxpackage.cpp \
|
$$PWD/xlsxpackage.cpp \
|
||||||
$$PWD/xlsxdrawing.cpp
|
$$PWD/xlsxdrawing.cpp \
|
||||||
|
$$PWD/xlsxxmlreader.cpp \
|
||||||
|
$$PWD/xlsxzipreader.cpp
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#include "xlsxxmlreader_p.h"
|
||||||
|
|
||||||
|
namespace QXlsx {
|
||||||
|
|
||||||
|
XmlStreamReader::XmlStreamReader(QIODevice *device) :
|
||||||
|
QXmlStreamReader(device)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace QXlsx
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef QXLSX_XLSXXMLREADER_H
|
||||||
|
#define QXLSX_XLSXXMLREADER_H
|
||||||
|
|
||||||
|
#include <QXmlStreamReader>
|
||||||
|
|
||||||
|
namespace QXlsx {
|
||||||
|
|
||||||
|
class XmlStreamReader : public QXmlStreamReader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
XmlStreamReader(QIODevice *device);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace QXlsx
|
||||||
|
|
||||||
|
#endif // QXLSX_XLSXXMLREADER_H
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
#include "xlsxzipreader_p.h"
|
||||||
|
|
||||||
|
#include <private/qzipreader_p.h>
|
||||||
|
|
||||||
|
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<QZipReader::FileInfo> 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
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#ifndef QXLSX_XLSXZIPREADER_P_H
|
||||||
|
#define QXLSX_XLSXZIPREADER_P_H
|
||||||
|
|
||||||
|
#include "xlsxglobal.h"
|
||||||
|
#include <QScopedPointer>
|
||||||
|
#include <QStringList>
|
||||||
|
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<QZipReader> m_reader;
|
||||||
|
QStringList m_filePaths;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace QXlsx
|
||||||
|
|
||||||
|
#endif // QXLSX_XLSXZIPREADER_P_H
|
||||||
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
TEMPLATE=subdirs
|
TEMPLATE=subdirs
|
||||||
SUBDIRS=\
|
SUBDIRS=\
|
||||||
utility \
|
utility \
|
||||||
mergecell
|
mergecell \
|
||||||
|
zipreader
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#include "private/xlsxzipreader_p.h"
|
||||||
|
#include <QString>
|
||||||
|
#include <QtTest>
|
||||||
|
#include <QBuffer>
|
||||||
|
|
||||||
|
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"
|
||||||
@@ -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/\\\"
|
||||||
Reference in New Issue
Block a user