Autore |
Discussione |
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 26 novembre 2010 : 13:07:50
|
ciao a tutti, ho un file xls così strutturato:
nome_blocco A B C D N1 CIAO MONDO 1 CIAO MONDO 5 CIAO MONDO 9 CIAO MONDO 13 N2 CIAO MONDO 2 CIAO MONDO 6 CIAO MONDO 10 CIAO MONDO 14 N3 CIAO MONDO 3 CIAO MONDO 7 CIAO MONDO 11 CIAO MONDO 15 N4 CIAO MONDO 4 CIAO MONDO 8 CIAO MONDO 12 CIAO MONDO 16
vedi file allegato.
vorrei, attraverso lisp, creare 1 File dwg per ogni riga e salvarlo nella cartella XXX.
per cui nel file N1 voglio scrivere, alla coordinata 0,0 ciao mondo 1 (sul layer A) ciao mondo 5 (sul lauer B) ciao mondo 9 (sul layer C) ciao mondo 13 (sul layer D)
ovviamente A B C D altro non è che il contenuto della cella.
qualche idea?
grazie BB
Scarica allegato:
testo_in.rar 6,11 KB
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 26 novembre 2010 : 15:10:29
|
Prova questa prima versione oserei dire grezza e misera che funziona solo su una riga (per ora):
(defun C:CIAOMONDO ()
(if path
(setq fileexcel (getfiled "Seleziona il tuo file xls"
path
"xls"
4
)
)
(setq fileexcel (getfiled "Seleziona il tuo file xls"
"c:\\Programmi\\"
"xls"
4
)
)
)
(if (not fileexcel)
(exit)
)
(setq path fileexcel)
(setq foglioexcel
(vlax-get-property
(vlax-get-property
(vlax-invoke
(vlax-get-property
(vlax-get-or-create-object "Excel.Application")
'workbooks
)
'open
fileexcel
)
'worksheets
)
'item
"Foglio1"
)
)
(setq index 2)
(if (not (tblsearch "LAYER" "A"))
(command "LAYER" "_NEW" "A" "CO" 1 "A" "")
)
(if (not (tblsearch "LAYER" "B"))
(command "LAYER" "_NEW" "B" "CO" 2 "B" "")
)
(if (not (tblsearch "LAYER" "C"))
(command "LAYER" "_NEW" "C" "CO" 3 "C" "")
)
(if (not (tblsearch "LAYER" "D"))
(command "LAYER" "_NEW" "D" "CO" 4 "D" "")
)
;;; (repeat 5
(setq cella (strcat "A" (itoa index))
valorecella (vlax-get (vlax-get-property
foglioexcel
'Range
cella
)
'Value2
)
)
(if (findfile (strcat valorecella ".dwg"))
(command "_SAVEAS" "2007" valorecella "_Y")
(command "_SAVEAS" "2007" valorecella)
)
(setq cella (strcat "B" (itoa index))
valorecella (vlax-get (vlax-get-property
foglioexcel
'Range
cella
)
'Value2
)
)
(command "LAYER" "_SET" "A" "")
(command "_TEXT" "0,0" "" "" valorecella)
(setq cella (strcat "C" (itoa index))
valorecella (vlax-get (vlax-get-property
foglioexcel
'Range
cella
)
'Value2
)
)
(command "LAYER" "_SET" "B" "")
(command "_TEXT" "0,0" "" "" valorecella)
(setq cella (strcat "D" (itoa index))
valorecella (vlax-get (vlax-get-property
foglioexcel
'Range
cella
)
'Value2
)
)
(command "LAYER" "_SET" "C" "")
(command "_TEXT" "0,0" "" "" valorecella)
(setq cella (strcat "E" (itoa index))
valorecella (vlax-get (vlax-get-property
foglioexcel
'Range
cella
)
'Value2
)
)
(command "LAYER" "_SET" "D" "")
(command "_TEXT" "0,0" "" "" valorecella)
;;; (setq index (1+ index))
;;; )
) |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 26 novembre 2010 : 16:11:59
|
Così va meglio:
Scarica allegato:
ciaomondo.zip 1,23 KB |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 26 novembre 2010 : 17:30:03
|
ciao Terminator, penso proprio che il tuo sia davvero un acronimo che ti si addice
ho provato il test e c'è qualcosa che non va....
vorrei decidere io la directory di salvataggio. partendo da un file aperto, PIPPO, lo stesso non deve essere chiuso.
l'ultima stringa non viene salvata N4
innanzi tutto il nome del layer devo andarlo a leggere direttamente nelle celle, questo rende il tutto più flessibile.
la tecnica di interazione con excel non la conosco molto e spero di non dire c.....
grazie bb
|
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 26 novembre 2010 : 17:43:11
|
inoltre ho notato che il programma gestisce solo fino alla riga N4, in realtà mi sono espresso male, le righe possono essere moltissime, in realtà dovrebbe leggere sino a quando trova il nome del disegno... |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 26 novembre 2010 : 19:06:26
|
Adesso il programma si arresta solo quando trova una riga vuota Vedi un po' di testarlo in questa fase.
Scarica allegato:
ciaomondo.zip 1,34 KB |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 26 novembre 2010 : 22:58:30
|
il file inerenten all'ultima stringa è sempre vuoto..... e subito dopo non riesco ad aprire il file .xls relativo.
per quanto riguarda il percorso e eof è tutto ok
grazie bb
| Messaggio inserito da Terminator
Adesso il programma si arresta solo quando trova una riga vuota Vedi un po' di testarlo in questa fase.
Scarica allegato:
ciaomondo.zip 1,34 KB
|
|
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 26 novembre 2010 : 23:12:52
|
Ecco qua, ultimissima release (salvo altri bugs che tu probabilmente troverai...)
Righe virtualmente infinite, layers elastici, funziona anche se qualche cella è vuota. In questo caso il layer viene creato ma non viene scritto alcun testo.
Scarica allegato:
ciaomondo.zip 5,68 KB
PS: Dimenticavo: il percorso di salvataggio blocchi è lo stesso dove si trova il file excel |
Modificato da - Terminator in data 26 novembre 2010 23:14:59 |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 27 novembre 2010 : 12:18:07
|
ciao Terminator, avevo già fatto altri cambiamenti al vecchio prg............
quest'ultimo è davvero ottimo l'ho testato e ho riscontrato i seguenti problemi:
- la mancanza dei colori dei layer, che nell'altro erano ottimi. - il processo del file .xls resta appeso, quindi non mi permette di riaprire il file .xls e sono costretto a far terminare il processo manualmente nella gestione processi.
spero di essermi spiegato in relazione a quest'ultimo punto.
grazie bb
|
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 27 novembre 2010 : 16:04:43
|
| Messaggio inserito da blubossa
ciao Terminator, avevo già fatto altri cambiamenti al vecchio prg............
quest'ultimo è davvero ottimo l'ho testato e ho riscontrato i seguenti problemi:
- la mancanza dei colori dei layer, che nell'altro erano ottimi. - il processo del file .xls resta appeso, quindi non mi permette di riaprire il file .xls e sono costretto a far terminare il processo manualmente nella gestione processi. |
- L'assegnazione dei colori è stata una scelta finché potevo assegnare nomi precisi ai layers e sapere che si chiamavano A, B, C, D. Quindi al layer A il colore 1, al B il 2 e via dicendo. Nella nuova versione del programma parto dal presupposto di non sapere quanti layer ci saranno e il programma stesso dovrebbe contarli. Potrei al limite operare in questo modo: quando incontra la casella B1 assegno in ogni caso il colore 1 anche se il layer si chiama pippo, alla C1 il colore 2, ecc... - Per quanto riguarda il secondo problema io non ho riscontrato alcun tipo di problema, farò altri test |
|
|
Terminator
Utente Master
725 Messaggi |
Inserito il - 27 novembre 2010 : 17:14:01
|
Sarà la volta buona?
Scarica allegato:
ciaomondo.zip 1,52 KB |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 29 novembre 2010 : 12:25:52
|
è buona?? No! è Ottima...........
ciao bb |
|
|
|
Discussione |
|