diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2009-12-29 12:32:37 -0500 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2009-12-29 12:32:37 -0500 |
commit | 2605839fcb9701ebf3b9f1b773ad91cb3b669f78 (patch) | |
tree | 43c6f2e47b5fdf89437a2b1facb877d92672508b | |
parent | cfcb5a25dec927279a739d53884058b9221bcb49 (diff) |
Load each xls document into frame.
-rw-r--r-- | inc/global.hxx | 16 | ||||
-rw-r--r-- | setenv.sh.in | 3 | ||||
-rw-r--r-- | source/global.cxx | 25 | ||||
-rw-r--r-- | source/main.cxx | 25 |
4 files changed, 62 insertions, 7 deletions
diff --git a/inc/global.hxx b/inc/global.hxx index fbb780f..db9cf96 100644 --- a/inc/global.hxx +++ b/inc/global.hxx @@ -2,15 +2,29 @@ #ifndef __GLOBAL_HXX__ #define __GLOBAL_HXX__ -#include <com/sun/star/frame/XDesktop.hpp> +#include "cppuhelper/implementationentry.hxx" #include <string> +namespace com { namespace sun { namespace star { + namespace frame { + class XDesktop; + } + + namespace sheet { + class XSpreadsheetDocument; + } +}}} + namespace test { ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop > bootstrap(); +::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument > + loadComponent(const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XDesktop>& xDesktop, const ::rtl::OUString& rPath); + void info(const ::std::string& msg); void error(const ::std::string& msg); diff --git a/setenv.sh.in b/setenv.sh.in index 0602456..4943192 100644 --- a/setenv.sh.in +++ b/setenv.sh.in @@ -1,3 +1,4 @@ CTRL_XLS_IN_DIR=@ROOTDIR@/control-import +CTRL_XLS_OUT_DIR=@ROOTDIR@/control-export -export CTRL_XLS_IN_DIR +export CTRL_XLS_IN_DIR CTRL_XSL_OUT_DIR diff --git a/source/global.cxx b/source/global.cxx index 4a9f1e2..39e63a0 100644 --- a/source/global.cxx +++ b/source/global.cxx @@ -4,18 +4,25 @@ #include "rtl/ustring.hxx" #include "rtl/textenc.h" +#include <com/sun/star/frame/XDesktop.hpp> #include <com/sun/star/sheet/XSpreadsheetDocument.hpp> #include <com/sun/star/lang/XMultiComponentFactory.hpp> +#include <com/sun/star/frame/XComponentLoader.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> #include <cstring> #include <iostream> +using ::com::sun::star::beans::PropertyValue; using ::com::sun::star::frame::XDesktop; +using ::com::sun::star::frame::XComponentLoader; using ::com::sun::star::sheet::XSpreadsheetDocument; using ::com::sun::star::uno::XComponentContext; using ::com::sun::star::lang::XMultiComponentFactory;; +using ::com::sun::star::lang::XComponent;; using ::com::sun::star::uno::UNO_QUERY_THROW; using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; using ::rtl::OUString; using namespace ::std; @@ -39,6 +46,24 @@ Reference<XDesktop> bootstrap() return xDesktop; } +Reference<XSpreadsheetDocument> loadComponent(const Reference<XDesktop>& xDesktop, const OUString& rPath) +{ + Reference<XSpreadsheetDocument> xSpDoc; + Reference<XComponentLoader> xLoader(xDesktop, UNO_QUERY_THROW); + Sequence<PropertyValue> args; + Reference<XComponent> xComponent = xLoader->loadComponentFromURL( + rPath, ascii("_default"), 0, args); + + if (!xComponent.is()) + { + error("component failed to load"); + return xSpDoc; + } + + xSpDoc.set(xComponent, UNO_QUERY_THROW); + return xSpDoc; +} + void info(const string& msg) { cout << "info: " << msg << endl; diff --git a/source/main.cxx b/source/main.cxx index 771d77a..9e4cd8c 100644 --- a/source/main.cxx +++ b/source/main.cxx @@ -10,6 +10,7 @@ #include <sys/stat.h> #include <com/sun/star/lang/DisposedException.hpp> +#include <com/sun/star/frame/XDesktop.hpp> using ::com::sun::star::uno::Reference; using ::com::sun::star::frame::XDesktop; @@ -34,8 +35,6 @@ bool getImportDocuments(const string& inpath, vector<OUString>& rFilePaths) return false; } - cout << "control xls inport directory: " << inpath << endl; - DIR* dp; struct dirent* dirp; if ((dp = opendir(inpath.c_str())) == NULL) @@ -51,7 +50,7 @@ bool getImportDocuments(const string& inpath, vector<OUString>& rFilePaths) if (aFileName == "." || aFileName == "..") continue; - string aFilePath = inpath + "/" + aFileName; + string aFilePath = "file://" + inpath + "/" + aFileName; OUString aOUPath(aFilePath.c_str(), aFilePath.size(), RTL_TEXTENCODING_UTF8); aFilePaths.push_back(aOUPath); } @@ -70,6 +69,21 @@ struct PrintFilePath : public ::std::unary_function<void, OUString> } }; +class LoadFile : public ::std::unary_function<void, OUString> +{ +public: + explicit LoadFile(const Reference<XDesktop>& xDesktop) : + mxDesktop(xDesktop) {} + + void operator() (const OUString& r) const + { + loadComponent(mxDesktop, r); + } + +private: + Reference<XDesktop> mxDesktop; +}; + } int main() @@ -84,11 +98,12 @@ int main() if (!getImportDocuments(aXclImportPath, aFilePaths)) return EXIT_FAILURE; + cout << "control xls inport directory: " << aXclImportPath << endl; for_each(aFilePaths.begin(), aFilePaths.end(), PrintFilePath()); - return EXIT_SUCCESS; + Reference<XDesktop> xDesktop = bootstrap(); + for_each(aFilePaths.begin(), aFilePaths.end(), LoadFile(xDesktop)); - Reference<XDesktop> xDesktop = ::test::bootstrap(); try { xDesktop->terminate(); |