/// <summary>
        /// Creates a progress bar control.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="_nPosX">The X position.</param>
        /// <param name="_nPosY">The Y position.</param>
        /// <param name="_nWidth">Width of the element.</param>
        /// <param name="_nHeight">Height of the element.</param>
        /// <param name="_nProgressMax">The max value.</param>
        /// <param name="_nProgress">The current progress value.</param>
        /// <param name="visible">if set to <c>true</c> the progress bar will be visble while creation.
        /// ATTENTION: from the scratch it is set to <c>true</c>. If you want to hide it while creation 
        /// set this to <c>false</c> and change the 'EnableVisible' property to true after creation.</param>
        /// <param name="xMSF">A XMultiServiceFactory for controll creation.</param>
        /// <returns>a XProgressBar or <c>null</c></returns>
        public static XProgressBar CreateProgressBar(String name, int _nPosX, int _nPosY, int _nWidth, int _nHeight, int _nProgressMax, int _nProgress, bool visible = true, XMultiServiceFactory xMSF = null)
        {
            try
            {
                // check service factory 
                xMSF = xMSF != null ? xMSF : OO.GetMultiServiceFactory();

                //try to generate unique name
                name = AbstractControllBase.GenerateUniqueName(String.IsNullOrWhiteSpace(name) ? "ProgressBar_" : name + "_");

                // create a control model
                Object oPBModel = xMSF.createInstance(OO.Services.AWT_CONTROL_PROGRESS_BAR_MODEL);
                // create a control
                Object xPBControl = xMSF.createInstance(OO.Services.AWT_CONTROL_PROGRESS_BAR);

                if (xPBControl == null && oPBModel != null)
                {
                    string defaultControllName = OoUtils.GetStringProperty(oPBModel, "DefaultControl");
                    if (!String.IsNullOrWhiteSpace(defaultControllName))
                    {
                        xPBControl = xMSF.createInstance(defaultControllName);
                    }
                }

                if (oPBModel != null && xPBControl != null && xPBControl is XControl && oPBModel is XControlModel)
                {
                    ((XControl)xPBControl).setModel(((XControlModel)oPBModel));

                    XMultiPropertySet xPBModelMPSet = oPBModel as XMultiPropertySet;

                    if (xPBModelMPSet != null)
                    {
                        // Set the properties at the model - keep in mind to pass the property names in alphabetical order!
                        xPBModelMPSet.setPropertyValues(
                                new String[] { "EnableVisible", "Height", "Name", "PositionX", "PositionY", "ProgressValue", "ProgressValueMax", "ProgressValueMin", "Width" },
                                Any.Get(new Object[] { visible, _nHeight, name, _nPosX, _nPosY, _nProgress, _nProgressMax, 0, _nWidth }));
                    }
                    return xPBControl as XProgressBar;
                }
            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Control creation exception: " + ex);
            }

            return null;

        }
Пример #2
0
        public static void ConvertToPdf(string inputFile, string outputFile)
        {
            if (ConvertExtensionToFilterType(Path.GetExtension(inputFile)) == null)
            {
                throw new InvalidProgramException("Unknown file type for OpenOffice. File = " + inputFile);
            }

            //StartOpenOffice();

            //Get a ComponentContext
            var xLocalContext = Bootstrap.bootstrap();
            //Get MultiServiceFactory
            XMultiServiceFactory xRemoteFactory = (XMultiServiceFactory)xLocalContext.getServiceManager();
            //Get a CompontLoader
            XComponentLoader aLoader = (XComponentLoader)xRemoteFactory.createInstance("com.sun.star.frame.Desktop");
            //Load the sourcefile

            XComponent xComponent = null;

            try
            {
                xComponent = initDocument(aLoader, PathConverter(inputFile), "_blank");
                //Wait for loading
                while (xComponent == null)
                {
                    System.Threading.Thread.Sleep(1000);
                }

                // save/export the document
                saveDocument(xComponent, inputFile, PathConverter(outputFile));
            }
            catch { throw; }
            finally { xComponent.dispose(); }
        }
Пример #3
0
        internal static Object CreateObjectFromService(Object _msf, String[] services)
        {
            try
            {
                // get MSF
                XMultiServiceFactory msf = _msf as XMultiServiceFactory;

                if (msf == null)
                {
                    msf = OO.GetMultiServiceFactory();
                }
                if (msf != null && services != null && services.Length > 0)
                {
                    string[] serv = msf.getAvailableServiceNames();
                    System.Diagnostics.Debug.WriteLine("Available Service Names: " + String.Join("\n\t", serv));

                    //object component = msf.createInstance(services[0]);
                    // object component = msf.createInstance("com.sun.star.document.ExportGraphicObjectResolver");
                    object component = msf.createInstance("com.sun.star.document.ImportEmbeddedObjectResolver");

                    //Debug.GetAllServicesOfObject(component);
                    Debug.GetAllInterfacesOfObject(component);

                    var n = ((XNameAccess)component).getElementNames();


                    return(component);
                }
            }
            catch (Exception ex)
            {
            }

            return(null);
        }
Пример #4
0
        //ファイルを開く
        public void OpenFile(string filePath)
        {
            //parameterファイルを開く
            string path = filePath;

            // pathをURIに変換
            Uri.TryCreate(path, UriKind.Absolute, out uriCalcFile);

            // OpenOfficeファイルを開くためのおまじない
            // コンポーネントコンテキストの取得
            localContext = Bootstrap.bootstrap();
            // サービスマネージャーの取得
            multiServiceFactory = (XMultiServiceFactory)localContext.getServiceManager();
            // コンポーネントローダーの取得
            loader = (XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop");

            // 非表示で実行するためのプロパティ指定
            calcProp          = new PropertyValue[1];
            calcProp[0]       = new PropertyValue();
            calcProp[0].Name  = "Hidden";
            calcProp[0].Value = new uno.Any(true);

            // Calcファイルを開く
            doc = (XSpreadsheetDocument)loader.loadComponentFromURL(uriCalcFile.ToString(), "_blank", 0, calcProp);
            // シート群を取得
            sheets = doc.getSheets();
        }
Пример #5
0
        public OpenOffice()
        {
            // Start a new instance of OpenOffice.org if it is not running.
            // https://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/CLI/Writing_Client_Programs
            context = uno.util.Bootstrap.bootstrap();

            service = (XMultiServiceFactory)context.getServiceManager();
            desktop = (XComponentLoader)service.createInstance("com.sun.star.frame.Desktop");
        }
Пример #6
0
        protected XDrawPagesSupplier UseDraw()
        {
            try
            {
                //create new draw document and insert rectangle shape
                XComponent         xDrawComponent     = NewDocComponent("sdraw");
                XDrawPagesSupplier xDrawPagesSupplier = xDrawComponent as XDrawPagesSupplier;

                Object       drawPages         = xDrawPagesSupplier.getDrawPages();
                XIndexAccess xIndexedDrawPages = drawPages as XIndexAccess;

                Object drawPage = xIndexedDrawPages.getByIndex(0).Value;

                System.Diagnostics.Debug.WriteLine(xIndexedDrawPages.getCount());

                if (drawPage is XDrawPage)
                {
                    XDrawPage xDrawPage = (XDrawPage)drawPage;

                    if (xDrawPage is XComponent)
                    {
                        (xDrawPage as XComponent).addEventListener(new TestOOoEventListerner());
                    }

                    // get internal service factory of the document
                    XMultiServiceFactory xDrawFactory = xDrawComponent as XMultiServiceFactory;

                    Object drawShape = xDrawFactory.createInstance(
                        "com.sun.star.drawing.RectangleShape");
                    XShape xDrawShape = drawShape as XShape;
                    xDrawShape.setSize(new Size(10000, 20000));
                    xDrawShape.setPosition(new Point(5000, 5000));
                    xDrawPage.add(xDrawShape);

                    // XText xShapeText = (XText)drawShape // COMMENTED BY CODEIT.RIGHT;
                    XPropertySet xShapeProps = (XPropertySet)drawShape;

                    // wrap text inside shape
                    xShapeProps.setPropertyValue("TextContourFrame", new uno.Any(true));
                    return(xDrawPagesSupplier);
                }
                else
                {
                    //TODO: handle if no drwapage was found
                    System.Diagnostics.Debug.WriteLine("no XDrawPage found");
                    System.Diagnostics.Debug.WriteLine(drawPage);
                }
            }
            catch (unoidl.com.sun.star.lang.DisposedException e)
            { //works from Patch 1
                MXContext = null;
                throw e;
            }

            return(null);
        }
 /// <summary>
 /// Provides an easy way to dispatch an URL using one call instead of multiple ones.
 /// Normally a complete dispatch is splitted into different parts: 
 /// - converting and parsing the URL 
 /// - searching for a valid dispatch object available on a dispatch provider 
 /// - dispatching of the URL and it's parameters
 /// </summary>
 /// <param name="_msf">The MSF.</param>
 /// <returns>The dispatch helper or <c>null</c></returns>
 internal static XDispatchHelper GetDispatcher(XMultiServiceFactory _msf = null)
 {
     if (_msf == null) _msf = OO.GetMultiServiceFactory();
     if (_msf != null)
     {
         //Create the Dispatcher
         return _msf.createInstance("com.sun.star.frame.DispatchHelper") as XDispatchHelper;
     }
     return null;
 }
        /// <summary>
        /// Creates a line seperator.
        /// </summary>
        /// <param name="xMenuElementFactory">The x menu element factory.</param>
        /// <returns></returns>
        protected XPropertySet CreateLineSeperator(XMultiServiceFactory xMenuElementFactory)
        {
            // create a line separator for our new help sub menu
            XPropertySet xSeparator =
                (XPropertySet)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerSeparator");
            short aSeparatorType = ActionTriggerSeparatorType.LINE;

            xSeparator.setPropertyValue("SeparatorType", Any.Get(aSeparatorType));
            return(xSeparator);
        }
Пример #9
0
        public OpenOffice()
        {
            /// This will start a new instance of OpenOffice.org if it is not running,
            /// or it will obtain an existing instance if it is already open.
            context = uno.util.Bootstrap.bootstrap();

            /// The next step is to create a new OpenOffice.org service manager
            service = (XMultiServiceFactory)context.getServiceManager();

            /// Create a new Desktop instance using our service manager
            component = (XComponentLoader)service.createInstance("com.sun.star.frame.Desktop");

            // Getting filters
            XNameContainer filters = (XNameContainer)service.createInstance("com.sun.star.document.FilterFactory");

            foreach (string filter in filters.getElementNames())
            {
                this.filters.Add(filter);
            }
        }
Пример #10
0
 protected static void TryInitServiceManager()
 {
     try
     {
         XComponentContext    context = uno.util.Bootstrap.bootstrap();
         XMultiServiceFactory manager = (XMultiServiceFactory)context.getServiceManager();
         serviceManager = (XComponentLoader)manager.createInstance("com.sun.star.frame.Desktop");
     }
     catch
     {
     }
 }
 /// <summary>
 /// Provides an easy way to dispatch an URL using one call instead of multiple ones.
 /// Normally a complete dispatch is splitted into different parts:
 /// - converting and parsing the URL
 /// - searching for a valid dispatch object available on a dispatch provider
 /// - dispatching of the URL and it's parameters
 /// </summary>
 /// <param name="_msf">The MSF.</param>
 /// <returns>The dispatch helper or <c>null</c></returns>
 internal static XDispatchHelper GetDispatcher(XMultiServiceFactory _msf = null)
 {
     if (_msf == null)
     {
         _msf = OO.GetMultiServiceFactory();
     }
     if (_msf != null)
     {
         //Create the Dispatcher
         return(_msf.createInstance("com.sun.star.frame.DispatchHelper") as XDispatchHelper);
     }
     return(null);
 }
        /// <summary>
        /// Creates a sub menu container.
        /// </summary>
        /// <param name="xMenuElementFactory">The x menu element factory.</param>
        /// <param name="entries">The entries.</param>
        /// <returns></returns>
        protected XIndexContainer CreateSubMenuContainer(XMultiServiceFactory xMenuElementFactory, XPropertySet[] entries = null)
        {
            var entry = (XIndexContainer)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerContainer");

            if (entry != null && entries != null && entries.Length > 0)
            {
                for (int i = 0; i < entries.Length; i++)
                {
                    entry.insertByIndex(i, Any.Get(entries[i]));
                }
            }
            return(entry);
        }
        /// <summary>
        /// Creates the menue entry.
        /// </summary>
        /// <param name="xMenuElementFactory">The x menu element factory.</param>
        /// <param name="text">The text.</param>
        /// <param name="commandUrl">The command URL.</param>
        /// <param name="helpUrl">The help URL.</param>
        /// <returns></returns>
        protected XPropertySet CreateMenueEntry(XMultiServiceFactory xMenuElementFactory, string text, string commandUrl, string helpUrl)
        {
            var entry =
                (XPropertySet)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger");

            if (entry != null)
            {
                var properties = new Dictionary <String, Object>
                {
                    { "Text", text }, { "CommandURL", commandUrl }, { "HelpURL", helpUrl }
                };
                entry = CreateEntry(entry, properties);
            }
            return(entry);
        }
Пример #14
0
        static void Main()
        {
            XComponentContext
                localContext = uno.util.Bootstrap.bootstrap();

            XMultiServiceFactory
                ServiceManager = (XMultiServiceFactory)localContext.getServiceManager();

            XComponentLoader
                Desktop = (XComponentLoader)ServiceManager.createInstance("com.sun.star.frame.Desktop");

            XComponent
                Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);

            XText
                Text = ((XTextDocument)Document).getText();

            Text.setString("Hello I'm the first text!");

            XTextCursor
                Cursor = Text.createTextCursor();

            Text.insertString(Cursor, "Line# 1\n", false);
            Text.insertString(Cursor, "Line# 2", false);

            XTextTable
                Table;

            if ((Table = (XTextTable)((XMultiServiceFactory)Document).createInstance("com.sun.star.text.TextTable")) != null)
            {
                Table.initialize(2, 2);
                Text.insertTextContent(Text.getEnd(), Table, false);
            }


            unoidl.com.sun.star.beans.PropertyValue[]
            Params = new unoidl.com.sun.star.beans.PropertyValue[2];

            unoidl.com.sun.star.beans.PropertyValue
                Param = new unoidl.com.sun.star.beans.PropertyValue();

            Param.Name  = "FilterName";
            Param.Value = new uno.Any("writer_pdf_Export");
            Params[0]   = Param;

            Param       = new unoidl.com.sun.star.beans.PropertyValue();
            Param.Name  = "CompressionMode";
            Param.Value = new uno.Any("1");
            Params[1]   = Param;

            string
                CurrentDirectory = System.IO.Directory.GetCurrentDirectory(),
                DocumentDestName;

            CurrentDirectory = CurrentDirectory.Substring(0, CurrentDirectory.LastIndexOf("bin", CurrentDirectory.Length - 1));

            if (File.Exists(DocumentDestName = (CurrentDirectory + "test_out.pdf")))
            {
                File.Delete(DocumentDestName);
            }

            DocumentDestName = DocumentDestName.Replace(Path.DirectorySeparatorChar, '/').Replace("#", "%23");

            ((XStorable)Document).storeToURL("file:///" + DocumentDestName, Params);
            ((XCloseable)Document).close(true);
        }
Пример #15
0
        static void Main(string[] args)
        {
            InitOpenOfficeEnvironment();
            XMultiServiceFactory multiServiceFactory = Connect();
            XComponent           xComponent          = null;

            string docFileName = @"C:\test3.doc";

            try
            {
                XComponentLoader componentLoader =
                    (XComponentLoader)multiServiceFactory
                    .createInstance("com.sun.star.frame.Desktop");
                //set the property
                PropertyValue[] propertyValue = new PropertyValue[1];
                PropertyValue   aProperty     = new PropertyValue();
                aProperty.Name   = "Hidden";
                aProperty.Value  = new uno.Any(false);
                propertyValue[0] = aProperty;
                xComponent       =
                    componentLoader
                    .loadComponentFromURL(PathConverter(docFileName),
                                          "_blank", 0, propertyValue);
                XTextDocument      xTextDocument      = ((XTextDocument)xComponent);
                XEnumerationAccess xEnumerationAccess =
                    (XEnumerationAccess)xTextDocument.getText();
                XEnumeration xParagraphEnumeration =
                    xEnumerationAccess.createEnumeration();
                while (xParagraphEnumeration.hasMoreElements())
                {
                    uno.Any      element = xParagraphEnumeration.nextElement();
                    XServiceInfo xinfo   = (XServiceInfo)element.Value;
                    if (xinfo.supportsService("com.sun.star.text.TextTable"))
                    {
                        Console.WriteLine("Found Table!");

                        XTextTable xTextTable = (XTextTable)element.Value;
                        String[]   cellNames  = xTextTable.getCellNames();

                        for (int i = 0; i < cellNames.Length; i++)
                        {
                            XCell  xCell     = xTextTable.getCellByName(cellNames[i]);
                            XText  xTextCell = (XText)xCell;
                            String strText   = xTextCell.getString();
                            Console.WriteLine(strText);
                        }
                    }
                    else
                    {
                        XTextContent       xTextElement           = (XTextContent)element.Value;
                        XEnumerationAccess xParaEnumerationAccess =
                            (XEnumerationAccess)xTextElement;
                        // create another enumeration to get all text portions of
                        //the paragraph
                        XEnumeration xTextPortionEnum =
                            xParaEnumerationAccess.createEnumeration();
                        //step 3  Through the Text portions Enumeration, get interface
                        //to each individual text portion
                        while (xTextPortionEnum.hasMoreElements())
                        {
                            XTextRange xTextPortion =
                                (XTextRange)xTextPortionEnum.nextElement().Value;
                            Console.Write(xTextPortion.getString());
                        }
                    }
                }
            }
            catch (unoidl.com.sun.star.uno.Exception exp1)
            {
                Console.WriteLine(exp1.Message);
                Console.WriteLine(exp1.StackTrace);
            }
            catch (System.Exception exp2)
            {
                Console.WriteLine(exp2.Message);
                Console.WriteLine(exp2.StackTrace);
            }
            finally
            {
                xComponent.dispose();
                xComponent = null;
            }
            Console.WriteLine("Done.");
            Console.ReadLine();
        }
Пример #16
0
        static void Main(string[] args)
        {
            Socket
                s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

            string
                sUnoIni = "file:///c:/OpenOffice.org%203/URE/bin/uno.ini";

            XComponentContext
            //xLocalContext = uno.util.Bootstrap.defaultBootstrap_InitialComponentContext(sUnoIni, null);
                xLocalContext = uno.util.Bootstrap.defaultBootstrap_InitialComponentContext();

            XMultiComponentFactory
                xLocalServiceManager = xLocalContext.getServiceManager();

            XUnoUrlResolver
                xUrlResolver = (XUnoUrlResolver)xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", xLocalContext);

            XMultiServiceFactory
                xRemoteServiceManager = (XMultiServiceFactory)xUrlResolver.resolve("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager");

            XDesktop
                Desktop = (XDesktop)xRemoteServiceManager.createInstance("com.sun.star.frame.Desktop");

            /*
             * XDesktop
             *      remoteDesktop = (XDesktop)xRemoteServiceManager.createInstance("com.sun.star.frame.Desktop");
             *
             * XComponentLoader
             *      Desktop = (XComponentLoader)remoteDesktop; // (XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop");
             *
             * XComponent
             *      Document = Desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, new unoidl.com.sun.star.beans.PropertyValue[0]);
             *
             * XText
             *      Text = ((XTextDocument)Document).getText();
             *
             * Text.setString("Hello I'm the first text!");
             *
             * XTextCursor
             *      Cursor = Text.createTextCursor();
             *
             * Text.insertString(Cursor, "Line# 1\n", false);
             * Text.insertString(Cursor, "Line# 2", false);
             *
             * XTextTable
             *      Table;
             *
             * if ((Table = (XTextTable)multiServiceFactory.createInstance("com.sun.star.text.TextTable")) != null)
             * {
             *      Table.initialize(2, 2);
             *      Text.insertTextContent(Text.getEnd(), Table, false);
             * }
             *
             *
             * unoidl.com.sun.star.beans.PropertyValue[]
             *      Params = new unoidl.com.sun.star.beans.PropertyValue[2];
             *
             * unoidl.com.sun.star.beans.PropertyValue
             *      Param = new unoidl.com.sun.star.beans.PropertyValue();
             *
             * Param.Name = "FilterName";
             * Param.Value = new uno.Any("writer_pdf_Export");
             * Params[0] = Param;
             *
             * Param = new unoidl.com.sun.star.beans.PropertyValue();
             * Param.Name = "CompressionMode";
             * Param.Value = new uno.Any("1");
             * Params[1] = Param;
             *
             * string
             *      CurrentDirectory = System.IO.Directory.GetCurrentDirectory(),
             *      DocumentDestName;
             *
             * CurrentDirectory = CurrentDirectory.Substring(0, CurrentDirectory.LastIndexOf("bin", CurrentDirectory.Length - 1));
             *
             * if (File.Exists(DocumentDestName = (CurrentDirectory + "test_out.pdf")))
             *      File.Delete(DocumentDestName);
             *
             * DocumentDestName = DocumentDestName.Replace(Path.DirectorySeparatorChar, '/').Replace("#", "%23");
             *
             * ((XStorable)Document).storeToURL("file:///" + DocumentDestName, Params);
             */
        }
Пример #17
0
        private static void ConvertToPdf(string filePath)
        {
            Process[] ps = Process.GetProcessesByName("soffice.exe");
            if (ps.Length != 0)
            {
                throw new InvalidProgramException("OpenOffice not found.  Is OpenOffice installed?");
            }
            if (ps.Length > 0)
            {
                return;
            }
            Process p = new Process
            {
                StartInfo =
                {
                    Arguments      = "-headless -nofirststartwizard",
                    FileName       = "soffice.exe",
                    CreateNoWindow = true
                }
            };
            bool result = p.Start();

            if (result == false)
            {
                throw new InvalidProgramException("OpenOffice failed to start.");
            }
            XComponentContext    xLocalContext  = Bootstrap.bootstrap();
            XMultiServiceFactory xRemoteFactory = (XMultiServiceFactory)xLocalContext.getServiceManager();
            XComponentLoader     aLoader        = (XComponentLoader)xRemoteFactory.createInstance("com.sun.star.frame.Desktop");
            XComponent           xComponent     = null;

            try
            {
                PropertyValue[] openProps = new PropertyValue[1];
                openProps[0] = new PropertyValue {
                    Name = "Hidden", Value = new Any(true)
                };
                xComponent = aLoader.loadComponentFromURL(PathConverter(filePath), "_blank", 0, openProps);
                while (xComponent == null)
                {
                    Thread.Sleep(1000);
                }
                PropertyValue[] propertyValues = new PropertyValue[2];
                propertyValues[1] = new PropertyValue {
                    Name = "Overwrite", Value = new Any(true)
                };
                propertyValues[0] = new PropertyValue {
                    Name = "FilterName", Value = new Any(ConvertExtensionToFilterType(Path.GetExtension(filePath)))
                };
                ((XStorable)xComponent).storeToURL(PathConverter(OutputFolder + Path.GetFileNameWithoutExtension(filePath) + ".pdf"), propertyValues);
            }
            catch (System.Exception e)
            {
                log.Error("Eccezione la conversione del file OpenOffice " + filePath);
                log.Error(e.StackTrace);
                File.Move(filePath, ErrorFolder + Path.GetFileName(filePath));
            }
            finally
            {
                if (xComponent != null)
                {
                    xComponent.dispose();
                }
                CloseProcess("soffice");
                File.Delete(filePath);
            }
        }
Пример #18
0
        private void CreaReport(object sender, DoWorkEventArgs e)
        {
            string PathTemplate = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "template.odt";

            if (File.Exists(PathTemplate))
            {
                //The C# application starts OpenOffice.org by using it's bootstrap method:
                XComponentContext oStrap = uno.util.Bootstrap.bootstrap();
                //This will start a new instance of OpenOffice.org if it is not running,
                //or it will obtain an existing instance if it is already open.
                //The next step is to create a new OpenOffice.org service manager:
                XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();

                XComponentLoader oDesk = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");

                //string url = @"private:factory/swriter";
                PropertyValue[] propVals = new PropertyValue[0];

                XComponent oDoc = oDesk.loadComponentFromURL(PathConverter(PathTemplate), "_blank", 0, propVals);

                //string docText = "This will be my first paragraph.\n\r";
                //docText += "This will be my second paragraph.\n\r";

                //And then this is written to the body of the document:
                //((XTextDocument)oDoc).getText().setString(docText);

                XBookmarksSupplier xBS = (XBookmarksSupplier)oDoc;

                unoidl.com.sun.star.container.XNameAccess xNamedBookmarks = xBS.getBookmarks();

                //inserimento dati nei bookmark
                //grassi
                InsertTxtBookmark(xNamedBookmarks, "bPalma", oPalmaRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaAfr", oPalmaAfr.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaOle60", oPalmaOle60.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaOle62", oPalmaOle62.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaOle64", oPalmaOle64.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaSte48", oPalmaSt48.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmaSte53", oPalmaSt53.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bCocco", oCoccoRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bCoccoIdr", oCoccoIdr.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmisto", oPalmistoR.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmistoIdr", oPalmistoI.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmistoSte", oPalmistoSt.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bPalmistoFra", oPalmistoFraz.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bSoia", oSoiaRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bColza", oColzaRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bArachide", oArachideR.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bVinacciolo", oVinacciolo.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bMais", oMaisRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bGirasoleAO", oGirasoleALino.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bGirasoleAL", oGirasoleAOle.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bSesamo", oSesamoRaff.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bNocciola", oNocciola.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bOliva", oOliva.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bBurroCacao", oBurroCacao.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bBabassu", oBabassu.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bKarite", oKarite.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bBurro", oBurro.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bStrutto", oStrutto.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bSego", oSegoRaf.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bX", oX.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bY", oY.ToString());
                InsertTxtBookmark(xNamedBookmarks, "bZ", oZ.ToString());
                //acidi grassi calcolati
                InsertTxtBookmark(xNamedBookmarks, "bC4-0", AcidiGrassiOtt[0].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC6-0", AcidiGrassiOtt[1].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC8-0", AcidiGrassiOtt[2].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC10-0", AcidiGrassiOtt[3].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC12-0", AcidiGrassiOtt[4].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC14-0", AcidiGrassiOtt[5].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC14-1", AcidiGrassiOtt[6].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC15-0", AcidiGrassiOtt[7].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC16-ISO", AcidiGrassiOtt[8].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC16-0", AcidiGrassiOtt[9].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC16-1", AcidiGrassiOtt[10].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC17-ISO", AcidiGrassiOtt[11].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC17-0", AcidiGrassiOtt[12].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC17-1", AcidiGrassiOtt[13].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-0", AcidiGrassiOtt[14].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-ISO", AcidiGrassiOtt[15].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-1", AcidiGrassiOtt[16].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-2", AcidiGrassiOtt[17].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-3", AcidiGrassiOtt[18].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC18-CON", AcidiGrassiOtt[19].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC20-0", AcidiGrassiOtt[20].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC20-1", AcidiGrassiOtt[21].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC22-0", AcidiGrassiOtt[22].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bC22-1", AcidiGrassiOtt[23].ToString("F2"));
                //acidi grassi inseriti a mano (forniti dal gascromatografo)
                InsertTxtBookmark(xNamedBookmarks, "bGC4-0", AcidiGrassiRic[0].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC6-0", AcidiGrassiRic[1].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC8-0", AcidiGrassiRic[2].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC10-0", AcidiGrassiRic[3].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC12-0", AcidiGrassiRic[4].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC14-0", AcidiGrassiRic[5].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC14-1", AcidiGrassiRic[6].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC15-0", AcidiGrassiRic[7].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC16-ISO", AcidiGrassiRic[8].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC16-0", AcidiGrassiRic[9].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC16-1", AcidiGrassiRic[10].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC17-ISO", AcidiGrassiRic[11].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC17-0", AcidiGrassiRic[12].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC17-1", AcidiGrassiRic[13].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-0", AcidiGrassiRic[14].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-ISO", AcidiGrassiRic[15].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-1", AcidiGrassiRic[16].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-2", AcidiGrassiRic[17].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-3", AcidiGrassiRic[18].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC18-CON", AcidiGrassiRic[19].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC20-0", AcidiGrassiRic[20].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC20-1", AcidiGrassiRic[21].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC22-0", AcidiGrassiRic[22].ToString("F2"));
                InsertTxtBookmark(xNamedBookmarks, "bGC22-1", AcidiGrassiRic[23].ToString("F2"));
                //numero di iodio
                InsertTxtBookmark(xNamedBookmarks, "bnIodio", oNiodio.ToString("F2"));

                //And then the file is saved to disk:
                //((XStorable)oDoc).storeAsURL(PathConverter(@"C:\test.odt"), propVals);
                //((XStorable)oDoc).storeAsURL(PathConverter(SaveTo), propVals);
                PropertyValue[] propValsOut = new PropertyValue[1];
                propValsOut[0]      = new PropertyValue();
                propValsOut[0].Name = "FilterName";
                switch (Estensione)
                {
                case ".odt":
                    break;

                case ".doc":
                    propValsOut[0].Value = new uno.Any("MS Word 97");
                    break;

                case ".pdf":
                    propValsOut[0].Value = new uno.Any("writer_pdf_Export");
                    break;

                default:
                    break;
                }

                ((XStorable)oDoc).storeToURL(PathConverter(SaveTo), propValsOut);
                //chiude
                ((XComponent)oDoc).dispose();
                //And then any memory that's been used can be freed up:
                oDoc = null;
            }
            else
            {
                MessageBox.Show("Template non trovato:\n" + PathTemplate);
            }
        }
 /// <summary>
 /// Creates a line seperator.
 /// </summary>
 /// <param name="xMenuElementFactory">The x menu element factory.</param>
 /// <returns></returns>
 protected XPropertySet CreateLineSeperator(XMultiServiceFactory xMenuElementFactory)
 {
     // create a line separator for our new help sub menu
     XPropertySet xSeparator =
         (XPropertySet)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerSeparator");
     short aSeparatorType = ActionTriggerSeparatorType.LINE;
     xSeparator.setPropertyValue("SeparatorType", Any.Get(aSeparatorType));
     return xSeparator;
 }
 /// <summary>
 /// Creates a sub menu container.
 /// </summary>
 /// <param name="xMenuElementFactory">The x menu element factory.</param>
 /// <param name="entries">The entries.</param>
 /// <returns></returns>
 protected XIndexContainer CreateSubMenuContainer(XMultiServiceFactory xMenuElementFactory, XPropertySet[] entries = null)
 {
     var entry = (XIndexContainer)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTriggerContainer");
     if (entry != null && entries != null && entries.Length > 0)
     {
         for (int i = 0; i < entries.Length; i++)
         {
             entry.insertByIndex(i,Any.Get(entries[i]));
         }
     }
     return entry;
 }
 /// <summary>
 /// Creates the menue entry.
 /// </summary>
 /// <param name="xMenuElementFactory">The x menu element factory.</param>
 /// <param name="text">The text.</param>
 /// <param name="commandUrl">The command URL.</param>
 /// <param name="helpUrl">The help URL.</param>
 /// <returns></returns>
 protected XPropertySet CreateMenueEntry(XMultiServiceFactory xMenuElementFactory, string text, string commandUrl, string helpUrl)
 {
     var entry =
                 (XPropertySet)xMenuElementFactory.createInstance("com.sun.star.ui.ActionTrigger");
     if (entry != null)
     {
         var properties = new Dictionary<String, Object>
                              {{"Text", text}, {"CommandURL", commandUrl}, {"HelpURL", helpUrl}};
         entry = CreateEntry(entry, properties);
     }
     return entry;
 }
        public static void ExportExcelLO(string FileName, DataSet ds)
        {
            try
            {
                string unoPath = @"C:\Program Files (x86)\LibreOffice 5\program";
                Environment.SetEnvironmentVariable("UNO_PATH", unoPath, EnvironmentVariableTarget.Process);
                Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + @";"
                                                   + unoPath, EnvironmentVariableTarget.Process);

                XComponentContext    oStrap   = uno.util.Bootstrap.bootstrap();
                XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();
                XComponentLoader     desktop  = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");
                string          url           = @"private:factory/scalc";
                PropertyValue[] loadProps     = new PropertyValue[3];
                loadProps[0] = new PropertyValue()
                {
                    Name  = "Hidden",
                    Value = new uno.Any(true)
                };

                loadProps[1] = new PropertyValue()
                {
                    Name  = "FilterName",
                    Value = new uno.Any("MS Excel 97")
                };

                loadProps[2] = new PropertyValue()
                {
                    Name  = "ReadOnly",
                    Value = new uno.Any(false)
                };

                XComponent    document = desktop.loadComponentFromURL(url, "_blank", 0, loadProps);
                XSpreadsheets oSheets = ((XSpreadsheetDocument)document).getSheets();
                XIndexAccess  oSheetsIA = (XIndexAccess)oSheets;
                XSpreadsheet  sheet = (XSpreadsheet)oSheetsIA.getByIndex(0).Value;
                int           ii = 0; XCell celija = null;
                foreach (DataColumn kol in ds.Tables[0].Columns)
                {
                    celija = sheet.getCellByPosition(ii, 0);
                    ((XText)celija).setString(kol.ColumnName);
                    //((XPropertySet)celija).setPropertyValue("CellBackColor", new uno.Any(654321));
                    //((XPropertySet)celija).setPropertyValue("CharColor", new uno.Any(333444));
                    ii++;
                }
                ds.Tables[0].AcceptChanges(); ii = 0;
                foreach (DataRow red in ds.Tables[0].Rows)
                {
                    int jj = 0; ii++;
                    foreach (object ob in red.ItemArray)
                    {
                        celija = sheet.getCellByPosition(jj, ii);
                        ((XText)celija).setString(ob.ToString());
                        //((XPropertySet)celija).setPropertyValue("CellBackColor", new uno.Any(888777));
                        jj++;
                    }
                }
                ((XStorable)document).storeToURL("file:///" + FileName.Replace(@"\", "/"), loadProps);
                System.Diagnostics.Process.Start(FileName);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }
 /// <summary>
 /// Gets the component loader.
 /// </summary>
 /// <param name="multiServiceFactory"> The multi service factory. </param>
 /// <returns> The component loader </returns>
 public static XComponentLoader GetComponentLoader(XMultiServiceFactory multiServiceFactory)
 {
     return((XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop"));
 }