Browse Source

Make write string slightly fast

master
Debao Zhang 11 years ago
parent
commit
36c42eb39b
  1. 5
      src/xlsx/xlsxrichstring.cpp
  2. 13
      src/xlsx/xlsxworkbook.cpp
  3. 2
      src/xlsx/xlsxworkbook.h
  4. 1
      src/xlsx/xlsxworkbook_p.h
  5. 49
      src/xlsx/xlsxworksheet.cpp
  6. 3
      src/xlsx/xlsxworksheet_p.h

5
src/xlsx/xlsxrichstring.cpp

@ -70,10 +70,7 @@ RichString::RichString()
RichString::RichString(const QString text) RichString::RichString(const QString text)
:d(new RichStringPrivate) :d(new RichStringPrivate)
{ {
if (Qt::mightBeRichText(text)) addFragment(text, Format());
setHtml(text);
else
addFragment(text, Format());
} }
/*! /*!

13
src/xlsx/xlsxworkbook.cpp

@ -55,6 +55,7 @@ WorkbookPrivate::WorkbookPrivate(Workbook *q, Workbook::CreateFlag flag) :
window_height = 9660; window_height = 9660;
strings_to_numbers_enabled = false; strings_to_numbers_enabled = false;
strings_to_hyperlinks_enabled = true;
html_to_richstring_enabled = false; html_to_richstring_enabled = false;
date1904 = false; date1904 = false;
defaultDateFormat = QStringLiteral("yyyy-mm-dd"); defaultDateFormat = QStringLiteral("yyyy-mm-dd");
@ -118,6 +119,18 @@ bool Workbook::isStringsToNumbersEnabled() const
return d->strings_to_numbers_enabled; return d->strings_to_numbers_enabled;
} }
void Workbook::setStringsToHyperlinksEnabled(bool enable)
{
Q_D(Workbook);
d->strings_to_hyperlinks_enabled = enable;
}
bool Workbook::isStringsToHyperlinksEnabled() const
{
Q_D(const Workbook);
return d->strings_to_hyperlinks_enabled;
}
void Workbook::setHtmlToRichStringEnabled(bool enable) void Workbook::setHtmlToRichStringEnabled(bool enable)
{ {
Q_D(Workbook); Q_D(Workbook);

2
src/xlsx/xlsxworkbook.h

@ -74,6 +74,8 @@ public:
void setDate1904(bool date1904); void setDate1904(bool date1904);
bool isStringsToNumbersEnabled() const; bool isStringsToNumbersEnabled() const;
void setStringsToNumbersEnabled(bool enable=true); void setStringsToNumbersEnabled(bool enable=true);
bool isStringsToHyperlinksEnabled() const;
void setStringsToHyperlinksEnabled(bool enable=true);
bool isHtmlToRichStringEnabled() const; bool isHtmlToRichStringEnabled() const;
void setHtmlToRichStringEnabled(bool enable=true); void setHtmlToRichStringEnabled(bool enable=true);
QString defaultDateFormat() const; QString defaultDateFormat() const;

1
src/xlsx/xlsxworkbook_p.h

@ -82,6 +82,7 @@ public:
QList<XlsxDefineNameData> definedNamesList; QList<XlsxDefineNameData> definedNamesList;
bool strings_to_numbers_enabled; bool strings_to_numbers_enabled;
bool strings_to_hyperlinks_enabled;
bool html_to_richstring_enabled; bool html_to_richstring_enabled;
bool date1904; bool date1904;
QString defaultDateFormat; QString defaultDateFormat;

49
src/xlsx/xlsxworksheet.cpp

@ -60,7 +60,7 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag)
: AbstractSheetPrivate(p, flag) : AbstractSheetPrivate(p, flag)
, windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true) , windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true)
, showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false) , showZeros(true), rightToLeft(false), tabSelected(false), showRuler(false)
, showOutlineSymbols(true), showWhiteSpace(true) , showOutlineSymbols(true), showWhiteSpace(true), urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)"))
{ {
previous_row = 0; previous_row = 0;
@ -429,32 +429,10 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format &
if (value.isNull()) { if (value.isNull()) {
//Blank //Blank
ret = writeBlank(row, column, format); ret = writeBlank(row, column, format);
} else if (value.userType() == qMetaTypeId<RichString>()) {
ret = writeString(row, column, value.value<RichString>(), format);
} else if (value.userType() == QMetaType::Bool) {
//Bool
ret = writeBool(row,column, value.toBool(), format);
} else if (value.userType() == QMetaType::QDateTime || value.userType() == QMetaType::QDate) {
//DateTime, Date
// note that, QTime cann't convert to QDateTime
ret = writeDateTime(row, column, value.toDateTime(), format);
} else if (value.userType() == QMetaType::QTime) {
//Time
ret = writeTime(row, column, value.toTime(), format);
} else if (value.userType() == QMetaType::Int || value.userType() == QMetaType::UInt
|| value.userType() == QMetaType::LongLong || value.userType() == QMetaType::ULongLong
|| value.userType() == QMetaType::Double || value.userType() == QMetaType::Float) {
//Number
ret = writeNumeric(row, column, value.toDouble(), format);
} else if (value.userType() == QMetaType::QUrl) {
//Url
ret = writeHyperlink(row, column, value.toUrl(), format);
} else if (value.userType() == QMetaType::QString) { } else if (value.userType() == QMetaType::QString) {
//String //String
QString token = value.toString(); QString token = value.toString();
bool ok; bool ok;
QRegularExpression urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)"));
if (token.startsWith(QLatin1String("="))) { if (token.startsWith(QLatin1String("="))) {
//convert to formula //convert to formula
@ -462,7 +440,7 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format &
} else if (token.startsWith(QLatin1String("{=")) && token.endsWith(QLatin1Char('}'))) { } else if (token.startsWith(QLatin1String("{=")) && token.endsWith(QLatin1Char('}'))) {
//convert to array formula //convert to array formula
ret = writeArrayFormula(CellRange(row, column, row, column), token, format); ret = writeArrayFormula(CellRange(row, column, row, column), token, format);
} else if (token.contains(urlPattern)) { } else if (d->workbook->isStringsToHyperlinksEnabled() && token.contains(d->urlPattern)) {
//convert to url //convert to url
ret = writeHyperlink(row, column, QUrl(token)); ret = writeHyperlink(row, column, QUrl(token));
} else if (d->workbook->isStringsToNumbersEnabled() && (value.toDouble(&ok), ok)) { } else if (d->workbook->isStringsToNumbersEnabled() && (value.toDouble(&ok), ok)) {
@ -472,6 +450,27 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format &
//normal string now //normal string now
ret = writeString(row, column, token, format); ret = writeString(row, column, token, format);
} }
} else if (value.userType() == qMetaTypeId<RichString>()) {
ret = writeString(row, column, value.value<RichString>(), format);
} else if (value.userType() == QMetaType::Int || value.userType() == QMetaType::UInt
|| value.userType() == QMetaType::LongLong || value.userType() == QMetaType::ULongLong
|| value.userType() == QMetaType::Double || value.userType() == QMetaType::Float) {
//Number
ret = writeNumeric(row, column, value.toDouble(), format);
} else if (value.userType() == QMetaType::Bool) {
//Bool
ret = writeBool(row,column, value.toBool(), format);
} else if (value.userType() == QMetaType::QDateTime || value.userType() == QMetaType::QDate) {
//DateTime, Date
// note that, QTime cann't convert to QDateTime
ret = writeDateTime(row, column, value.toDateTime(), format);
} else if (value.userType() == QMetaType::QTime) {
//Time
ret = writeTime(row, column, value.toTime(), format);
} else if (value.userType() == QMetaType::QUrl) {
//Url
ret = writeHyperlink(row, column, value.toUrl(), format);
} else { } else {
//Wrong type //Wrong type
return false; return false;
@ -635,7 +634,7 @@ bool Worksheet::writeString(int row, int column, const QString &value, const For
return false; return false;
RichString rs; RichString rs;
if (Qt::mightBeRichText(value) && d->workbook->isHtmlToRichStringEnabled()) if (d->workbook->isHtmlToRichStringEnabled() && Qt::mightBeRichText(value))
rs.setHtml(value); rs.setHtml(value);
else else
rs.addFragment(value, Format()); rs.addFragment(value, Format());

3
src/xlsx/xlsxworksheet_p.h

@ -44,6 +44,7 @@
#include <QImage> #include <QImage>
#include <QSharedPointer> #include <QSharedPointer>
#include <QRegularExpression>
class QXmlStreamWriter; class QXmlStreamWriter;
class QXmlStreamReader; class QXmlStreamReader;
@ -176,6 +177,8 @@ public:
bool showRuler; bool showRuler;
bool showOutlineSymbols; bool showOutlineSymbols;
bool showWhiteSpace; bool showWhiteSpace;
QRegularExpression urlPattern;
}; };
} }

Loading…
Cancel
Save