zapis v txt datoteko
zapis v txt datoteko
hojla
vprašal bi sledeče:
imam delovni zvezek xls.želel bi,da vsakič ko ga odprem,mi to zapiše v datoteko "c:/ podatki.txt " in sicer datum in čas.podatki naj bi se nalagali
v stolpec,torej en pod drugem.upam,da zadeva ni pretežka za forum.
za odgovor se zahvaljujem.
lp rick
vprašal bi sledeče:
imam delovni zvezek xls.želel bi,da vsakič ko ga odprem,mi to zapiše v datoteko "c:/ podatki.txt " in sicer datum in čas.podatki naj bi se nalagali
v stolpec,torej en pod drugem.upam,da zadeva ni pretežka za forum.
za odgovor se zahvaljujem.
lp rick
Koda: Izberi vse
Private Sub Workbook_Open()
Open "C:\Podatki.txt" For Append As #1
Print #1, "Odprto", Date, Time
Print #1, "====================================" 'Za boljšo preglednost
Close #1
End Sub
pozdravljeni
glede na kodo,ki ste mi jo poslali bi imel še
eno podvprašanje:
vaša koda
zanima me,če lahko v to datoteko vključim(zapišem) tudi vse podatke
ki so na listu 1 v tem delovnem zvezku.
za odgovor se najlepše zahvaljujem.
lp rick
glede na kodo,ki ste mi jo poslali bi imel še
eno podvprašanje:
vaša koda
torej,z odprtjem excela sprožim to kodo,ki mi zapiše podatke v txt datoteko.Private Sub Workbook_Open()
Open "C:\Podatki.txt" For Append As #1
Print #1, "Odprto", Date, Time
Print #1, "====================================" 'Za boljšo preglednost
Close #1
End Sub
zanima me,če lahko v to datoteko vključim(zapišem) tudi vse podatke
ki so na listu 1 v tem delovnem zvezku.
za odgovor se najlepše zahvaljujem.
lp rick
Pozdravljeni,
Da se tudi to. Poizkusil sem z snemanjem makra in mi je kar dobro uspelo. Rabil bi nekaj več podatkov: ali naj bi se zmeraj kopiralo vse kar je na listu1, ali pa vedno samo določeno območje celic? Vedno isto območje, ali pa bi vedno sproti določali kaj naj se prepiše v txt datoteko. Sicer ne vem kaj vam to bo, pa tudi ne vem, če vam bo oblika v txt datoteki ravno všeč? Včasih vse skupaj malo čudno izpade in bi morali popravljati obliko txt datoteke. Sporočite, pa vam bomo skušali pomagati.
Morda je celo najlažje, da podatke iz zvezka kopirate, odprete txt datoteko in prilepite?
lp,
cedra
Da se tudi to. Poizkusil sem z snemanjem makra in mi je kar dobro uspelo. Rabil bi nekaj več podatkov: ali naj bi se zmeraj kopiralo vse kar je na listu1, ali pa vedno samo določeno območje celic? Vedno isto območje, ali pa bi vedno sproti določali kaj naj se prepiše v txt datoteko. Sicer ne vem kaj vam to bo, pa tudi ne vem, če vam bo oblika v txt datoteki ravno všeč? Včasih vse skupaj malo čudno izpade in bi morali popravljati obliko txt datoteke. Sporočite, pa vam bomo skušali pomagati.
Morda je celo najlažje, da podatke iz zvezka kopirate, odprete txt datoteko in prilepite?
lp,
cedra
pozdravljen Cedra
najprej hvala za vaš trud.
torej takole:
tiste celice,ki so označene(list1) ,naj prekopira v txt datoteko.
(pravilno ste predvidevali,kajti ne bo vedno enako območje celic).
ta makro bom nato pripel v BEFORE CLOSE.torej,bi se kopiralo pri zaprtju zvezka.no,meni niti snemanje tega makra ne uspe.
upam,da mi boste še pomagali.
za vaš odgovor se najlepše zahvaljujem.
lp rick
najprej hvala za vaš trud.
torej takole:
tiste celice,ki so označene(list1) ,naj prekopira v txt datoteko.
(pravilno ste predvidevali,kajti ne bo vedno enako območje celic).
ta makro bom nato pripel v BEFORE CLOSE.torej,bi se kopiralo pri zaprtju zvezka.no,meni niti snemanje tega makra ne uspe.
upam,da mi boste še pomagali.
za vaš odgovor se najlepše zahvaljujem.
lp rick
Tole sem spravil skupaj:
Preizkusite zgornjo kodo!
Deluje pa tako, da tisto kar boste označili oz. selektirali, se vam bo zapisalo v txt datoteko "Podatki" na C-ju, kjer se že zapisuje kdaj je bil zvezek odprt. Kot sem že zapisal v prejšnem prispevku, ne vem, če vam bo zapis v txt datoteki oblikovno ustrezal. Opazil sem še nekaj, da pri ponovnem zapisu vse šičnike in šumnike spremeni v druge znake (?), vsaj meni jih. Morda bo pri vas drugače. Zakaj to naredi pa je že vprašanje za koga bolj usposobljenega, meni žal zmanjka!
Morda bi bilo kodo boljše pripeti na kakšen Gumb, kot pa na Before close.
Upam, da sem vam kljub temu kaj pomagal...
lp,
cedra
Koda: Izberi vse
Sub Zapis_v_tekst_datoteko()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Selection.Copy
ChDir "C:\"
Workbooks.OpenText Filename:="C:\Podatki.txt", Origin:=932, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False _
, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:= _
False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWindow.Close
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Deluje pa tako, da tisto kar boste označili oz. selektirali, se vam bo zapisalo v txt datoteko "Podatki" na C-ju, kjer se že zapisuje kdaj je bil zvezek odprt. Kot sem že zapisal v prejšnem prispevku, ne vem, če vam bo zapis v txt datoteki oblikovno ustrezal. Opazil sem še nekaj, da pri ponovnem zapisu vse šičnike in šumnike spremeni v druge znake (?), vsaj meni jih. Morda bo pri vas drugače. Zakaj to naredi pa je že vprašanje za koga bolj usposobljenega, meni žal zmanjka!
Morda bi bilo kodo boljše pripeti na kakšen Gumb, kot pa na Before close.
Upam, da sem vam kljub temu kaj pomagal...
lp,
cedra
Pozdravljeni
Ja malo dlje je trajalo, saj veste 1. maj, pa prosti dnevi...
Poizkusil vam bom razložiti kodo:
makro kopira kar ste označili na poljubnem listu, nato odpre in uvozi txt file , v vašem primeru "Podatki", v Excel na poseben list, poišče zadnjo polno vrstico v koloni "A", se pomakne za eno vrstico navzdol in prilepi kar ste kopirali. Zapre txt file in makro je končan!
podrobneje:
Upam, da vam je sedaj bolj jasno in da sem vam razumljivo razložil kako in kaj
Žilica mi ni dala miru in na netu sem našel, kako se stvari lotevajo profiji. Kodo bom prilepil popoldne, ker jo nimam na tem PC na katerem pišem. In lahko boste primerjali...
Jao, koliko sem se razpisal, upam da ne bom kregan od admina...
lp,
cedra
Ja malo dlje je trajalo, saj veste 1. maj, pa prosti dnevi...
Naj odgovorim. makro sem prvo posnel, zbrisal nepotrebno in dodal, napisal vrstice kode, ki se mi zdijo potrebne. Naj najprej povem, da je moja koda čisto amaterska, saj to tudi sem, saj se tega lotevam povsem ljubiteljsko in bi se verjetno kakšen profi programer, zgrozil nad kodo. Zavedam se, da je napisana brez vseh spremenljivk, ki bi jih profi vedel kam in kako postaviti v kodo. Je žal tako, da sem malo starejši in takrat, ko sem hodil v šolo, o računalništvu, programiranju ni bilo niti govora... No, glavno da delarick napisal/-a: P.S.ni mi jasno,kako ste posneli ta makro..
Poizkusil vam bom razložiti kodo:
makro kopira kar ste označili na poljubnem listu, nato odpre in uvozi txt file , v vašem primeru "Podatki", v Excel na poseben list, poišče zadnjo polno vrstico v koloni "A", se pomakne za eno vrstico navzdol in prilepi kar ste kopirali. Zapre txt file in makro je končan!
podrobneje:
Koda: Izberi vse
Application.ScreenUpdating = False
' dodano, da se prepreči osveževanje ekrana, da ne miglja in ne kaže kaj sploh makro dela. Tudi izvajanje je zaradi tega hitrejše
Application.DisplayAlerts = False
' dodano, to je zato, da Excel pri zapiranju txt fila ne teži z oknom o potrjevanju sprememb v txt filu, pa tudi makro bi se ustavil, dokler ne potrdite ali prekličete okna o spremembah
Selection.Copy
' posneto, kopiranje izbranega
ChDir "C:"
Workbooks.OpenText Filename:="C:\Podatki.txt", Origin:=932, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlNone, ConsecutiveDelimiter:=False _
, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:= _
False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
'posneta klobasa, kjer excel sprašuje, kako, na kakšen način naj se podatki txt fila, prenesejo na začasni list. Verjetno veliko stvari nepotrebnih, oz bi jih lahko spustili, če točno veš kaj potrebuješ
ActiveSheet.Range("A65536").End(xlUp).Offset(1, 0).Select
'dodano, iskanje zadnje polne vrstice v koloni A in pomik za eno vrstico navzdol
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWindow.Close
Application.CutCopyMode = False
'posneto, verjetno vam je jasno, kaj pomenijo
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'dodano, osveževanje ekrana spet vključimo, ravno tako tudi vsa pojavna okna, opozorila in konec
Žilica mi ni dala miru in na netu sem našel, kako se stvari lotevajo profiji. Kodo bom prilepil popoldne, ker jo nimam na tem PC na katerem pišem. In lahko boste primerjali...
Jao, koliko sem se razpisal, upam da ne bom kregan od admina...
lp,
cedra
pozdravljen
lepo ste tole vse napisali,naj vas pri tem potolažim ,da tudi sam nisem več tako rosno mlad.nekateri bi zagotovo rekli,da to ni opravičilo...kar se tiče makrojev,pa sem še bolj "kratek"kot
vi,sam zagotovo tega nebi spravil skupaj.snemanje na samim excel listu mi še nekako gre,ko pa grem v txt datoteko pa me ustavi,nevem zakaj.pom pregruntal vašo zadevo.
zaenkrat pač ne znam.no,da se tudi sam ne bom preveč "razpisal",bi se še enkrat
zahvalil za vašo izčrpno razlago.upam ,da si bomo še "helpali".
lp rick
ps:kje na netu ste našli ,kako profiji strežejo tej stvari?
lepo ste tole vse napisali,naj vas pri tem potolažim ,da tudi sam nisem več tako rosno mlad.nekateri bi zagotovo rekli,da to ni opravičilo...kar se tiče makrojev,pa sem še bolj "kratek"kot
vi,sam zagotovo tega nebi spravil skupaj.snemanje na samim excel listu mi še nekako gre,ko pa grem v txt datoteko pa me ustavi,nevem zakaj.pom pregruntal vašo zadevo.
zaenkrat pač ne znam.no,da se tudi sam ne bom preveč "razpisal",bi se še enkrat
zahvalil za vašo izčrpno razlago.upam ,da si bomo še "helpali".
lp rick
ps:kje na netu ste našli ,kako profiji strežejo tej stvari?
Obljuba dela dolg:
Za vaš problem sem našel na netu kodo, ki sem jo malce spremenil na dveh, treh mestih, da je ustrezna vaši želji:
Zgornje kode ne boste videli med makri (ALT+ F osem), in tudi zagnati je ne morete direktno (F5), ampak jo zaženete s spodnjim makrom!
Sedaj pa lahko malo experimentirate; v vrstici:
lahko spremenite ime txt datoteke, kjer se naj podatki zapišejo; če datoteka še ne obstaja, se ustvari. Med obema narekovajema spreminjate izgled znakov seperatorja (trenutno <>), lahko naredite samo par presledkov in znakov ne bo, ampak le prazen prostor med zapisi v txt datoteki. Najbolj zanimiv pa je tisti False, ki ga lahko spremenite v True;
če je tako kot zdaj: False, potem vam bo v txt datoteko pripel vse podatke na listu, če pa False spremenite v True, pa vam bo v txt datoteko vstavil samo podatke, ki jih boste označili. Torej po želji...
Original kodo si lahko ogledate na strani, ki zapisana med kodo in primerjajte z malenkostno popravljeno zgoraj
Če bi še vedno želeli pripeti stvar na Before close, pa prilepite tole:
To bi bilo vse, pa kaj poročajte kako se obnese profi varianta in ali vam ustreza!
lp,
cedra
Za vaš problem sem našel na netu kodo, ki sem jo malce spremenil na dveh, treh mestih, da je ustrezna vaši želji:
Koda: Izberi vse
Public Sub ExportToTextFile(FName As String, _
Sep As String, SelectionOnly As Boolean)
'Kodo našel na:
'http://www.cpearson.com/excel/imptext.htm
'in malenkost priredil!
Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim StartCol As Integer
Dim EndCol As Integer
Dim CellValue As String
Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile
If SelectionOnly = True Then
With Selection
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
Else
With ActiveSheet.UsedRange
StartRow = .Cells(1).Row
StartCol = .Cells(1).Column
EndRow = .Cells(.Cells.Count).Row
EndCol = .Cells(.Cells.Count).Column
End With
End If
Open FName For Append As #FNum
For RowNdx = StartRow To EndRow
WholeLine = ""
For ColNdx = StartCol To EndCol
If Cells(RowNdx, ColNdx).Value = "" Then
CellValue = ""
Else
CellValue = Cells(RowNdx, ColNdx).Text
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
Print #FNum, WholeLine
Next RowNdx
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum
End Sub
Koda: Izberi vse
Sub Zapisovanje_v_txt_file()
ExportToTextFile "c:\Podatki.txt", " < > ", False
End Sub
Koda: Izberi vse
ExportToTextFile "c:\Podatki.txt", " < > ", False
če je tako kot zdaj: False, potem vam bo v txt datoteko pripel vse podatke na listu, če pa False spremenite v True, pa vam bo v txt datoteko vstavil samo podatke, ki jih boste označili. Torej po želji...
Original kodo si lahko ogledate na strani, ki zapisana med kodo in primerjajte z malenkostno popravljeno zgoraj
Če bi še vedno želeli pripeti stvar na Before close, pa prilepite tole:
Koda: Izberi vse
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Zapisovanje_v_txt_file
End Sub
lp,
cedra
Kot sem že napisal, zanimajo me vaše izkušnje z makrom, mojim ali profi varianta. Želel sem samo prikazati razliko med profi in amatersko rešitvijo problema! Sicer pa, kot je že napisal "admin" v knjigi, ne spomnim se točnega naslova, zato ga tudi ne bom navajal:("Snemajte, snemajte...in še enkrat snemajte)
lp.
cedra
lp.
cedra
pozdravljen cedra
seveda,seveda,snemanje,to še nekako gre...
ko sva se že toliko "zmenla",bi imel še eno podvprašanje glede prenosa
podatkov iz excela v txt.
poznate morda ukaz,ki bi vse podatke,ki so že v datoteki txt izbrisal in nato prilepil to, kar sem nazadnje izbral in kopiral?torej zanimajo me le
zadnji podatki,predhodni pa,kot sem že rekel naj se izbrišejo.
to bi bilo nekakšno osveževanje podatkov.seveda bi to sedaj rabil za nekaj povsem drugega.če imate idejo,bi je bil zelo vesel.
sicer pa,pomagali ste mi že toliko,da mi je kar malce nerodno...
za vaš trud se vam zahvaljujem.
lp rick
seveda,seveda,snemanje,to še nekako gre...
ko sva se že toliko "zmenla",bi imel še eno podvprašanje glede prenosa
podatkov iz excela v txt.
poznate morda ukaz,ki bi vse podatke,ki so že v datoteki txt izbrisal in nato prilepil to, kar sem nazadnje izbral in kopiral?torej zanimajo me le
zadnji podatki,predhodni pa,kot sem že rekel naj se izbrišejo.
to bi bilo nekakšno osveževanje podatkov.seveda bi to sedaj rabil za nekaj povsem drugega.če imate idejo,bi je bil zelo vesel.
sicer pa,pomagali ste mi že toliko,da mi je kar malce nerodno...
za vaš trud se vam zahvaljujem.
lp rick
Nič lažjega: V profi varianti spodnjo vrstico zamenjajte, oz še bolje spremenite vrstico
v opombo(z opuščajem pred vrstico) in tja prilepite še tole vrstico:
Zdaj lahko izbirate kako se bo zapisovalo, ali se bo dodajalo ali pa prepisovalo.. odvisno katero vrstico boste dali v "opombo"!
lp,
cedra
Koda: Izberi vse
Open FName For Append As #FNum
Koda: Izberi vse
Open FName For Output Access Write As #FNum
lp,
cedra