[Risolto] Aprire un file calc con macro attive da C#

Creare una macro - Scrivere uno script - Usare le API
Rispondi
MarcoG
Messaggi: 14
Iscritto il: martedì 21 febbraio 2012, 18:49

[Risolto] Aprire un file calc con macro attive da C#

Messaggio da MarcoG »

Ciao a tutti.
Da C# apro un file di calc nel seguente modo:

Codice: Seleziona tutto

 XComponentContext oStrap = uno.util.Bootstrap.bootstrap();                                         
 XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();    
 XComponentLoader oDesk = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");
 string fileName = textBox1.Text;
 string fileNameUrl = "file:///" + fileName.Replace("\\", "/");
 PropertyValue[] propVals = new PropertyValue[0];
 XComponent oDoc = oDesk.loadComponentFromURL(fileNameUrl, "_default", 0, propVals);
 XSpreadsheets oSheets = ((XSpreadsheetDocument)oDoc).getSheets();
il file aperto contiene delle macro e tali macro sono disabilitate.
come è possibile aprie il file mantenendo le macro presenti abilitate? Se ho cioè un bottone associato ad una macro scritta in basic come posso farla eseguire alla pressione del bottone?

grazie
MArco
Ultima modifica di MarcoG il venerdì 11 maggio 2012, 10:57, modificato 1 volta in totale.
LibreOffice 3.5.2 su windows Vista sp2
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Aprire un file calc con macro attive da C#

Messaggio da vladko »

non sono esperto di macro ma mi viene da dire che la abilitazione delle macro dipende da configurazione di OOO

ora per una postazione fissa va impostata una dir sicura
per un qualcosa che è portable ancora piu facile
fai sapere grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
MarcoG
Messaggi: 14
Iscritto il: martedì 21 febbraio 2012, 18:49

Re: Aprire un file calc con macro attive da C#

Messaggio da MarcoG »

Grazie della risposta.

LibreOffice è impostato, penso, in modo corretto. Cioè strumenti / opzioni / libreoffice / sicurezza / sicurezza delle macro è impostato su "medio" (anche su "basso" non cambia nulla).

Se apro lo stesso file direttamente da Libreoffice le macro sono attive.

Il problema è quando lo apro da C# con la procedura sopra riportata: le macro non sono attive

grazie
MArco
LibreOffice 3.5.2 su windows Vista sp2
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Aprire un file calc con macro attive da C#

Messaggio da vladko »

stesso succede anche con OOO?
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
codicem
Messaggi: 57
Iscritto il: venerdì 30 aprile 2010, 14:30

Re: Aprire un file calc con macro attive da C#

Messaggio da codicem »

Di solito per aprire un file tramite macro e con macro attive uso il seguente codice

Codice: Seleziona tutto

Dim m(1) As New com.sun.star.beans.PropertyValue
		m(0).Name = ""
        m(0).Value = True
        m(1).Name = "MacroExecutionMode"
        m(1).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN

oDoc = StarDesktop.loadComponentFromURL(sUrl, "_blank", 0, m())
OpenOffice 3.3 su Winxp / Libreoffice 3.3.2 su Mandriva 2010.2
MarcoG
Messaggi: 14
Iscritto il: martedì 21 febbraio 2012, 18:49

Re: Aprire un file calc con macro attive da C#

Messaggio da MarcoG »

Grazie della risposta.

Riporto il codice in C# funzionante:

Codice: Seleziona tutto

XComponentContext oStrap = uno.util.Bootstrap.bootstrap();                                       
XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager();       
XComponentLoader oDesk = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop");
string fileName = textBox1.Text;
string fileNameUrl = "file:///" + fileName.Replace("\\", "/");
PropertyValue[] propVals = new PropertyValue[1];    
propVals[0] = new PropertyValue();                 
propVals[0].Name = "MacroExecutionMode";
propVals[0].Value = new uno.Any((short)4);          
XComponent oDoc = oDesk.loadComponentFromURL(fileNameUrl, "_default", 0, propVals);
XSpreadsheets oSheets = ((XSpreadsheetDocument)oDoc).getSheets();
oSheetsIA = (XIndexAccess)oSheets;
ciao
MArco
LibreOffice 3.5.2 su windows Vista sp2
vladko
Messaggi: 1637
Iscritto il: martedì 3 agosto 2010, 8:02

Re: Aprire un file calc con macro attive da C#

Messaggio da vladko »

se risolto modifica il titolo del primo post con [Risolto]
come ben spiegato in regole del forum e in mia firma
grazie
AOO 3.4.1 AOO341m1(Build:9593) Linux Mint Debian/Mate 64bit java 1.6.0.22 XP PRO/32bit
con Base --> sempre backup!!!
Se problema è Risolto --> Inserire [Risolto]nel titolo come spiega qui, grazie :-)
Rispondi