Importazione in foglio di calcolo

Creare una macro - Scrivere uno script - Usare le API
Rispondi
MicheleG
Messaggi: 9
Iscritto il: martedì 30 marzo 2010, 17:31

Importazione in foglio di calcolo

Messaggio da MicheleG »

Ciao a tutti. Ho un problema nella scrittura di due macro molto simili tra loro, che andranno nel modulo Module1 della libreria MiaLibreria del file Destinazione.ods.

La prima macro deve aprire una maschera di navigazione nel filesystem. Selezionando un foglio di calcolo (xls o ods),
lo apre,
seleziona e copia le prime due colonne,
torna al file che contiene la macro,
incolla nella stessa posizione le tre colonne e
chiude il file sorgente.

La seconda macro deve aprire una maschera di navigazione nel filesystem. Selezionando un file di testo semplice (.txt),
la macro deve importare nella colonna "a" il contenuto del file di testo, scendendo di una riga ogni volta che il testo va a capo.
E poi deve chiudere il file sorgente.

Potreste aiutarmi?

Grazie in ogni caso
Michele
OpenOffice 3.1 su Ubuntu 9.10
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Importazione in foglio di calcolo

Messaggio da xergio »

Per selezionare un file puoi usare il servizio "com.sun.star.ui.dialogs.FilePicker".

Per copia-incollare le colonne puoi usare parzialmente il registratore di macro

Codice: Seleziona tutto

Function getData
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false

dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Sel"
args2(0).Value = true

dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args2())
getData = ThisComponent.CurrentSelection

end function
mentre per eseguire il tutto puoi fare un macro così:

Codice: Seleziona tutto

sub Main
dim m1()
oCalcDest = StarDesktop.loadComponentFromUrl("private:factory/scalc", "_blank", 0, m1())
sUrl = OpenFile
dim m()
oCalcSource = StarDesktop.loadComponentFromUrl(sUrl, "_blank" , 0, m())
oSel = oCalcSource.CurrentSelection
aData = getData.getDataArray
iRows = getData.Rows.count -1
iCols = getData.Columns.count -1
oRange = oCalcDest.Sheets(0).getCellRangeByPosition(0, 0, iCols, iRows)'leftCol, leftRow, righCol, righRow) 

oRange.setDataArray(aData)
end sub
Per importare del testo puoi usare una macro così (presa da http://wiki.services.openoffice.org/wik ... Library%29 ), mettendo al posto di Msg l'inserimento nella cella del foglio di calcolo.

Codice: Seleziona tutto

Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String
 
' Define filename 
Filename = "c:\data.txt"
 
' Establish free file handle
FileNo = Freefile
 
' Open file (reading mode)
Open Filename For Input As FileNo
 
' Check whether file end has been reached
Do While not eof(FileNo)
  ' Read line 
  Line Input #FileNo, CurrentLine   
  If CurrentLine <>"" then
    Msg = Msg & CurrentLine & Chr(13)
  end if
Loop
 
 
' Close file 
 
Close #FileNo               
Msgbox Msg
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
MicheleG
Messaggi: 9
Iscritto il: martedì 30 marzo 2010, 17:31

Re: Importazione in foglio di calcolo

Messaggio da MicheleG »

Grazie della risposta xergio!
Dunque, utilizzando la seconda macro,

la linea

oCalcSource = StarDesktop.loadComponentFromUrl(sUrl, "_blank" , 0, m())

provoca il messaggio:

Errore di runtime basic.
Si è verificata un'eccezione
Type: com.sun.star.lang.IllegalArgumentException
URL seems to be an unsupported one.

Scusami ma non capisco il perché.

Grazie in ogni caso
Michele
OpenOffice 3.1 su Ubuntu 9.10
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Importazione in foglio di calcolo

Messaggio da xergio »

Scusa della poca chiarezza:
presuppone l'uso del servizio FilePicker con una funzione simile a questa:

Codice: Seleziona tutto

'***Open file****************************************************
Function OpenFile
	oFilePicker = createUnoService ("com.sun.star.ui.dialogs.FilePicker")
	'oFilePicker.appendFilter("OpenDocumentText","*.odt")
	If oFilePicker.execute() Then
		OpenFile = oFilePicker.Files(0)
	Else
		print "Select the file"
	Endif
	
End Function
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
MicheleG
Messaggi: 9
Iscritto il: martedì 30 marzo 2010, 17:31

Re: Importazione in foglio di calcolo

Messaggio da MicheleG »

Scusami il ritardo, xergio.

Comunque aggiungendo la funzione, che definisce OpenFile, l'errore si risolve.

Grazie :) !
OpenOffice 3.1 su Ubuntu 9.10
Rispondi