Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto da xls a txt

Salve a tutti,
sono un principiante, e vorrei un piccolo aiuto.
Devo trasferire dei dati incolonnati su un foglio  excel (nome, cognome
indirizzo etc...)
su un file di testo , però inseriti su un tracciato specifico,
per es.:
cfòòòmmmmmmz0009xxxxxxxxxxxxlllllllllll
vfgtm???mc//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddd
in pratica inserire i dati da excel al posto delle "x".
grazie per l'aiuto.
Roberto.

 in pratica inserire i dati da excel al posto delle "x".
Se la lunghezza del record (la somma delle lunghezze di tutti i campi) non
supera la lunghezza del testo che e` possibile immettere in una cella di
Excel (variabile in base alla versione; una volta: 256, con xl2k: 32.767.
Vedi comunque la guida: "Specifiche di Microsoft Excel".) potresti adottare
una soluzione "tutta Excel", senza scrivere codice ma solo formule (Esempio
1) e salvare come testo.
Oppure potresti (Esempio 2) usare gli oggetti di Excel e le istruzioni
Visual Basic per la gestione dei file: open, close, & c.
Esempio 1.
' Foglio1
' I dati da esportare.
' Foglio2
' Il "tracciato record" relativo alle stesse
' colonne di Foglio1.
'
A1: a ' Tipo. a=alfanumerico; n=numerico
A2: 1 ' Lunghezza
B1: a
B2: 3
C1: n
C2: 5
<...>
' Foglio3
' I dati convertiti in strighe della lunghezza
' prevista in Foglio2.
'
' Formula da copiare a destra per quante sono le colonne
' e in basso per quante sono le righe dei dati:
'
A1:
=SE(Foglio2!A$1="n";TESTO(Foglio1!A1;RIPETI("0";Foglio2!A$2));RIMPIAZZA(RIPE
TI(CODICE.CARATT(32);Foglio2!A$2);1;LUNGHEZZA(SINISTRA(Foglio1!A1;Foglio2!A$
2));SINISTRA(Foglio1!A1;Foglio2!A$2)))
' Foglio4
' La colonna coi dati da esportare.
'
' Formula da copiare in basso per quante sono le righe dei dati.
'
A1: =Foglio3!A1&Foglio3!B1&Foglio3!C1&<...>
Esempio 2.
Option Explicit
Private Type RECORD
  Campo1 As String * 1
  Campo2 As String * 3
  Campo3 As String * 5
  ' <...>
End Type
Public Sub Esporta( _
)
  Dim strFile As String
  Dim intFile As Integer
  Dim udtR    As RECORD
  Dim i       As Long
  strFile = "c:\windows\desktop\tmp\test1.dat"
  intFile = FreeFile(0)
  'Open strFile For Binary Access Write As #intFile
  Open strFile For Random Access Write As #intFile _
    Len = Len(udtR)
  With Range("A1").CurrentRegion
    For i = 1 To .Rows.Count
      udtR.Campo1 = .Cells(i, 1).Value
      udtR.Campo2 = .Cells(i, 2).Value
      udtR.Campo3 _
        = Format$( _
              .Cells(i, 3).Value _
            , String$(Len(udtR.Campo3), "0"))
      Put #intFile, , udtR
    Next
  End With
  Close #intFile
  ' Test di lettura.
  '
  intFile = FreeFile(0)
  'Open strFile For Binary Access Read As #intFile
  Open strFile For Random Access Read As #intFile _
    Len = Len(udtR)
  Do While Not EOF(intFile)
    Get #intFile, , udtR
    With udtR
      Debug.Print .Campo1; "|"; .Campo2; "|"; .Campo3
    End With
  Loop
  Close #intFile
End Sub
Credo non ti faccia male sperimentare entrambi i metodi, anche se il primo
sicuramente apparira` ridicolo ai colleghi del ng "duri e puri". ;-))))
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------


Terrificante ! Mi domando come riesci a districarti con le funzioni in
italiano !
Qualche tempo fa sono impazzito col vba italiano di xl a 16 bit, ma queste
mi sembrano ancora peggio.
Ciao
Aldo

 Qualche tempo fa sono impazzito col vba italiano di xl a 16 bit, ma queste
mi sembrano ancora peggio.
Penso che il tuo sia piu` che altro un rifiuto mentale|ideologico. Rifiuto
non nel senso di monnezza|rusco. ;-)
Se sei capace di passare piu` o meno tranquillamente da BASIC a Pascal a C,
per esempio, nella stessa mezz'ora di lavoro, che problemi vuoi che di`ano
quattro funzioncine? ;-)
Un pizzico di pepe, al solito, lo aggiunge Microsoft (Italia?) quando nel
corso della vita di Excel ha pensato bene di non chiamare sempre con lo
stesso nome italiano la stessa funzione|istruzione, da una versione
all'altra. :-))


 all'altra. :-))
Come si dice:
Errare (del programmatore, n.d.Hal) e' umano,
Perseverare (di m$, sempre n.d.h.) e' diabolico :-)
Buona domenica.
Aldo