Browse Source

Add cell alignment control

master
Debao Zhang 11 years ago
parent
commit
f1632ee596
  1. 1
      examples/style/main.cpp
  2. 157
      src/xlsxformat.cpp
  3. 51
      src/xlsxformat.h
  4. 21
      src/xlsxstyles.cpp
  5. 1
      src/xlsxworksheet.cpp

1
examples/style/main.cpp

@ -17,6 +17,7 @@ int main()
QXlsx::Format *format1 = workbook.addFormat();
format1->setFontColor(QColor(Qt::red));
format1->setFontSize(15);
format1->setHorizontalAlignment(QXlsx::Format::AlignHCenter);
sheet->write("A1", "Hello Qt!", format1);
sheet->write("B3", 12345, format1);

157
src/xlsxformat.cpp

@ -46,6 +46,13 @@ Format::Format()
m_font.redundant = false;
m_font.index = 0;
m_alignment.alignH = AlignHGeneral;
m_alignment.alignV = AlignBottom;
m_alignment.wrap = false;
m_alignment.rotation = 0;
m_alignment.indent = 0;
m_alignment.shinkToFit = false;
m_is_dxf_fomat = false;
m_xf_index = 0;
@ -152,6 +159,156 @@ void Format::setFontName(const QString &name)
m_font.name = name;
}
Format::HorizontalAlignment Format::horizontalAlignment() const
{
return m_alignment.alignH;
}
void Format::setHorizontalAlignment(HorizontalAlignment align)
{
if (m_alignment.indent &&(align != AlignHGeneral && align != AlignLeft &&
align != AlignRight && align != AlignHDistributed)) {
m_alignment.indent = 0;
}
if (m_alignment.shinkToFit && (align == AlignHFill || align == AlignHJustify
|| align == AlignHDistributed)) {
m_alignment.shinkToFit = false;
}
m_alignment.alignH = align;
}
Format::VerticalAlignment Format::verticalAlignment() const
{
return m_alignment.alignV;
}
void Format::setVerticalAlignment(VerticalAlignment align)
{
m_alignment.alignV = align;
}
bool Format::textWrap() const
{
return m_alignment.wrap;
}
void Format::setTextWarp(bool wrap)
{
if (wrap && m_alignment.shinkToFit)
m_alignment.shinkToFit = false;
m_alignment.wrap = wrap;
}
int Format::rotation() const
{
return m_alignment.rotation;
}
void Format::setRotation(int rotation)
{
m_alignment.rotation = rotation;
}
int Format::indent() const
{
return m_alignment.indent;
}
void Format::setIndent(int indent)
{
if (indent && (m_alignment.alignH != AlignHGeneral
&& m_alignment.alignH != AlignLeft
&& m_alignment.alignH != AlignRight
&& m_alignment.alignH != AlignHJustify)) {
m_alignment.alignH = AlignLeft;
}
m_alignment.indent = indent;
}
bool Format::shrinkToFit() const
{
return m_alignment.shinkToFit;
}
void Format::setShrinkToFit(bool shink)
{
if (shink && m_alignment.wrap)
m_alignment.wrap = false;
if (shink && (m_alignment.alignH == AlignHFill
|| m_alignment.alignH == AlignHJustify
|| m_alignment.alignH == AlignHDistributed)) {
m_alignment.alignH = AlignLeft;
}
m_alignment.shinkToFit = shink;
}
bool Format::alignmentChanged() const
{
return m_alignment.alignH != AlignHGeneral
|| m_alignment.alignV != AlignBottom
|| m_alignment.indent != 0
|| m_alignment.wrap
|| m_alignment.rotation != 0
|| m_alignment.shinkToFit;
}
QString Format::horizontalAlignmentString() const
{
QString alignH;
switch (m_alignment.alignH) {
case Format::AlignLeft:
alignH = "left";
break;
case Format::AlignHCenter:
alignH = "center";
break;
case Format::AlignRight:
alignH = "right";
break;
case Format::AlignHFill:
alignH = "fill";
break;
case Format::AlignHJustify:
alignH = "justify";
break;
case Format::AlignHMerge:
alignH = "centerContinuous";
break;
case Format::AlignHDistributed:
alignH = "distributed";
break;
default:
break;
}
return alignH;
}
QString Format::verticalAlignmentString() const
{
QString align;
switch (m_alignment.alignV) {
case AlignTop:
align = "top";
break;
case AlignVCenter:
align = "center";
break;
case AlignVJustify:
align = "justify";
break;
case AlignVDistributed:
align = "distributed";
break;
default:
break;
}
return align;
}
bool Format::isDxfFormat() const
{
return m_is_dxf_fomat;

51
src/xlsxformat.h

@ -52,6 +52,27 @@ public:
FontUnderlineDoubleAccounting
};
enum HorizontalAlignment
{
AlignHGeneral,
AlignLeft,
AlignHCenter,
AlignRight,
AlignHFill,
AlignHJustify,
AlignHMerge,
AlignHDistributed
};
enum VerticalAlignment
{
AlignTop,
AlignVCenter,
AlignBottom,
AlignVJustify,
AlignVDistributed
};
int fontSize() const;
void setFontSize(int size);
bool fontItalic() const;
@ -71,15 +92,28 @@ public:
QString fontName() const;
void setFontName(const QString &);
HorizontalAlignment horizontalAlignment() const;
void setHorizontalAlignment(HorizontalAlignment align);
VerticalAlignment verticalAlignment() const;
void setVerticalAlignment(VerticalAlignment align);
bool textWrap() const;
void setTextWarp(bool textWrap);
int rotation() const;
void setRotation(int rotation);
int indent() const;
void setIndent(int indent);
bool shrinkToFit() const;
void setShrinkToFit(bool shink);
void setForegroundColor(const QColor &color);
void setBackgroundColor(const QColor &color);
private:
friend class Styles;
friend class Worksheet;
explicit Format();
Format();
struct Font
struct FontData
{
int size;
bool italic;
@ -109,6 +143,19 @@ private:
bool fontShadow() const {return m_font.shadow;}
QString fontScheme() const {return m_font.scheme;}
struct AlignmentData
{
HorizontalAlignment alignH;
VerticalAlignment alignV;
bool wrap;
int rotation;
int indent;
bool shinkToFit;
} m_alignment;
bool alignmentChanged() const;
QString horizontalAlignmentString() const;
QString verticalAlignmentString() const;
bool isDxfFormat() const;
int xfIndex() const {return m_xf_index;}

21
src/xlsxstyles.cpp

@ -238,6 +238,27 @@ void Styles::writeCellXfs(XmlStreamWriter &writer)
writer.writeAttribute("applyFont", "1");
if (format->fillIndex() > 0)
writer.writeAttribute("applyBorder", "1");
if (format->alignmentChanged())
writer.writeAttribute("applyAlignment", "1");
if (format->alignmentChanged()) {
writer.writeEmptyElement("alignment");
QString alignH = format->horizontalAlignmentString();
if (!alignH.isEmpty())
writer.writeAttribute("horizontal", alignH);
QString alignV = format->verticalAlignmentString();
if (!alignV.isEmpty())
writer.writeAttribute("vertical", alignV);
if (format->indent())
writer.writeAttribute("indent", QString::number(format->indent()));
if (format->textWrap())
writer.writeAttribute("wrapText", "1");
if (format->shrinkToFit())
writer.writeAttribute("shrinkToFit", "1");
if (format->shrinkToFit())
writer.writeAttribute("shrinkToFit", "1");
}
writer.writeEndElement();//xf
}
writer.writeEndElement();//cellXfs

1
src/xlsxworksheet.cpp

@ -33,6 +33,7 @@
#include <QDateTime>
#include <QPoint>
#include <QFile>
#include <QDebug>
#include <stdint.h>

Loading…
Cancel
Save