Skip to content

Commit ecbe204

Browse files
committed
PageSetup added dbzhang800#91
1 parent ab3b083 commit ecbe204

File tree

5 files changed

+157
-1
lines changed

5 files changed

+157
-1
lines changed

src/xlsx/xlsxformat.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,23 @@ Format::HorizontalAlignment Format::horizontalAlignment() const
563563
return static_cast<Format::HorizontalAlignment>(intProperty(FormatPrivate::P_Alignment_AlignH, AlignHGeneral));
564564
}
565565

566+
/*!
567+
* Set the horizontal alignment with the given \a align.
568+
*/
569+
void Format::setHorizontalAlignment(Qt::Alignment qtalign)
570+
{
571+
HorizontalAlignment align;
572+
switch (qtalign) {
573+
case Qt::AlignLeft: align = AlignLeft; break;
574+
case Qt::AlignRight: align = AlignRight; break;
575+
case Qt::AlignHCenter: align = AlignHCenter; break;
576+
default:
577+
align = AlignLeft;
578+
break;
579+
}
580+
setHorizontalAlignment(align);
581+
}
582+
566583
/*!
567584
* Set the horizontal alignment with the given \a align.
568585
*/

src/xlsx/xlsxformat.h

+1
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class Q_XLSX_EXPORT Format
176176
void setFont(const QFont &font);
177177

178178
HorizontalAlignment horizontalAlignment() const;
179+
void setHorizontalAlignment(Qt::Alignment qtalign);
179180
void setHorizontalAlignment(HorizontalAlignment align);
180181
VerticalAlignment verticalAlignment() const;
181182
void setVerticalAlignment(VerticalAlignment align);

src/xlsx/xlsxworksheet.cpp

+114-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag)
5858
: AbstractSheetPrivate(p, flag)
5959
, windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true)
6060
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
61-
, showOutlineSymbols(true), showWhiteSpace(true), urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)"))
61+
, showOutlineSymbols(true), showWhiteSpace(true)
62+
, pageOrientationPortait(true), fitToPage(false)
63+
, urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)"))
6264
{
6365
previous_row = 0;
6466

@@ -67,6 +69,10 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag)
6769

6870
default_row_height = 15;
6971
default_row_zeroed = false;
72+
73+
paperSize = 9;
74+
fitToHeight = -1;
75+
fitToWidth = -1;
7076
}
7177

7278
WorksheetPrivate::~WorksheetPrivate()
@@ -454,6 +460,72 @@ void Worksheet::setWhiteSpaceVisible(bool visible)
454460
d->showWhiteSpace = visible;
455461
}
456462

463+
int Worksheet::paperSize()
464+
{
465+
Q_D(const Worksheet);
466+
return d->paperSize;
467+
}
468+
469+
void Worksheet::setPaperSize(int size)
470+
{
471+
Q_D(Worksheet);
472+
d->paperSize = size;
473+
}
474+
475+
bool Worksheet::isLandscape()
476+
{
477+
Q_D(const Worksheet);
478+
return !d->pageOrientationPortait;
479+
}
480+
481+
bool Worksheet::isPortait()
482+
{
483+
Q_D(const Worksheet);
484+
return d->pageOrientationPortait;
485+
}
486+
487+
void Worksheet::setOrientation(bool isPortait)
488+
{
489+
Q_D(Worksheet);
490+
d->pageOrientationPortait = isPortait;
491+
}
492+
493+
bool Worksheet::fitToPage()
494+
{
495+
Q_D(const Worksheet);
496+
return d->fitToPage;
497+
}
498+
499+
void Worksheet::setFitToPage(bool fit)
500+
{
501+
Q_D(Worksheet);
502+
d->fitToPage = fit;
503+
}
504+
505+
int Worksheet::fitToWidth()
506+
{
507+
Q_D(const Worksheet);
508+
return d->fitToWidth;
509+
}
510+
511+
void Worksheet::setFitToWidth(int width)
512+
{
513+
Q_D(Worksheet);
514+
d->fitToWidth = width;
515+
}
516+
517+
int Worksheet::fitToHeight()
518+
{
519+
Q_D(const Worksheet);
520+
return d->fitToHeight;
521+
}
522+
523+
void Worksheet::setFitToHeight(int height)
524+
{
525+
Q_D(Worksheet);
526+
d->fitToHeight = height;
527+
}
528+
457529
/*!
458530
* Write \a value to cell (\a row, \a column) with the \a format.
459531
* Both \a row and \a column are all 1-indexed value.
@@ -1248,6 +1320,15 @@ void Worksheet::saveToXmlFile(QIODevice *device) const
12481320
// writer.writeAttribute("xmlns:x14ac", "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac");
12491321
// writer.writeAttribute("mc:Ignorable", "x14ac");
12501322

1323+
//fit To Page
1324+
if (d->fitToPage) {
1325+
writer.writeStartElement(QStringLiteral("sheetPr"));
1326+
writer.writeStartElement(QStringLiteral("pageSetUpPr"));
1327+
writer.writeAttribute(QStringLiteral("fitToPage"), QStringLiteral("1"));
1328+
writer.writeEndElement();//pageSetUpPr
1329+
writer.writeEndElement();//sheetPr
1330+
}
1331+
12511332
writer.writeStartElement(QStringLiteral("dimension"));
12521333
writer.writeAttribute(QStringLiteral("ref"), d->generateDimensionString());
12531334
writer.writeEndElement();//dimension
@@ -1323,6 +1404,26 @@ void Worksheet::saveToXmlFile(QIODevice *device) const
13231404
d->saveXmlSheetData(writer);
13241405
writer.writeEndElement();//sheetData
13251406

1407+
//PageSetup
1408+
// writer.writeStartElement(QStringLiteral("pageMargins"));
1409+
// writer.writeAttribute(QStringLiteral("left"), QStringLiteral("0.70866141732283472"));
1410+
// writer.writeAttribute(QStringLiteral("right"), QStringLiteral("0.70866141732283472"));
1411+
// writer.writeAttribute(QStringLiteral("top"), QStringLiteral("0.78740157480314965"));
1412+
// writer.writeAttribute(QStringLiteral("bottom"), QStringLiteral("0.78740157480314965"));
1413+
// writer.writeAttribute(QStringLiteral("header"), QStringLiteral("0.31496062992125984"));
1414+
// writer.writeAttribute(QStringLiteral("footer"), QStringLiteral("0.31496062992125984"));
1415+
// writer.writeEndElement();//pageMargins
1416+
writer.writeStartElement(QStringLiteral("pageSetup"));
1417+
writer.writeAttribute(QStringLiteral("r:id"), QStringLiteral("rId1"));
1418+
writer.writeAttribute(QStringLiteral("orientation"),
1419+
(d->pageOrientationPortait ? QStringLiteral("portrait") : QStringLiteral("landscape")));
1420+
writer.writeAttribute(QStringLiteral("paperSize"), QString::number(d->paperSize));
1421+
if (d->fitToWidth > -1)
1422+
writer.writeAttribute(QStringLiteral("fitToWidth"), QString::number(d->fitToWidth));
1423+
if (d->fitToHeight > -1)
1424+
writer.writeAttribute(QStringLiteral("fitToHeight"), QString::number(d->fitToHeight));
1425+
writer.writeEndElement();//pageSetup
1426+
13261427
d->saveXmlMergeCells(writer);
13271428
foreach (const ConditionalFormatting cf, d->conditionalFormattingList)
13281429
cf.saveToXml(writer);
@@ -2300,6 +2401,16 @@ void WorksheetPrivate::loadXmlHyperlinks(QXmlStreamReader &reader)
23002401
}
23012402
}
23022403

2404+
void WorksheetPrivate::loadXmlPageSetup(QXmlStreamReader &reader)
2405+
{
2406+
Q_ASSERT(reader.name() == QLatin1String("pageSetup"));
2407+
QXmlStreamAttributes attrs = reader.attributes();
2408+
// foreach (QXmlStreamAttribute at, attrs) {
2409+
// qDebug() << "load 3" << at.name() << at.value();
2410+
// }
2411+
attrs.value(QLatin1String("orientation")) == QLatin1String("QLatin1String");
2412+
}
2413+
23032414
QList <QSharedPointer<XlsxColumnInfo> > WorksheetPrivate::getColumnInfoList(int colFirst, int colLast)
23042415
{
23052416
QList <QSharedPointer<XlsxColumnInfo> > columnsInfoList;
@@ -2360,6 +2471,8 @@ bool Worksheet::loadFromXmlFile(QIODevice *device)
23602471
d->dimension = CellRange(range);
23612472
} else if (reader.name() == QLatin1String("sheetViews")) {
23622473
d->loadXmlSheetViews(reader);
2474+
} else if (reader.name() == QLatin1String("pageSetup")) {
2475+
d->loadXmlPageSetup(reader);
23632476
} else if (reader.name() == QLatin1String("sheetFormatPr")) {
23642477
d->loadXmlSheetFormatProps(reader);
23652478
} else if (reader.name() == QLatin1String("cols")) {

src/xlsx/xlsxworksheet.h

+17
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,23 @@ class Q_XLSX_EXPORT Worksheet : public AbstractSheet
158158
bool isWhiteSpaceVisible() const;
159159
void setWhiteSpaceVisible(bool visible);
160160

161+
//PageSetup
162+
int paperSize();
163+
/**
164+
* Sets the paper size - see valid values on this website
165+
* https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.pagesetup%28v=office.14%29.aspx
166+
*/
167+
void setPaperSize(int size);
168+
bool isLandscape();
169+
bool isPortait();
170+
void setOrientation(bool isPortait);
171+
bool fitToPage();
172+
void setFitToPage(bool fit);
173+
int fitToWidth();
174+
void setFitToWidth(int width);
175+
int fitToHeight();
176+
void setFitToHeight(int height);
177+
161178
~Worksheet();
162179

163180
private:

src/xlsx/xlsxworksheet_p.h

+8
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class XLSX_AUTOTEST_EXPORT WorksheetPrivate : public AbstractSheetPrivate
176176
void loadXmlSheetFormatProps(QXmlStreamReader &reader);
177177
void loadXmlSheetViews(QXmlStreamReader &reader);
178178
void loadXmlHyperlinks(QXmlStreamReader &reader);
179+
void loadXmlPageSetup(QXmlStreamReader &reader);
179180

180181
QList<QSharedPointer<XlsxRowInfo> > getRowInfoList(int rowFirst, int rowLast);
181182
QList <QSharedPointer<XlsxColumnInfo> > getColumnInfoList(int colFirst, int colLast);
@@ -221,6 +222,13 @@ class XLSX_AUTOTEST_EXPORT WorksheetPrivate : public AbstractSheetPrivate
221222
bool showRuler;
222223
bool showOutlineSymbols;
223224
bool showWhiteSpace;
225+
226+
//pageSetup
227+
int paperSize;
228+
bool pageOrientationPortait;
229+
bool fitToPage;
230+
int fitToHeight;
231+
int fitToWidth;
224232

225233
QRegularExpression urlPattern;
226234
private:

0 commit comments

Comments
 (0)