Using QXlsx::CellRange instead of the private XlsxCellRange
This commit is contained in:
@@ -45,10 +45,22 @@ public:
|
|||||||
inline int rowCount() const { return bottom - top + 1; }
|
inline int rowCount() const { return bottom - top + 1; }
|
||||||
inline int columnCount() const { return right - left + 1; }
|
inline int columnCount() const { return right - left + 1; }
|
||||||
|
|
||||||
|
inline bool operator ==(const CellRange &other) const
|
||||||
|
{
|
||||||
|
return top==other.top && bottom==other.bottom
|
||||||
|
&& left == other.left && right == other.right;
|
||||||
|
}
|
||||||
|
inline bool operator !=(const CellRange &other) const
|
||||||
|
{
|
||||||
|
return top!=other.top || bottom!=other.bottom
|
||||||
|
|| left != other.left || right != other.right;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
int top, left, bottom, right;
|
int top, left, bottom, right;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE_XLSX
|
QT_END_NAMESPACE_XLSX
|
||||||
|
|
||||||
|
Q_DECLARE_TYPEINFO(QXlsx::CellRange, Q_MOVABLE_TYPE);
|
||||||
|
|
||||||
#endif // QXLSX_XLSXCELLRANGE_H
|
#endif // QXLSX_XLSXCELLRANGE_H
|
||||||
|
|||||||
+27
-38
@@ -545,6 +545,19 @@ int Worksheet::insertImage(int row, int column, const QImage &image, const QPoin
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Worksheet::mergeCells(const CellRange &range)
|
||||||
|
{
|
||||||
|
Q_D(Worksheet);
|
||||||
|
if (range.rowCount() < 2 && range.columnCount() < 2)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (d->checkDimensions(range.firstRow(), range.firstColumn()))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
d->merges.append(range);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int Worksheet::mergeCells(const QString &range)
|
int Worksheet::mergeCells(const QString &range)
|
||||||
{
|
{
|
||||||
QStringList cells = range.split(QLatin1Char(':'));
|
QStringList cells = range.split(QLatin1Char(':'));
|
||||||
@@ -556,27 +569,21 @@ int Worksheet::mergeCells(const QString &range)
|
|||||||
if (cell1 == QPoint(-1,-1) || cell2 == QPoint(-1, -1))
|
if (cell1 == QPoint(-1,-1) || cell2 == QPoint(-1, -1))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return mergeCells(cell1.x(), cell1.y(), cell2.x(), cell2.y());
|
return mergeCells(CellRange(cell1.x(), cell1.y(), cell2.x(), cell2.y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int Worksheet::mergeCells(int row_begin, int column_begin, int row_end, int column_end)
|
int Worksheet::mergeCells(int row_begin, int column_begin, int row_end, int column_end)
|
||||||
|
{
|
||||||
|
return mergeCells(CellRange(row_begin, column_begin, row_end, column_end));
|
||||||
|
}
|
||||||
|
|
||||||
|
int Worksheet::unmergeCells(const CellRange &range)
|
||||||
{
|
{
|
||||||
Q_D(Worksheet);
|
Q_D(Worksheet);
|
||||||
|
if (!d->merges.contains(range))
|
||||||
if (row_begin == row_end && column_begin == column_end)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (d->checkDimensions(row_end, column_end))
|
d->merges.removeOne(range);
|
||||||
return -1;
|
|
||||||
|
|
||||||
XlsxCellRange range;
|
|
||||||
range.row_begin = row_begin;
|
|
||||||
range.row_end = row_end;
|
|
||||||
range.column_begin = column_begin;
|
|
||||||
range.column_end = column_end;
|
|
||||||
|
|
||||||
d->merges.append(range);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,24 +598,12 @@ int Worksheet::unmergeCells(const QString &range)
|
|||||||
if (cell1 == QPoint(-1,-1) || cell2 == QPoint(-1, -1))
|
if (cell1 == QPoint(-1,-1) || cell2 == QPoint(-1, -1))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return unmergeCells(cell1.x(), cell1.y(), cell2.x(), cell2.y());
|
return unmergeCells(CellRange(cell1.x(), cell1.y(), cell2.x(), cell2.y()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int Worksheet::unmergeCells(int row_begin, int column_begin, int row_end, int column_end)
|
int Worksheet::unmergeCells(int row_begin, int column_begin, int row_end, int column_end)
|
||||||
{
|
{
|
||||||
Q_D(Worksheet);
|
return unmergeCells(CellRange(row_begin, column_begin, row_end, column_end));
|
||||||
XlsxCellRange range;
|
|
||||||
range.row_begin = row_begin;
|
|
||||||
range.row_end = row_end;
|
|
||||||
range.column_begin = column_begin;
|
|
||||||
range.column_end = column_end;
|
|
||||||
|
|
||||||
if (!d->merges.contains(range))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
d->merges.removeOne(range);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Worksheet::saveToXmlFile(QIODevice *device)
|
void Worksheet::saveToXmlFile(QIODevice *device)
|
||||||
@@ -793,9 +788,9 @@ void WorksheetPrivate::writeMergeCells(XmlStreamWriter &writer)
|
|||||||
writer.writeStartElement(QStringLiteral("mergeCells"));
|
writer.writeStartElement(QStringLiteral("mergeCells"));
|
||||||
writer.writeAttribute(QStringLiteral("count"), QString::number(merges.size()));
|
writer.writeAttribute(QStringLiteral("count"), QString::number(merges.size()));
|
||||||
|
|
||||||
foreach (XlsxCellRange range, merges) {
|
foreach (CellRange range, merges) {
|
||||||
QString cell1 = xl_rowcol_to_cell(range.row_begin, range.column_begin);
|
QString cell1 = xl_rowcol_to_cell(range.firstRow(), range.firstColumn());
|
||||||
QString cell2 = xl_rowcol_to_cell(range.row_end, range.column_end);
|
QString cell2 = xl_rowcol_to_cell(range.lastRow(), range.lastColumn());
|
||||||
writer.writeEmptyElement(QStringLiteral("mergeCell"));
|
writer.writeEmptyElement(QStringLiteral("mergeCell"));
|
||||||
writer.writeAttribute(QStringLiteral("ref"), cell1+QLatin1Char(':')+cell2);
|
writer.writeAttribute(QStringLiteral("ref"), cell1+QLatin1Char(':')+cell2);
|
||||||
}
|
}
|
||||||
@@ -1446,13 +1441,7 @@ void WorksheetPrivate::readMergeCells(XmlStreamReader &reader)
|
|||||||
QPoint p0 = xl_cell_to_rowcol(items[0]);
|
QPoint p0 = xl_cell_to_rowcol(items[0]);
|
||||||
QPoint p1 = xl_cell_to_rowcol(items[1]);
|
QPoint p1 = xl_cell_to_rowcol(items[1]);
|
||||||
|
|
||||||
XlsxCellRange range;
|
merges.append(CellRange(p0.x(), p0.y(), p1.x(), p1.y()));
|
||||||
range.row_begin = p0.x();
|
|
||||||
range.column_begin = p0.y();
|
|
||||||
range.row_end = p1.x();
|
|
||||||
range.column_end = p1.y();
|
|
||||||
|
|
||||||
merges.append(range);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include "xlsxglobal.h"
|
#include "xlsxglobal.h"
|
||||||
#include "xlsxcell.h"
|
#include "xlsxcell.h"
|
||||||
|
#include "xlsxcellrange.h"
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
@@ -71,8 +72,10 @@ public:
|
|||||||
|
|
||||||
int mergeCells(int row_begin, int column_begin, int row_end, int column_end);
|
int mergeCells(int row_begin, int column_begin, int row_end, int column_end);
|
||||||
int mergeCells(const QString &range);
|
int mergeCells(const QString &range);
|
||||||
|
int mergeCells(const CellRange &range);
|
||||||
int unmergeCells(int row_begin, int column_begin, int row_end, int column_end);
|
int unmergeCells(int row_begin, int column_begin, int row_end, int column_end);
|
||||||
int unmergeCells(const QString &range);
|
int unmergeCells(const QString &range);
|
||||||
|
int unmergeCells(const CellRange &range);
|
||||||
|
|
||||||
bool setRow(int row, double height, Format* format=0, bool hidden=false);
|
bool setRow(int row, double height, Format* format=0, bool hidden=false);
|
||||||
bool setColumn(int colFirst, int colLast, double width, Format* format=0, bool hidden=false);
|
bool setColumn(int colFirst, int colLast, double width, Format* format=0, bool hidden=false);
|
||||||
|
|||||||
@@ -74,23 +74,6 @@ struct XlsxImageData
|
|||||||
double yScale;
|
double yScale;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct XlsxCellRange
|
|
||||||
{
|
|
||||||
int row_begin;
|
|
||||||
int row_end;
|
|
||||||
int column_begin;
|
|
||||||
int column_end;
|
|
||||||
|
|
||||||
bool operator ==(const XlsxCellRange &other) const {
|
|
||||||
return row_begin==other.row_begin && row_end==other.row_end
|
|
||||||
&& column_begin == other.column_begin && column_end==other.column_end;
|
|
||||||
}
|
|
||||||
bool operator !=(const XlsxCellRange &other) const {
|
|
||||||
return row_begin!=other.row_begin || row_end!=other.row_end
|
|
||||||
|| column_begin != other.column_begin || column_end!=other.column_end;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The vertices that define the position of a graphical object
|
The vertices that define the position of a graphical object
|
||||||
within the worksheet in pixels.
|
within the worksheet in pixels.
|
||||||
@@ -198,7 +181,7 @@ public:
|
|||||||
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, XlsxUrlData *> > urlTable;
|
QMap<int, QMap<int, XlsxUrlData *> > urlTable;
|
||||||
QList<XlsxCellRange> merges;
|
QList<CellRange> merges;
|
||||||
QStringList externUrlList;
|
QStringList externUrlList;
|
||||||
QStringList externDrawingList;
|
QStringList externDrawingList;
|
||||||
QList<XlsxImageData *> imageList;
|
QList<XlsxImageData *> imageList;
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ void WorksheetTest::testReadMergeCells()
|
|||||||
sheet.d_ptr->readMergeCells(reader);
|
sheet.d_ptr->readMergeCells(reader);
|
||||||
|
|
||||||
QCOMPARE(sheet.d_ptr->merges.size(), 2);
|
QCOMPARE(sheet.d_ptr->merges.size(), 2);
|
||||||
QCOMPARE(sheet.d_ptr->merges[0].row_end, 4);
|
QCOMPARE(sheet.d_ptr->merges[0].toString(), QStringLiteral("B1:B5"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorksheetTest::testReadDataValidations()
|
void WorksheetTest::testReadDataValidations()
|
||||||
|
|||||||
Reference in New Issue
Block a user