leggere un documento dal codice
Hai un problema con Excel? 
leggere un documento dal codice
di nokia3310 data: 06/03/2014 14:28:32
Ciao, sto facendo una macro che deve creare degli script partendo da un file contenuto in una cartella.
Mettiamo il caso che questo file si chiami "pippo" e al suo interno devo ad esempio cercare la parola "ciao"; quindi mi serve un modo per fare un InStr all'interno del documento "pippo" per trovare la parola "ciao".
A= InStr(......)
Come posso fare?
Grazie!
di Grograman (utente non iscritto) data: 06/03/2014 14:33:12
Ma sto pippo è un file di testo o un file excel?
O altro ancora?
di nokia3310 data: 06/03/2014 15:01:09
...sono file .csv
di Grograman (utente non iscritto) data: 06/03/2014 15:02:08
E allora ci sono mille modi per farlo. Sii più specifico.
di nokia3310 data: 06/03/2014 15:11:01
Allora inizialmente la ricerca delle parole avveniva in un file excel ed era di questo tipo:
For i = 1 To 10000 ' 10000 righe della tabella comandi'
A = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Switches")
B = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "SSE")
C = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "CAB3K")
D = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "CAB9K")
D1 = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "AUX")
D2 = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "PowerPanel")
G = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Generals")
H = InStr(1, Sheets("Tabella_comandi").Cells(i, 1), "Gate")
Voglio svincolarmi dall'excel, per questo ho creato una cartella in cui far generare al codice la Tabella_comandi sopra citata in questo modo:
Private Function CreazioneCartelle(ByVal PS As String)
Dim i As Integer
file = ActiveWorkbook.Path & "" & PS & ""
Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
If Not FileSystemObj.folderExists(file) Then
FileSystemObj.CreateFolder file
MsgBox "E' stata creata la nuova cartella" & file, vbInformation, "Avviso"
End If
Set pFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fPersFile = pFSO.OpenTextFile(file & "Tabella Comandi " & PS & ".csv", ForAppending, True)
If IsNull(fPersFile) Then
MsgBox "PV_Muxed: Errore nella creazione di Tabella_Comandi_" & PS & ".csv"
End If
End Function
A questo punto io voglio fare la ricerca delle parole (prima porzione di codice che ti ho mandato), nel file Tabella_Comandi creato e non più nell'excel.
Ho pensato di fare un set di questo tipo:
Set new = pFSO.OpenTextFile(file & "Tabella Comandi " & PS & ".csv", ForWriting, True)
poi però non so come leggere dal documento e quindi come fare la ricerca delle parole nel file Tabella_comandi.csv
di Grograman (utente non iscritto) data: 06/03/2014 15:39:12
Io intanto ti suggerirei di importarlo da "dati" - "carica dati esterni" - "da testo" direttamente in in foglio del file da cui parti (ed eliminarlo quando hai finito).
Ovviamente il tutto mentre ti registri.
Questo per quanto riguarda l'importazione del csv.
Continua ad essermi oscuro invece lo scopo.
Per i file di testo ad ogni modo la variabile oggetto più indicata è "textstream"
Ti riporto una routine dove la utilizzo (per esportare in txt però)
Option Explicit
Sub Esporta_TXT()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' ATTENZIONE RICHIEDE L'ATTIVAZIONE DELLA LIBRERIA MICROSOFT SCRIPTING RUNTIME '''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim wbINF As Workbook
Dim wsINF As Worksheet, wsData As Worksheet
Dim objFSYS As New FileSystemObject 'leggasi sopra, attiva la libreria
Dim objTxt As TextStream 'Tipo per file di testo
Dim strTxt As String, strData As String
Dim x As Long, i As Long
Set wbINF = ThisWorkbook
Set wsINF = wbINF.Sheets("Per Upload A2")
Set wsData = wbINF.Sheets("Dipendenti")
strData = Format(wsData.Cells(5, 7), "dd-mm-yyyy")
Set objTxt = objFSYS.CreateTextFile(wbINF.Path & "INF.78 al " & strData & ".txt", True) 'creo file txt, sovrascrivo precedenti
With wsINF
x = .Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To x
strTxt = .Cells(i, 1).Text
If strTxt <> "" Then
With objTxt
.Write strTxt
.Write vbNewLine
End With
End If
Next i
End With
Call Shell("explorer.exe " & wbINF.Path, vbNormalFocus)
Set wbINF = Nothing
Set wsINF = Nothing
Set wsData = Nothing
Set objTxt = Nothing
End Sub |
di patel data: 06/03/2014 15:39:35
col codice allegato ti ritrovi il contenuto del file di testo nella stringa st
Sub TextFileToString()
folderPath = "E:prova"
Filename = "1.txt"
st = CreateObject("scripting.filesystemobject").opentextfile(folderPath & Filename).readall
End Sub |
Vuoi Approfondire?