[Risolto] Importare tutti i fogli da un altro file Calc
[Risolto] Importare tutti i fogli da un altro file Calc
Ciao a tutti! Il mio obiettivo è craere una macro che importi nel file Calc da cui viene eseguita tutti i fogli, comprensivi del loro contenuto, di un altro file Calc a scelta. In pratica, vorrei che la macro eseguisse ciò che si fa dal menu "Inserisci" -> "Foglio da file" -> "Dopo il foglio corrente", per tutti i fogli del file. Allego i due file calc, quello in cui si esegue la macro (Principale.ods) e quello dal quale devono essere copiati i fogli (OrigineDati.ods). Preciso che i fogli di OrigineDati.ods hanno sicuramente tutti un nome diverso dall'unico foglio contenuto in Principale.ods. Se si riesce a fare questo, l'ideale poi sarebbe che fosse possibile selezionare attraverso un'apposita finestra di dialogo il file da cui copiare i fogli. Grazie mille!
- Allegati
-
- Principale.ods
- File da cui vengono importati i fogli
- (8.82 KiB) Scaricato 188 volte
-
- OrigineDati.ods
- File da cui copio i fogli
- (8.85 KiB) Scaricato 188 volte
Ultima modifica di charlie il sabato 23 aprile 2016, 19:16, modificato 2 volte in totale.
Motivazione: Aggiunto segno di spunta verde
Motivazione: Aggiunto segno di spunta verde
OpenOffice 3.1 su Windows 7
Re: Importare tutti i fogli da un altro file Calc
prova questa macro
Codice: Seleziona tutto
Sub CopiaFogli
Dim args(0) As New com.sun.star.beans.PropertyValue
Doc1 = ThisComponent
sUrl = ConvertToURL("F:\Download\OrigineDati.ods") ' <<<<< modificare percorso
args(0).Name = "Hidden"
args(0).Value = true
Doc2=StarDesktop.loadComponentFromURL(sUrl,"_blank",0, args())
sSheet = Doc1.getSheets()
for n=0 to doc2.Sheets.getCount()-1
nomefoglio = doc2.Sheets(n).Name
sSheet.insertNewByName(nomefoglio, doc1.Sheets.getCount())
lSheet = sSheet.getByName(nomefoglio)
lSheet.link(sURL, nomefoglio, "calc8", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
lSheet.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
next
Doc2.close(true)
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Importare tutti i fogli da un altro file Calc
Perfetta patel, fa esattamente quello che mi serve! In più senza aprire in modo visibile il foglio OrigineDati.ods! Grazie mille, sei stato anche velocissimo a rispondermi Ora, l'obiettivo di questa operazione è cancellare tutti i fogli a parte il primo da Principale.ods e reimportarli (dopo che chi di dovere li ha aggiornati) da OrigineDati.ods. Ma poiché questo secondo file in realtà cambia nome dopo l'aggiornamento, deve essere possibile scegliere per l'utente il file "nuovo", in modo che appunto una procedura automatica cancelli i fogli i vecchi da Principale.ods e importi dal file aggiornato (scelto dall'utente) quelli nuovi. Come è realizzabile, se lo è, tutto questo con un solo pulsante? Ho visto che si può creare un pulsante di tipo FilePicker ma credo che consentirebbe soltanto di selezionare il file, mentre bisognerebbe premerne eventualmente un altro per attivare poi in base al file scelto le altre operazioni richieste, o mi sbaglio?
EDIT: se pensi che sia meglio portare questo thread in RISOLTO e aprirne nuovo, dì pure.
EDIT: se pensi che sia meglio portare questo thread in RISOLTO e aprirne nuovo, dì pure.
OpenOffice 3.1 su Windows 7
Re: Importare tutti i fogli da un altro file Calc
Non ho capito, puoi spiegarti meglio ?ihinnfmna ha scritto:Ora, l'obiettivo di questa operazione è cancellare tutti i fogli a parte il primo da Principale.ods e reimportarli (dopo che chi di dovere li ha aggiornati) da OrigineDati.ods..
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Importare tutti i fogli da un altro file Calc
Certamente! Principale.ods contiene un foglio con un form e relativi controlli, chiamiamo questo foglio "Form". Il foglio Form è fisso all'interno di Principale.ods. Un pulsante all'interno di Form dovrebbe attivare una macro che faccia questo:
1) cancellare ogni altro foglio eventualmente presente in Principale.ods a parte Form;
2) consentire all'utente di scegliere un altro file Calc dal file system (supponiamo OrigineDati.ods)
3) importare tuti i fogli contenuti nel file OrigineDati.ods in Principale.ods in aggiunta a Form (quello che è stato già realizzato con la macro da te gentilissimamente fornita )
Questa operazione di cancellazione fogli esistenti/reimportazione fogli aggiornati andrebbe fatta ogni volta che il file da cui importare i fogli viene aggiornato (e cambia anche nome). Mi interessa quindi renderla un'operazione più immediata possibile per l'utente finale. Ti ringrazio per l'aiuto
1) cancellare ogni altro foglio eventualmente presente in Principale.ods a parte Form;
2) consentire all'utente di scegliere un altro file Calc dal file system (supponiamo OrigineDati.ods)
3) importare tuti i fogli contenuti nel file OrigineDati.ods in Principale.ods in aggiunta a Form (quello che è stato già realizzato con la macro da te gentilissimamente fornita )
Questa operazione di cancellazione fogli esistenti/reimportazione fogli aggiornati andrebbe fatta ogni volta che il file da cui importare i fogli viene aggiornato (e cambia anche nome). Mi interessa quindi renderla un'operazione più immediata possibile per l'utente finale. Ti ringrazio per l'aiuto
OpenOffice 3.1 su Windows 7
Re: Importare tutti i fogli da un altro file Calc
Codice: Seleziona tutto
Sub CopiaFogli
Dim args(0) As New com.sun.star.beans.PropertyValue
Dim filterNames(1) As String
filterNames(0) = "*.ods"
filterNames(1) = "*.xls"
call eliminafogli
Doc1 = ThisComponent
sUrl = GetAFileName(filterNames())
if surl ="" then exit sub
args(0).Name = "Hidden"
args(0).Value = true
Doc2=StarDesktop.loadComponentFromURL(sUrl,"_blank",0, args())
sSheet = Doc1.getSheets()
for n=0 to doc2.Sheets.getCount()-1
nomefoglio = doc2.Sheets(n).Name
sSheet.insertNewByName(nomefoglio, doc1.Sheets.getCount())
lSheet = sSheet.getByName(nomefoglio)
lSheet.link(sURL, nomefoglio, "calc8", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
lSheet.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
next
Doc2.close(true)
End Sub
Function GetAFileName(Filternames()) As String
Dim oFileDialog as Object, iAccept as Integer, sPath as String, InitPath as String
Dim RefControlName as String, oUcb as object
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
AddFiltersToDialog(FilterNames(), oFileDialog)
InitPath = ConvertToUrl("F:\Download\") ' <<<<<< cartella iniziale in cui cercare
If InitPath = "" Then
InitPath = GetPathSettings("Work")
End If
If oUcb.Exists(InitPath) Then
oFileDialog.SetDisplayDirectory(InitPath)
End If
iAccept = oFileDialog.Execute()
If iAccept = 1 Then
sPath = oFileDialog.Files(0)
GetAFileName = sPath
End If
oFileDialog.Dispose()
End Function
sub eliminafogli
Doc = ThisComponent
Sheets = Doc.Sheets
for n=Sheets.getCount()-1 to 0 step -1
if Sheets(n).Name <> "Form" then Sheets.removeByName(Sheets(n).Name)
next
end sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Re: Importare tutti i fogli da un altro file Calc
Grazie mille! Fa proprio quello che mi serve ho verificato che per i file Excel non riesce a importare i fogli, ho risolto cambiando il parametro "calc8" con "MS Excel 97" (o con una stringa vuota) dopo aver fatto qualche ricerca in merito sul web. Segno come risolto e ti ringrazio infinitamente!
OpenOffice 3.1 su Windows 7