Pagina 1 di 1

[Risolto] Importare dati da un altro file odt di calc

Inviato: martedì 21 gennaio 2014, 22:44
da MastroLube
Buonasera a tutti!

Avrei una domanda da porvi.
E' da un po' che cerco una soluzione a questo problema ma non riesco a trovarla.

Dovrei importare delle determinate celle (da un fileB) in un altro file di calc (fileA).

Le operazioni da fare sono le seguenti:
1) nel primo foglio del fileA va a mettere in memoria le ultime 6 cifre delle caselle contenute nella colonna Q (una per volta - ciclo for?). es. AB123456 nella colonna Q8
2) va a ricercare "123456" nel fileB, nel foglio chiamato "prova" e nella colonna C (qui c'è una stringa che termina con dei numeri ma prima ha delle lettere) e una volta trovata la corrispondenza, ad esempio nella casella C3, va a mettere in memoria il contenuto delle caselle N3 e M3 (stessa riga!!)
3) incolla il contenuto delle due caselle messe in memoria nello step precedente in due determinate celle della stessa riga di partenza del fileA -> R8 e S8

il ciclo dovrebbe ripetersi fino a quando non incontra la parola STOP lungo la colonna Q inoltre dovrebbe segnare quando non trova la corrispondenza.

Come si può fare? Qualcuno ha voglia di darmi qualche dritta?

Grazie mille!!

Dennis

Re: Importare dati da un altro file excel

Inviato: mercoledì 22 gennaio 2014, 1:12
da unlucky83
MastroLube ha scritto: 1) nel primo foglio del fileA va a mettere in memoria le ultime 6 cifre delle caselle contenute nella colonna Q (una per volta - ciclo for?). es. AB123456 nella colonna Q8
senza file di esempio ti dico cosa farei io:
1)foglio1 di fileA contiene i dati in Q. Quindi con la funzione "DESTRA" o con una macro estraggo il codice a 6 cifre e lo salvo in una colonna di supporto, ad es. col AA
MastroLube ha scritto: 2) va a ricercare "123456" nel fileB, nel foglio chiamato "prova" e nella colonna C (qui c'è una stringa che termina con dei numeri ma prima ha delle lettere) e una volta trovata la corrispondenza, ad esempio nella casella C3, va a mettere in memoria il contenuto delle caselle N3 e M3 (stessa riga!!)
2)aggiungo foglio di nome "da_prova" in fileA.
In cella B1 di foglio "da_prova" di fileA metto il riferimento alla cella C1 del foglio "prova" del fileB.
In cella C1 di foglio "da_prova" di fileA metto il riferimento alla cella M1 del foglio "prova" del fileB.
In cella D1 di foglio "da_prova" di fileA metto il riferimento alla cella N1 del foglio "prova" del fileB.
In cella A1 di foglio "da_prova" di fileA uso la funzione ""DESTRA" per estrapolare le ultimi 6 caratteri di B1 (foglio "da_prova" di fileA).
Seleziono A1,B1C1D1 di foglio "da_prova" di fileA, copio e incollo fino in fondo al foglio.
A questo punto il fileB non lo guardo più.
MastroLube ha scritto: 3) incolla il contenuto delle due caselle messe in memoria nello step precedente in due determinate celle della stessa riga di partenza del fileA -> R8 e S8

il ciclo dovrebbe ripetersi fino a quando non incontra la parola STOP lungo la colonna Q inoltre dovrebbe segnare quando non trova la corrispondenza.
3) torno in foglio1.Ipotizzando che in R e in S voglio i valori corrispondenti alla ricerca: in R1 uso "CERCA.VERT", selezionando come matrice A:D di "da_prova",come criterio AA1 di foglio1,ordinato metto 0 (Se Ordinato è impostato a FALSO o zero, deve essere trovata l'esatta corrispondenza; in caso contrario verrà restituito l'avviso Errore: valore non disponibile.),indice colonna 3 (rif a colonna C dell'area);in S1 uso "CERCA.VERT", selezionando come matrice A:D di "da_prova",come criterio AA1 di foglio1,ordinato metto 0 (Se Ordinato è impostato a FALSO o zero, deve essere trovata l'esatta corrispondenza; in caso contrario verrà restituito l'avviso Errore: valore non disponibile.),indice colonna 4 (rif a colonna D dell'area).

Re: Importare dati da un altro file excel

Inviato: mercoledì 22 gennaio 2014, 8:28
da charlie
Nel forum di Open Office, sarebbe più opportuno fare riferimento a Calc che, pur avendo un'alta compatibilità, non è lo stesso software menzionato nel titolo.

Re: Importare dati da un altro file excel

Inviato: mercoledì 22 gennaio 2014, 11:39
da MastroLube
unlucky83 ha scritto:
Grazie mille per la risposta, pomeriggio provo a farlo ed eventualmente pubblico un file d'esempio ! :super: :super:
charlie ha scritto:
Si scusa, ho corretto nel titolo.. mi riferivo ad un foglio calc di libreoffice :)

Re: Importare dati da un altro file odt di calc

Inviato: mercoledì 22 gennaio 2014, 17:03
da MastroLube
Non funziona.. mi da errore 502.. oltretutto se provo a fare un cerca dei valori ottenuti con =destra(..) non li vede (credo sia questo il problema).

In allegato un immagine dell'errore, scusate la "censura".

Idee?

Re: Importare dati da un altro file odt di calc

Inviato: mercoledì 22 gennaio 2014, 18:26
da unlucky83
Un errore é il terzo parametro che passi alla funzione: non C2 ma il numero 3. Devi mettere 3 perché la C é la terza colonna dell'area su cui applicato la ricerca.Riprova

Re: Importare dati da un altro file odt di calc

Inviato: giovedì 23 gennaio 2014, 12:26
da MastroLube
Grazie mille! Ho mal interpretato quel passaggio, scusami!

Ora funziona benissimo! :)

C'è un modo per saltare in automatico le righe che contengono testo o celle vuote? Intanto metto su risolto.. GRAZIE!

Re: Importare dati da un altro file odt di calc

Inviato: giovedì 23 gennaio 2014, 23:44
da unlucky83
In J2 metti:

Codice: Seleziona tutto

=SE($H2<>"";CERCA.VERT($H2;$A$2:$D$31;3;0);"")
Questa la copi e la incolli
:)

Re: Importare dati da un altro file odt di calc

Inviato: venerdì 24 gennaio 2014, 21:46
da MastroLube
Grazie unlucky83!!!

Un ultimissima questione! Dal momento che i file si trovano in dropbox continuo a perdere i riferimenti quando li apro da altri pc.. è possibile rendere quei riferimenti relativi? Ho provato a googlare ma non ho trovato nulla che funzionasse...

Grazie mille!!! :))

Re: Importare dati da un altro file odt di calc

Inviato: sabato 25 gennaio 2014, 13:44
da unlucky83
In tal caso devi ricorrere all'uso delle macro. Si parla di macro più complesse di quelle che puoi ottenere con il registratore di macro.
Il concetto da seguire è il seguente:
condizione->i due file si trovano entrambi nella stessa cartella sul pc (la cartella di condivisione di dropbox)
1)apriamo fileA (file principale). In essa c'è la macro che riconosce il percorso di salvataggio del fileA, lo estrapola e infine apre in lettura il percorso/fileB
2)la macro scrive nel foglio2 di fileA i dati che ci interessano di FileB
3)da qui in poi è tutto come la soluzione suggerita in precedenza

Se non sei pratico di macro e il numero di pc che adoperi è limitato a un numero ragionevole, ci sarebbe un'altra soluzione, ovviamente meno bella e pratica rispetto all'uso delle macro. Dimmi te

Re: Importare dati da un altro file odt di calc

Inviato: sabato 25 gennaio 2014, 15:01
da MastroLube
Grazie per la risposta :)

No, in realtà non sono molto pratico ma mi piacerebbe avere una soluzione di quel tipo anche per imparare.. Se hai voglia di spiegarmi ne sarei felicissimo :)

Intanto googlando ho trovato questa soluzione alternativa (forse è la stessa a cui ti riferisci tu). Vedi allegato.

Re: Importare dati da un altro file odt di calc

Inviato: sabato 25 gennaio 2014, 15:19
da unlucky83
Ottimo uso di google :) Pensavo ad una cosa del genere infatti.
Se alleghi i due file in questione (sono sufficienti dei facsimili) provo a fare le macro.

Re: Importare dati da un altro file odt di calc

Inviato: sabato 25 gennaio 2014, 15:45
da MastroLube
Ecco a lei buon uomo :)

Ho notato che alcuni numeri sono negativi.. questo perché avevano bisogno delle altre celle per essere calcolati.. Ignora questo errore :) in realtà ci sarà un numero positivo

Re: Importare dati da un altro file odt di calc

Inviato: sabato 25 gennaio 2014, 23:51
da unlucky83
Allego il fileA che funziona insieme al fileB.ods che hai allegato. Devono trovarsi nella stessa cartella.

Quando vuoi adattare la macro ai tuoi file originali, devi andare in:
Strumenti>Macro>organizza>ooo basic

le macro si trovano in fileA,module1. Clicca su modifica.Copia il modulo nel tuo fileA reale.
All'inizio del modulo ho messo come parametri costanti quei parametri che sicuramente dovrai adattare ai tuoi file (nomi file,nomi fogli, nomi colonne)

La macro l'ho testata sia su win7 sia su Ubuntu.

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 13:47
da MastroLube
Grazie per la risposta :)

Ho provato ad adattare la macro e farla partire sia su libreoffice che su openoffice ma non succede niente :S

Codice: Seleziona tutto

REM  *****  BASIC  *****
const nomefileA as string="SCARICHI.ods"
const fogliofileA as string="_da JLR"
const col1A as string="B"
const col2A as string="C"
const col3A as string="D"
const rigainizioA as integer=2

const nomefileB as string="Contributi JLR.ods"
const fogliofileB as string="Variabili LR"
const col1B as string="D"
const col2B as string="E"
const col3B as string="Q"
const rigainizioB as integer=6

Sub Main
dim percorsoEnomefileA,urlFileB,percorso as string
Dim DocB As Object
Dim vuoto as integer
Dim Dummy() 'It is an (empty) array of PropertyValues
	DocA=ThisComponent
	oSheetA=DocA.Sheets.getByName(fogliofileA)
	percorsoEnomefileA=nomefile()
	percorso=ricavapercorso(percorsoEnomefileA)
	if left(percorso,1)="/" then
		percorso=right(percorso,len(percorso)-1)
	end if
'	msgbox percorso
	urlFileB="file:///" & percorso & nomefileB
	DocB= StarDesktop.loadComponentFromURL(urlFileB, "_hidden", vuoto, Dummy)
	oSheetB=DocB.Sheets.getByName(fogliofileB)
	oCol1B=oSheetB.Columns.getByName(col1B)
	oRange1B = oCol1B.queryEmptyCells()  
	if oRange1B.count>1 then
    	oRango=oRange1B.getbyIndex(oRange1B.count-1)
    	ultimarigaB=mid(oRango.AbsoluteName,instr(oRango.AbsoluteName,"$" & col1B)+3,instr(oRango.AbsoluteName,":")-instr(oRango.AbsoluteName,"$" & col1B)-3)
    end if
	i=0
	for for1=rigainizioB to cint(ultimarigaB)-1
	oCell1A=oSheetA.getCellRangeByName(col1A & cstr(rigainizioA+i))
	oCell2A=oSheetA.getCellRangeByName(col2A & cstr(rigainizioA+i))
	oCell3A=oSheetA.getCellRangeByName(col3A & cstr(rigainizioA+i))
	oCell1B=oSheetB.getCellRangeByName(col1B & cstr(for1))
	oCell2B=oSheetB.getCellRangeByName(col2B & cstr(for1))
	oCell3B=oSheetB.getCellRangeByName(col3B & cstr(for1))
	oCell1A.setvalue(oCell1B.value)
	oCell2A.setvalue(oCell2B.value)
	oCell3A.setvalue(oCell3B.value)	
	i=i+1
	next
	DocB.close(True)
	msgbox "Aggiornato"
End Sub

function nomeFile() as string
	Doc = thiscomponent
	If (Doc.hasLocation()) Then
		sDocURL = Doc.getURL()
		DosUrl=convertfromurl(sDocURL )
	'	msgbox DosUrl
		nomeFile=DosUrl
	else
		msgbox "Questo File non ha percorso"
	End If
end function

function ricavapercorso(percorsoEnomefile as string) as string
	If instr(percorsoEnomefile,nomefileA)>0 Then
		percorso=left(percorsoEnomefile,instr(percorsoEnomefile,nomefileA)-1)
	'	msgbox percorso
		ricavapercorso=percorso
	else
		msgbox "Questo File non si chiama " & nomefileA
	End If
end function
dove sbaglio? alla fine ho modificato solo i dati all'inizio con i nomi giusti :(
le macro sono attivate

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 15:50
da unlucky83
Non è facile dire qual è l'errore.
Quando da errore si apre il modulo basic,prima di chiudere il messaggio di errore, porta in primo piano il modulo,dovrebbe essere evidenziato il punto in cui trova l'errore.

Sicuro sia "Contributi JLR.ods" e non "Contributi JLR.xls"?

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 16:19
da MastroLube
ho provato con entrambi i file.. il file era un xls all'inizio.. l'ho salvato in ods per fare la prova.. ho pure provato a mettere %20 al posto degli spazzi nella macro ma niente.. non da errori, semplicemente non succede nulla O.o

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 17:06
da unlucky83
hai copiato tutte e 3 le macro?
la macro Main non si esegue da sola...hai forse copiato e incollato il pulsante di fileA?
Prova ad eseguire la macro così:Strumenti > macro> esegui macro> macro Main di module1 di "Scarichi"

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 19:19
da MastroLube
Mi si presenta così la schermata: http://i.imgur.com/vfZlw7B.png

faccio Run e non succede nulla.. Non succede nulla nemmeno nel tuo file d'esempio.. ho provato a cancellare i riferimenti e farla riandare.. non è successo nulla :S


OK ho capito come farla partire, bisognava settare la sicurezza su medio (era su alta e faceva partire solo quelle con la firma).

Ad ogni modo mi si ferma qui: http://i.imgur.com/G8XAPPz.png

EDIT:

Risolto aprendo entrambi i file!! WOW! :D

Dal momento che importa tutto ogni volta, è possibile farlo aggiornare e basta? Oltretutto ho creato un tasto con scritto aggiorna che esegue la macro.. però, essendo il file protetto da psw, ogni volta che abilito la modifica del file il tasto diventa modificabile .. c'è un modo per evitarlo?

EDIT2:

c'è un piccolo problema con la colonna D che va in B di scarichi, importa degli zero.. http://i.imgur.com/gIZx69O.png credo sia dovuto al fatto che importa numeri ma in quella colonna c'era una stringa da cui estrapolavo le ultime 6 cifre

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 20:14
da unlucky83
MastroLube ha scritto: OK ho capito come farla partire, bisognava settare la sicurezza su medio (era su alta e faceva partire solo quelle con la firma).
È bene lasciarla alta e aggiungere come percorso affidabile la cartella di dropbox
MastroLube ha scritto: Risolto aprendo entrambi i file!! WOW! :D
Strano che non apre il secondo file...ha forse una psw?
MastroLube ha scritto: c'è un piccolo problema con la colonna D che va in B di scarichi, importa degli zero.. http://i.imgur.com/gIZx69O.png credo sia dovuto al fatto che importa numeri ma in quella colonna c'era una stringa da cui estrapolavo le ultime 6 cifre
Esatto. Sostituisci

Codice: Seleziona tutto

oCell1A.setvalue(oCell1B.value)
con

Codice: Seleziona tutto

oCell1A.setstring(oCell1B.string)
Intanto sistema queste cose, poi pensiamo al pulsante

Re: Importare dati da un altro file odt di calc

Inviato: domenica 26 gennaio 2014, 21:05
da MastroLube
Sì, ha una password.. non c'è modo di aprirlo in automatico?

Ora importa tutto correttamente :D Grazie MILLE!!

Per il pulsante si può fare qualcosa dicevi?

Re: Importare dati da un altro file odt di calc

Inviato: lunedì 27 gennaio 2014, 15:08
da unlucky83
Ho inserito le psw ad entrambi i file, ma mi si apre comunque in automatico il fileB...quindi riguardo a questo punto non sò dirti nulla di nuovo.
Per il pulsante:
Visualizza>Barra degli strumenti>Controllo del formulario
La modalità bozza è disattivata? Se non lo è, disattivala e salva tale modifica prima di riptroteggere il file.

Edit:
Dietro Front!! Quando si abilitano le modifice sul file, si passa in automatico anche in modalità bozza dei controlli del formulario.

Re: Importare dati da un altro file odt di calc

Inviato: martedì 28 gennaio 2014, 11:11
da MastroLube
Ma io devo proprio aprirlo manualmente il fileB.xls ed inserire quindi la password :/ C'è un modo per farglielo fare almeno in automatico?

Riguardo la modalità bozza, speravo ci fosse un modo per evitarla.. Forse in futuro sarà possibile :)

Grazie mille! Metto su risolto, in attesa dell'ultima delucidazione :)

Re: [Risolto] Importare dati da un altro file odt di calc

Inviato: martedì 28 gennaio 2014, 12:36
da unlucky83
È meglio che apri una nuova discussione su come aprire un file protetto da psw in automatico, dopo aver controllato che non c'è gia una discussione simile