V I S U A L I Z Z A D I S C U S S I O N E |
Terminator |
Inserito il - 28 novembre 2010 : 08:50:20 Questa funzione apre un file excel, si posiziona in un determinato foglio e legge il contenuto di una cella.
Sintassi: (excel file_excel foglio_di_lavoro cella)
Argomenti: file_excel - Stringa indicante il file con estensione xls foglio_di_lavoro - Stringa indicante un foglio di lavoro valido (es. Foglio1) cella - Stringa indicante la cella da valutare
(defun excel (fileexcel foglioexcel cella / fogliodilavoro valorecella)
(if (and (stringp fileexcel)
(stringp foglioexcel)
(stringp cella)
)
(progn
(setq fogliodilavoro
(vlax-get-property
(vlax-get-property
(vla-open
(vlax-get-property
(vlax-get-or-create-object "Excel.Application")
'workbooks
)
fileexcel
)
'worksheets
)
'item
foglioexcel
)
valorecella (vlax-get (vlax-get-property
fogliodilavoro
'Range
cella
)
'Value2
)
)
(vlax-invoke
(vlax-get-property
(vlax-get-or-create-object "Excel.Application")
'workbooks
)
'close
)
valorecella
)
(progn
(cond
((not (stringp fileexcel))
(setq valorecella nil)
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
fileexcel
)
)
)
((not (stringp foglioexcel))
(setq valorecella nil)
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
foglioexcel
)
)
)
((not (stringp cella))
(setq valorecella nil)
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
cella
)
)
)
)
)
)
)
Per la funzione excel viene usata un'altra funzione che serve a verificare che l'argomento inserito sia una stringa, la funzione stringp:
(defun stringp (argomento / stringa)
(setq stringa "STRINGA")
(if (= (numberp argomento) nil)
(if (equal (type argomento)(type stringa)) T nil)
)
) |
10 U L T I M E R I S P O S T E (in alto le piщ recenti) |
Terminator |
Inserito il - 06 dicembre 2010 : 14:04:56 Grazie a Cadlandia ho trovato un bel po' di materiale che mi и stato molto utile. |
aforza |
Inserito il - 06 dicembre 2010 : 12:18:30 ciao,
immaginavo, anche qui corsi zero....
Grazie Ciao |
Terminator |
Inserito il - 06 dicembre 2010 : 09:23:02 | Messaggio inserito da aforza
ciao,
scusami hai seguito qualche corso o leggi manuali a manetta?
ciao
|
Corsi non ce ne sono, magari! Bisogna giocoforza fare l'autodidatta con esempi di lisp in rete (sovente gli originali compiono operazioni anche molto diverse da quello che desidero), manuali (le mie letture in treno per andare al lavoro si riducono a manuali AutoLISP, metodi ActiveX, funzioni, reattori) e poi provare, riprovare, riprovare...e ancora riprovare! |
aforza |
Inserito il - 06 dicembre 2010 : 09:12:41 ciao,
scusami hai seguito qualche corso o leggi manuali a manetta?
ciao |
Terminator |
Inserito il - 04 dicembre 2010 : 19:27:04 Due brevissime funzioni che si integrano alle funzioni descritte precedentemente. Utili soprattutto quando si devono fare letture sul file excel di piщ celle di seguito.
CELLAHOR - Restituisce una stringa indicante la cella successiva orizzontale
Sintassi: (cellahor cella)
Argomenti: cella - Cella di excel
(defun cellahor (stringalettera / listalettere)
(setq index 0)
(setq listalettere
'("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")
)
(if (and (equal (strcase (substr stringalettera 1 1))
(car
(member (strcase (substr stringalettera 1 1)) listalettere)
)
)
(not (equal (strcase (substr stringalettera 1 1)) "Z"))
(> (atoi (substr stringalettera 2 (strlen stringalettera)))
0
)
)
(strcat (cadr
(member (strcase (substr stringalettera 1 1)) listalettere)
)
(itoa
(atoi (substr stringalettera 2 (strlen stringalettera)))
)
)
nil
)
)
CELLAVER - Restituisce una stringa indicante la cella successiva verticale
Sintassi: (cellaver cella)
Argomenti: cella - Cella di excel
(defun cellaver (stringalettera)
(strcat (substr stringalettera 1 1) (itoa (1+ (atoi (substr stringalettera 2 (strlen stringalettera))))))
)
|
Terminator |
Inserito il - 03 dicembre 2010 : 06:47:44 Il programma come и stato scritto и abbastanza limitato, ogni volta che legge una cella un file excel si apre e si chiude. Siccome bisogna, nella totalitа dei casi, leggere sempre piщ di una cella mi sono chiesto se fosse il caso di creare una funzione che, al pari delle funzioni open e close, apra un file excel in lettura o in scrittura e dopo avere elaborato il file, lo chiuda.
Ora le funzioni sono tre: 1) openexcel 2) cellaexcel 3) closeexcel
OPENEXCEL Sintassi: (openexcel fileexcel foglio flag)
Argomenti: fileexcel - Stringa indicante il file excel compreso di percorso foglio - Stringa indicante il foglio di lavoro interessato flag - Stringa che indica se siamo in modalitа lettura, scrittura o append "r" - modalitа lettura, il file viene aperto in lettura. Se non esiste, la funzione restituisce nil "w" - modalitа scrittura, il file viene aperto in scrittura. Se esiste un file con lo stesso nome questo viene sovrascritto "a" - modalitа append, il file viene aperto in scrittura e aggiornato con nuovi dati. Se il file non esiste, viene creato un file nuovo
In tutti i casi, se non esiste il foglio interessato la funzione restituisce nil.
(defun openexcel (fileexcel foglioexcel flag / listafogli fogli)
(if (and (stringp fileexcel)
(stringp foglioexcel)
(stringp flag)
)
(progn
(cond
((or (= (strcase flag) "R")
(= (strcase flag) "W")
(= (strcase flag) "A")
)
(setq WBKS (vlax-get-property
(vlax-get-or-create-object "Excel.Application")
"workbooks"
)
)
(cond
((= (strcase flag) "R")
(if (findfile fileexcel)
(setq fileinlettura (vla-open WBKS fileexcel))
nil
)
)
((= (strcase flag) "W")
(if (findfile fileexcel)
(vl-file-delete fileexcel)
)
(setq fileinlettura (vla-add WBKS))
)
((= (strcase flag) "A")
(if (findfile fileexcel)
(setq fileinlettura (vla-open WBKS fileexcel))
(setq fileinlettura (vla-add WBKS))
)
)
)
(cond
((or (and (= (strcase flag) "R")(findfile fileexcel))
(= (strcase flag) "W")
(= (strcase flag) "A")
)
(setq
insiemefogli (vlax-get-property
fileinlettura
'worksheets
)
listafogli
(vlax-for fogli insiemefogli
(setq nomifogli (consr (strcase (vlax-get-property fogli "Name")) nomifogli))
)
)
(if (equal (strcase foglioexcel)
(car (member (strcase foglioexcel) listafogli))
)
(progn
(setq fogliointeressato
(vlax-get-property
insiemefogli
'item
foglioexcel
)
flagcella flag
foglioexcelcella
foglioexcel
fileexcelcella
fileexcel
)
fileinlettura
)
(progn (vla-close fileinlettura)
(princ)
(setq fileinlettura nil)
)
)
)
)
)
(T
(princ "\n; errore: modalitа di apertura sconosciuta: ")
(princ flag)
(princ)
)
)
)
(progn
(cond
((not (stringp fileexcel))
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
fileexcel
)
)
)
((not (stringp foglioexcel))
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
foglioexcel
)
)
)
((not (stringp flag))
(princ
(strcat "; errore: tipo di argomento errato: stringp: "
flag
)
)
)
)
)
)
)
CELLAEXCEL Sintassi: (cellaexcel cella valore)
Argomenti: cella - Stringa indicante la cella da leggere o da scrivere valore - Stringa indicante il valore da inserire in fase di scrittura file, in caso contrario inserire nil.
Il valore restituito и il valore della cella che viene letta se siamo in lettura, nil se siamo in scritttura
(defun cellaexcel (cella valore)
(cond
((= (strcase flagcella) "R")
(setq valorecella
(vlax-variant-value
(vlax-get-property
(vlax-get-property
fogliointeressato
'Range
cella
)
'Value2
)
)
)
)
((or (= (strcase flagcella) "W")
(= (strcase flagcella) "A")
)
(vlax-put-property
(vlax-get-property
fogliointeressato
'Range
cella
)
'Value2
valore
)
)
)
)
CLOSEEXCEL Sintassi: (closeexcel file_desc)
Argomenti: file_desc - E' la variabile che contiene il file memorizzato nella funzione openexcel, al pari della funzione close
(defun closeexcel (file_excel / fogliointeressato)
(cond
((= (strcase flagcella) "R")
(vla-close fileinlettura)
)
((= (strcase flagcella) "W")
(vla-close fileinlettura :vlax-true fileexcelcella)
)
((= (strcase flagcella) "A")
(if (findfile fileexcelcella)
(vla-close fileinlettura :vlax-true)
(vla-close fileinlettura :vlax-true fileexcelcella)
)
)
)
(setq flagcella nil
fileexcelcella nil
fileinlettura nil
)
(princ)
)
Se potete testare il tutto per vedere se ci sono bug o miglioramenti.
Trovato bug e aggiornata funzione openexcel, se il file non esisteva in modalitа lettura c'era un messaggio di errore, invece del piщ naturale nil, come specificato fra l'altro nelle istruzioni. |
blubossa |
Inserito il - 29 novembre 2010 : 12:24:46 confermo и proprio un Terminator..........
| Messaggio inserito da arri
Messaggio inserito da aforza
ciao,
complimenti....
cos'hai una scarica ormonale di programmazione.... :-)
ciao
siamo fortunati che Terminator abbia scelto CADlandia 
Gli si addice anche il nick, и un terminatore di problemi, li risolve tutti  
|
|
Terminator |
Inserito il - 29 novembre 2010 : 10:15:12 Adesso con l'ActiveX e i reattori si sono aperti nuovi orizzonti. L'unico limite rimane solo la fantasia... |
arri |
Inserito il - 29 novembre 2010 : 09:36:17 Messaggio inserito da aforza
ciao,
complimenti....
cos'hai una scarica ormonale di programmazione.... :-)
ciao
siamo fortunati che Terminator abbia scelto CADlandia 
Gli si addice anche il nick, и un terminatore di problemi, li risolve tutti   |
aforza |
Inserito il - 29 novembre 2010 : 09:09:50 ciao,
complimenti....
cos'hai una scarica ormonale di programmazione.... :-)
ciao |