Browse Source

Using QXlsx::CellRange instead of the private XlsxCellRange

master
Debao Zhang 11 years ago
parent
commit
0155cc5409
  1. 12
      src/xlsx/xlsxcellrange.h
  2. 65
      src/xlsx/xlsxworksheet.cpp
  3. 3
      src/xlsx/xlsxworksheet.h
  4. 19
      src/xlsx/xlsxworksheet_p.h
  5. 2
      tests/auto/worksheet/tst_worksheet.cpp

12
src/xlsx/xlsxcellrange.h

@ -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

65
src/xlsx/xlsxworksheet.cpp

@ -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)
{ {
Q_D(Worksheet); return mergeCells(CellRange(row_begin, column_begin, row_end, column_end));
}
if (row_begin == row_end && column_begin == column_end)
return -1;
if (d->checkDimensions(row_end, column_end)) int Worksheet::unmergeCells(const CellRange &range)
{
Q_D(Worksheet);
if (!d->merges.contains(range))
return -1; return -1;
XlsxCellRange range; d->merges.removeOne(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);
} }
} }
} }

3
src/xlsx/xlsxworksheet.h

@ -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);

19
src/xlsx/xlsxworksheet_p.h

@ -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;

2
tests/auto/worksheet/tst_worksheet.cpp

@ -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()

Loading…
Cancel
Save