[Libreoffice-commits] core.git: Branch 'private/kohei/xlsx-import-speedup' - 2 commits - sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Wed Nov 27 08:11:20 PST 2013
sc/source/filter/oox/workbookfragment.cxx | 45 -------------------------
sc/source/filter/oox/workbookhelper.cxx | 53 ++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 45 deletions(-)
New commits:
commit 1a2adce30c06f29783867623c4c71b12c82f366f
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Nov 27 10:26:32 2013 -0500
Move recalc on-load to after ScDocumentImport::finalize().
Doing this would avoid re-grouping formula cells twice.
Change-Id: I732658fc92f2fb3ddde0c0c00ae85f72074b6b48
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index c189be9..7acb16a 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -26,7 +26,6 @@
#include "oox/helper/progressbar.hxx"
#include "oox/helper/propertyset.hxx"
#include "oox/ole/olestorage.hxx"
-#include "vcl/msgbox.hxx"
#include "biffinputstream.hxx"
#include "chartsheetfragment.hxx"
@@ -46,12 +45,9 @@
#include "document.hxx"
#include "docsh.hxx"
-#include "globstr.hrc"
#include "calcconfig.hxx"
#include <oox/core/fastparser.hxx>
-#include <comphelper/processfactory.hxx>
-#include <officecfg/Office/Calc.hxx>
#include <salhelper/thread.hxx>
#include <osl/conditn.hxx>
@@ -529,48 +525,6 @@ void WorkbookFragment::finalizeImport()
// final conversions, e.g. calculation settings and view settings
finalizeWorkbookImport();
-
- // Recalculate formula cells.
- ScDocument& rDoc = getScDocument();
- rDoc.RebuildFormulaGroups();
- ScDocShell& rDocSh = getDocShell();
- Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
- ScRecalcOptions nRecalcMode =
- static_cast<ScRecalcOptions>(officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::get(xContext));
- bool bHardRecalc = false;
- if (nRecalcMode == RECALC_ASK)
- {
- if (rDoc.IsUserInteractionEnabled())
- {
- // Ask the user if full re-calculation is desired.
- QueryBox aBox(
- rDocSh.GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
- ScGlobal::GetRscString(STR_QUERY_FORMULA_RECALC_ONLOAD_XLS));
- aBox.SetCheckBoxText(ScGlobal::GetRscString(STR_ALWAYS_PERFORM_SELECTED));
-
- sal_Int32 nRet = aBox.Execute();
- bHardRecalc = nRet == RET_YES;
-
- if (aBox.GetCheckBoxState())
- {
- // Always perform selected action in the future.
- boost::shared_ptr< comphelper::ConfigurationChanges > batch( comphelper::ConfigurationChanges::create() );
- officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::set(sal_Int32(0), batch);
- ScFormulaOptions aOpt = SC_MOD()->GetFormulaOptions();
- aOpt.SetOOXMLRecalcOptions(bHardRecalc ? RECALC_ALWAYS : RECALC_NEVER);
- SC_MOD()->SetFormulaOptions(aOpt);
-
- batch->commit();
- }
- }
- }
- else if (nRecalcMode == RECALC_ALWAYS)
- bHardRecalc = true;
-
- if (bHardRecalc)
- rDocSh.DoHardRecalc(false);
- else
- rDoc.CalcFormulaTree(false, true, false);
}
// private --------------------------------------------------------------------
diff --git a/sc/source/filter/oox/workbookhelper.cxx b/sc/source/filter/oox/workbookhelper.cxx
index 66a51b4..3cba32f 100644
--- a/sc/source/filter/oox/workbookhelper.cxx
+++ b/sc/source/filter/oox/workbookhelper.cxx
@@ -39,6 +39,7 @@
#include "oox/helper/progressbar.hxx"
#include "oox/helper/propertyset.hxx"
#include "oox/ole/vbaproject.hxx"
+#include "vcl/msgbox.hxx"
#include "addressconverter.hxx"
#include "biffinputstream.hxx"
#include "biffcodec.hxx"
@@ -73,12 +74,16 @@
#include "globalnames.hxx"
#include "documentimport.hxx"
#include "drwlayer.hxx"
+#include "globstr.hrc"
#include "formulabuffer.hxx"
#include "vcl/mapmod.hxx"
#include "editutil.hxx"
#include "editeng/editstat.hxx"
+#include <comphelper/processfactory.hxx>
+#include <officecfg/Office/Calc.hxx>
+
#include <boost/noncopyable.hpp>
#include <boost/scoped_ptr.hpp>
@@ -236,6 +241,8 @@ private:
/** Finalizes the filter process (sets some needed document properties). */
void finalize();
+ void recalcFormulaCells();
+
private:
typedef ::std::auto_ptr< ScEditEngineDefaulter > EditEngineDefaulterPtr;
typedef ::std::auto_ptr< FormulaBuffer > FormulaBufferPtr;
@@ -653,9 +660,55 @@ void WorkbookGlobals::finalize()
//ScDocShell::AfterXMLLoading() for ods
mpDoc->SetInsertingFromOtherDoc(false);
getDocImport().finalize();
+
+ recalcFormulaCells();
}
}
+void WorkbookGlobals::recalcFormulaCells()
+{
+ // Recalculate formula cells.
+ ScDocument& rDoc = getScDocument();
+ ScDocShell& rDocSh = getDocShell();
+ Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
+ ScRecalcOptions nRecalcMode =
+ static_cast<ScRecalcOptions>(officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::get(xContext));
+ bool bHardRecalc = false;
+ if (nRecalcMode == RECALC_ASK)
+ {
+ if (rDoc.IsUserInteractionEnabled())
+ {
+ // Ask the user if full re-calculation is desired.
+ QueryBox aBox(
+ rDocSh.GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
+ ScGlobal::GetRscString(STR_QUERY_FORMULA_RECALC_ONLOAD_XLS));
+ aBox.SetCheckBoxText(ScGlobal::GetRscString(STR_ALWAYS_PERFORM_SELECTED));
+
+ sal_Int32 nRet = aBox.Execute();
+ bHardRecalc = nRet == RET_YES;
+
+ if (aBox.GetCheckBoxState())
+ {
+ // Always perform selected action in the future.
+ boost::shared_ptr< comphelper::ConfigurationChanges > batch( comphelper::ConfigurationChanges::create() );
+ officecfg::Office::Calc::Formula::Load::OOXMLRecalcMode::set(sal_Int32(0), batch);
+ ScFormulaOptions aOpt = SC_MOD()->GetFormulaOptions();
+ aOpt.SetOOXMLRecalcOptions(bHardRecalc ? RECALC_ALWAYS : RECALC_NEVER);
+ SC_MOD()->SetFormulaOptions(aOpt);
+
+ batch->commit();
+ }
+ }
+ }
+ else if (nRecalcMode == RECALC_ALWAYS)
+ bHardRecalc = true;
+
+ if (bHardRecalc)
+ rDocSh.DoHardRecalc(false);
+ else
+ rDoc.CalcFormulaTree(false, true, false);
+}
+
// ============================================================================
WorkbookHelper::~WorkbookHelper()
commit 1c57ac9296cce06cafac86774e6a31f5d768fecb
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Wed Nov 27 09:48:37 2013 -0500
Re-group formula cells before we do recalc on load (for xlsx).
Change-Id: Iae6177433f05875e014de50eb4100fa381ddafdd
diff --git a/sc/source/filter/oox/workbookfragment.cxx b/sc/source/filter/oox/workbookfragment.cxx
index f8b5ef7..c189be9 100644
--- a/sc/source/filter/oox/workbookfragment.cxx
+++ b/sc/source/filter/oox/workbookfragment.cxx
@@ -532,6 +532,7 @@ void WorkbookFragment::finalizeImport()
// Recalculate formula cells.
ScDocument& rDoc = getScDocument();
+ rDoc.RebuildFormulaGroups();
ScDocShell& rDocSh = getDocShell();
Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
ScRecalcOptions nRecalcMode =
More information about the Libreoffice-commits
mailing list