diff --git a/.gitignore b/.gitignore index 7626bcb2..ca2bee8d 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,7 @@ QXlsx/debug/* QXlsx/release/* *.-1 *.pro.user -build-*/ +build*/ /build-*/* # visual studio diff --git a/QXlsx/header/xlsxabstractsheet_p.h b/QXlsx/header/xlsxabstractsheet_p.h index 6b5568fa..7a37c6ac 100644 --- a/QXlsx/header/xlsxabstractsheet_p.h +++ b/QXlsx/header/xlsxabstractsheet_p.h @@ -28,6 +28,9 @@ class AbstractSheetPrivate : public AbstractOOXmlFilePrivate int id; AbstractSheet::SheetState sheetState; AbstractSheet::SheetType type; + + int frozen_rows{}; + int frozen_cols{}; }; QT_END_NAMESPACE_XLSX diff --git a/QXlsx/header/xlsxworksheet.h b/QXlsx/header/xlsxworksheet.h index 7c9232a8..dae33794 100644 --- a/QXlsx/header/xlsxworksheet.h +++ b/QXlsx/header/xlsxworksheet.h @@ -186,6 +186,8 @@ class QXLSX_EXPORT Worksheet : public AbstractSheet bool isWhiteSpaceVisible() const; void setWhiteSpaceVisible(bool visible); bool setStartPage(int spagen); // add by liufeijin20181028 + void setFrozenRows(int rows); + void setFrozenColumns(int cols); QVector getFullCells(int *maxRow, int *maxCol); diff --git a/QXlsx/source/xlsxworksheet.cpp b/QXlsx/source/xlsxworksheet.cpp index 9f153963..ff65c198 100644 --- a/QXlsx/source/xlsxworksheet.cpp +++ b/QXlsx/source/xlsxworksheet.cpp @@ -1316,6 +1316,17 @@ void Worksheet::saveToXmlFile(QIODevice *device) const if (!d->showWhiteSpace) writer.writeAttribute(QStringLiteral("showWhiteSpace"), QStringLiteral("0")); writer.writeAttribute(QStringLiteral("workbookViewId"), QStringLiteral("0")); + if ((d->frozen_cols > 0) || (d->frozen_rows > 0)) { + writer.writeStartElement(QStringLiteral("pane")); + if (d->frozen_cols > 0) + writer.writeAttribute(QStringLiteral("xSplit"), QString::number(d->frozen_cols)); // set count of fixed col + if (d->frozen_rows > 0) + writer.writeAttribute(QStringLiteral("ySplit"), QString::number(d->frozen_rows)); // set count of fixed row + writer.writeAttribute(QStringLiteral("topLeftCell"), CellReference(d->frozen_rows + 1, d->frozen_cols + 1).toString()); //set next after fixed area cell + writer.writeAttribute(QStringLiteral("activePane"), QStringLiteral("bottomRight")); + writer.writeAttribute(QStringLiteral("state"), QStringLiteral("frozenSplit")); + writer.writeEndElement(); // pane + } writer.writeEndElement(); // sheetView writer.writeEndElement(); // sheetViews @@ -1474,6 +1485,20 @@ bool Worksheet::setStartPage(int spagen) } //}} +void Worksheet::setFrozenRows(int rows) +{ + Q_D(Worksheet); + + d->frozen_rows=rows; +} + +void Worksheet::setFrozenColumns(int cols) +{ + Q_D(Worksheet); + + d->frozen_cols=cols; +} + void WorksheetPrivate::saveXmlSheetData(QXmlStreamWriter &writer) const { calculateSpans();