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)
:d(new RichStringPrivate)
{
if (Qt::mightBeRichText(text))
setHtml(text);
else
addFragment(text, Format());
addFragment(text, Format());
}
/*!

13
src/xlsx/xlsxworkbook.cpp

@ -55,6 +55,7 @@ WorkbookPrivate::WorkbookPrivate(Workbook *q, Workbook::CreateFlag flag) :
window_height = 9660;
strings_to_numbers_enabled = false;
strings_to_hyperlinks_enabled = true;
html_to_richstring_enabled = false;
date1904 = false;
defaultDateFormat = QStringLiteral("yyyy-mm-dd");
@ -118,6 +119,18 @@ bool Workbook::isStringsToNumbersEnabled() const
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)
{
Q_D(Workbook);

2
src/xlsx/xlsxworkbook.h

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

1
src/xlsx/xlsxworkbook_p.h

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

49
src/xlsx/xlsxworksheet.cpp

@ -60,7 +60,7 @@ WorksheetPrivate::WorksheetPrivate(Worksheet *p, Worksheet::CreateFlag flag)
: AbstractSheetPrivate(p, flag)
, windowProtection(false), showFormulas(false), showGridLines(true), showRowColHeaders(true)
, 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;
@ -429,32 +429,10 @@ bool Worksheet::write(int row, int column, const QVariant &value, const Format &
if (value.isNull()) {
//Blank
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) {
//String
QString token = value.toString();
bool ok;
QRegularExpression urlPattern(QStringLiteral("^([fh]tt?ps?://)|(mailto:)|(file://)"));
if (token.startsWith(QLatin1String("="))) {
//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('}'))) {
//convert to array formula
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
ret = writeHyperlink(row, column, QUrl(token));
} 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
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 {
//Wrong type
return false;
@ -635,7 +634,7 @@ bool Worksheet::writeString(int row, int column, const QString &value, const For
return false;
RichString rs;
if (Qt::mightBeRichText(value) && d->workbook->isHtmlToRichStringEnabled())
if (d->workbook->isHtmlToRichStringEnabled() && Qt::mightBeRichText(value))
rs.setHtml(value);
else
rs.addFragment(value, Format());

3
src/xlsx/xlsxworksheet_p.h

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

Loading…
Cancel
Save