From 0d3cc207783066740a4b9d66daa54bdc7a25b340 Mon Sep 17 00:00:00 2001 From: AndreiCherniaev Date: Wed, 28 Aug 2024 15:00:11 +0900 Subject: [PATCH 1/2] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 230af505fedc40af3119f63e0645269853404510 Mon Sep 17 00:00:00 2001 From: AndreiCherniaev Date: Wed, 28 Aug 2024 16:03:34 +0900 Subject: [PATCH 2/2] freeze row or col Example xlsx.currentWorksheet()->setFrozenRows(1); To freeze header like in https://www.youtube.com/watch?v=e_X5b6FKSno Co-Authored-By: SergeyZaz <2862297+sergeyzaz@users.noreply.github.com> --- QXlsx/header/xlsxabstractsheet_p.h | 3 +++ QXlsx/header/xlsxworksheet.h | 2 ++ QXlsx/source/xlsxworksheet.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+) 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();