Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
PPC Energy

Chefi de la Antena 1 s-au intors ...

Camera conferinta Tenveo tevo-vl12u

Recomandare rulouri exterioare us...
 Telefon performant pe parte audio...

Aspecte legale https://registratu...

Filtru de apa curata apa de miner...

Unde gasesc borcane mari 5 - litr...
 sfat achiziție bicicleta pli...

NVIDIA Shield Programe Romania IP

Se opreste motorul in mers Golf 5

Probleme cu instalator Casa verde
 Linie vinetie mana stanga

Opriri și reporniri dese

Protectie soare/vizuala in interior

Tratament pt piele..canapea
 

Cum pot sa import anumite date dintr-un .rtf in tabel excel

- - - - -
  • Please log in to reply
15 replies to this topic

#1
NAlexQ

NAlexQ

    Member

  • Grup: Members
  • Posts: 589
  • Înscris: 21.07.2011
Buna ziua,

As vrea sa stiu daca este posibil si cum sa import dintr-un fisier .rtf anumite date intr-un excel.
Din bonurile fiscale pe care le export de pe o casa fiscala Datecs WP-50 ma intereseaza sa aduca doar ziua, ora, denumire produs, cantitate si pret.
Am atasat si fisier .rtf sa vedeti cum arata.

Attached Files



#2
eiffel

eiffel

    BusyWorm

  • Grup: Moderators
  • Posts: 68,483
  • Înscris: 15.06.2004
Doar cu un program sau script facut special ptr cazul tau si cu posibilitati de eroare daca se schimba vre-un camp.

#3
nixrohnson

nixrohnson

    Active Member

  • Grup: Members
  • Posts: 1,237
  • Înscris: 22.11.2022
Asta deschide fisierul si copiaza in memorie continutul (mai putin cele 2 rinduri cu ActiveSheet):
https://www.mrexcel....27/#post-216805

Apoi faci parse (extragi) datele:
https://stackoverflow.com/a/64687880

#4
NAlexQ

NAlexQ

    Member

  • Grup: Members
  • Posts: 589
  • Înscris: 21.07.2011
@eiffel ma gandeam ca poate exista ceva in excel. deci sa ma mut la "Programe Facute Noaptea Acasa" Posted Image
@nixrohnson ceva mai simplu nu ai, deoarece habar nu am Posted Image  ce sa fac cu ce mi-ai oferit tu.

#5
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 33,189
  • Înscris: 06.01.2007
Merge si folosind notepad++ mai intai pentru find/replace folosind regular expressions si apoi excel.
Merge si direct in excel, semiautomat, chiar si pentru un numar mare de bonuri fiscale. Astfel:
In coloana A, pui textul respectiv.
In coloana B, faci o functie care detecteaza inceputul unui nou bon fiscal.
In coloana C, faci o alta functie care scrie niste taguri. Acele taguri trebuie sa fie diferite pentru fiecare tip de linie din bonul fiscal, pentru a folosi informatia respectiva mai departe.
Pentru cazul in care numarul de produse difera de 1, tagul respectiv sa aiba sufix numeric, pe care sa-l folosesti mai departe la parsing.

In coloanele, D, E, F (cat e nevoie) scrii functiile care extrag informatiile din coloana A, functie de tagul C.
In coloana G, H, i...etc , faci functia care colecteaza toate liniile aferente unui bon in coloane. Coloanele corespunzatoare liniilor cu taguri cu sufix numeric le pui la sfarsit.
Sau, depinde de cum vrei sa-ti organizezi baza de date.
E mult mai simplu daca toate bonurile au un singur produs, dar ma indoiesc ca e asa.

#6
nixrohnson

nixrohnson

    Active Member

  • Grup: Members
  • Posts: 1,237
  • Înscris: 22.11.2022

View PostNAlexQ, on 17 ianuarie 2023 - 18:35, said:

@eiffel ma gandeam ca poate exista ceva in excel. deci sa ma mut la "Programe Facute Noaptea Acasa" Posted Image
@nixrohnson ceva mai simplu nu ai, deoarece habar nu am Posted Image  ce sa fac cu ce mi-ai oferit tu.

Ala e cel mai simplu - daca vrei sa faci singur.
Daca vrei sa rezolvi problema RAPID - apelezi la cineva care se pricepe. Ori pe bani, ori de cinste / ciubuc (prietenie).

#7
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 33,189
  • Înscris: 06.01.2007
Ti le aranjez eu, daca nu-s date sensibile acolo. Ceva perfect automat in excel nu prea merge, deoarece orice linie in plus sau ceva neprevazut, poate da peste cap totul.
Daca ai fi 100% sigur ca nu e o linie in plus, si totul merge conform patternului, iti pot face o foaie care sa desfaca informatiile alea de acolo, sa ti le puna pe o linie pentru fiecare bon fiscal.

#8
strongsss

strongsss

    Senior Member

  • Grup: Senior Members
  • Posts: 7,219
  • Înscris: 27.10.2007
CASEROLA CU CAPAC+PG
                 1 BUC. X 1.50= 1.50 A


vezi ca o linie de pe bon ca asta, are de fapt e scrisa pe doua randuri, iti strica destul de mult directia.

Edited by strongsss, 17 January 2023 - 19:34.


#9
nixrohnson

nixrohnson

    Active Member

  • Grup: Members
  • Posts: 1,237
  • Înscris: 22.11.2022
Nu conteaza ca e pe 1 sau 2 linii.
Cel mai important este ca stringurile de delimitare sa fie uniforme.
Adica notatiile pentru produse, sume, datele firmei, ale bonului......
Avind in vedere ca se modifica doar produsele si sumele, restul sint fixe, acolo ar putea aparea bube.
Dar si alea sint relativ usor de eliminat, produrul e produs, suma e suma....

Asta e partea importanta
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
MICI+PAINE+MUSTAR   4 BUC. X 5.00= 20.00 B
  ------------

Restul, cum ziceam, sint fixe.
Iar la articole e usor, incepe cu litera de la capat, se termina unde se termina cu "CIFRA SPATIU B"
Daca ultimul caracter nu este "CIFRA SPATIU B" si pe rindul urmator primul caracter e spatiu, inseamna ca e pe 2 rinduri, deci se face un rind..... bla bla bla

Edited by nixrohnson, 17 January 2023 - 20:16.


#10
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 33,189
  • Înscris: 06.01.2007
Urmeaza pasii si vei face ce trebuie.

1.Pregatit sheetul

Copii tot textul in coloana A.
Faci loc de cap de coloana(introduci o linie sus), dar in celula A1, scrii MULTUMIM!, adica textul de sfarsit de bon, prin copy/paste dintr-o celula ce contine acest lucru.
Deci linia A1 va contine "       MULTUMIM!", cu spatiile aferente.

2. Scris formulele pentru celulele din linia 2, incepand cu B2, C2, etc
- In celula B2, scrii 1 daca e inceput de bon si "" daca nu e, astfel =IF(RIGHT(A1,LEN("MULTUMIM!"))="MULTUMIM!",1,"")
- In celula C2, scrii numarul de produse aferent bonului curent astfel  =IF(B2=1,MATCH("   ------------",A9:A24,0),""). Ideea e sa cauti ------ incepand de la A9, pana la A24. Formula accepta un numar maxim de 24-9-15 produse, chestie care ar trebui sa fie suficient. Poti extinde, daca nu e suficient.
- In celulele D2, E2, F2, trebuie sa extragi informatiile de la A3, A4, A5, etc. Formula e foarte simpla, testeaza doar daca B2=1, adica daca e inceput de bon =IF(B2=1,TRIM(A2),""),  =IF(B2=1,TRIM(A3),""), ... Toate coloanele in care vrei sa extragi informatii de dinainte de produse, respecta formula asta simpla.


- Numarul de produse fiind in C2, produsele P1, P2, P3...etc se extrag pe coloane succesive astfel:
P1: =IF(B2=1,A8,"")
P2: =IF(AND(B2=1,C2>1),A9,"")
P3: =IF(AND(B2=1,C2>2),A10,"")
P4: =IF(AND(B2=1,C2>3),A11,"")
si tot asa. daca ai mai multe produse. E bine sa lasi coloanele astea la sfarsit, fiind numar eventual variabil.



- Informatiile de dupa produse, trebuie shiftate cu numarul de produse din C2, astfel..
=IF(B2=1,INDEX(A10:A25,C2),"") pentru TOTAL LEI,
=IF(B2=1,INDEX(A11:A26,C2),"") pentru urmatoarea
=IF(B2=1,INDEX(A12:A27,C2),"") urmatoarea linie dupa produse si tot asa.
Poti folosi TRIM, RIGHT, LEFT, ca sa scapi de textul in plus, dar ideea e sa folosesti INDEX(....., C2) pentru a shifta cu valoarea din C2 linia de la care se citeste.
Toate informatiile de pe bon aflate dupa listarea produselor respecta formula asta. Difera zona de unde se incepe indexarea. Si eventual, daca vrei sa mai bagi ceva prin formula sa extraga strict o parte din informatie (TRIM, RIGHT, LEFT, etc)

3. Drag in jos
Ar trebui ca toate liniile care nu sunt la inceput de bon sa fie pline de spatii si doar linia corespunzatoare capului de bon sa contina informatii.


4. Scapi de liniile nule.
Dai copy la tot tableul, paste values in alt sheet si sortezi dupa una din coloane, sa-ti puna liniile nule la sfarsit. Copii liniile care contin informatii. Ar trebui sa fie egale cu numarul de bonuri

Poti sorta dupa coloana Nr.Crt. Pare ca ai o coloana care contine asa ceva. Daca nu, poti crea o keye de sortare dupa intre etapa 3 si 4.
Keya de sortare are rolul de a restabili ordinea initiala a bonurilor, daca e nevoie de asa ceva.


Metoda de mai sus e independenta de numarul bonurilor. La fel merge si pentru 47 cat ai tu, la fel merge si pentru 10000, pentru ca formulele sunt pe coloane, singura operatie pe linii e acel drag de la pasul 3.

#11
eiffel

eiffel

    BusyWorm

  • Grup: Moderators
  • Posts: 68,483
  • Înscris: 15.06.2004
Eu ma intreb daca acea casa de marcat nu exporta fisiere si in alte formate - gen csv...

#12
aaaa4567

aaaa4567

    Senior Member

  • Grup: Senior Members
  • Posts: 9,488
  • Înscris: 18.10.2011

View Posteiffel, on 17 ianuarie 2023 - 21:19, said:

Eu ma intreb daca acea casa de marcat nu exporta fisiere si in alte formate - gen csv...
Tocmai asta voiam sa scriu si eu. :D Ia cauta, initiator, precis s-au gandit si altii, doar contabilitatea & co nu e ceva romanesc.

Altfel, se poate face, dar gandeste-te ca daca acelei case i se face vreun update si exporta altfel, trebuie sa fii atent. :)

#13
NAlexQ

NAlexQ

    Member

  • Grup: Members
  • Posts: 589
  • Înscris: 21.07.2011
@eiffel si @aaaa4567 din pacate utilitarul de exportat bonurile fiscale nu ofera optiune de "format fisier" sa salvez, doar locatia unde sa se descarce.

Attached Files



#14
Pafarist

Pafarist

    Junior Member

  • Grup: Members
  • Posts: 189
  • Înscris: 01.06.2009
Cu puțină atenție/răbdare se poate rezolva...
Pe scurt, ai trei pași:
1. Într-un nou document Excel, trebuie să copiezi conținutul RTF-ului în prima coloană din foaia Sheet1.
2. Apoi trebuie să inserezi codul de mai jos în secțiunea VBA/Modules... a aceluiași document Excel.
3. Apoi execuți procedura „Procesare” și vei găsi în foaia „Bonuri” informațiile dorite

Pe lung, trebuie să faci cam așa:
1. Deschizi un fișier nou Excel. Acesta trebuie sa aibă primul sheet numit Sheet1, în a cărui primă coloană vei copia conținutul RTF-ului.

2. Copiezi în clipboard codul programului de mai jos (select-copy/Crtl-C)

Public bRow, aRow
Sub Procesare()
	Dim sht As Worksheet
	For Each sht In ThisWorkbook.Worksheets
	  If sht.Name = "Bonuri" Then found = True
	Next
	If found Then
	  Application.DisplayAlerts = False
	  Sheets("Bonuri").Delete
	  Application.DisplayAlerts = True
	End If
	Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
	ws.Name = "Bonuri"
	Sheets("Bonuri").Select
	Cells(1, 1).Value = "Data"
	Cells(1, 2).Value = "Ora"
	Cells(1, 3).Value = "Produs"
	Cells(1, 4).Value = "Cantitate"
	Cells(1, 5).Value = "U.M."
	Cells(1, 6).Value = "Pret"
	Sheets("Sheet1").Select
	Range("A1").Select
	bRow = 2
	aRow = 1
	While Cells(aRow, 1).Value <> ""
	   Proc_Bon
	Wend
	Sheets("Bonuri").Select
	Columns("A:F").Select
	Columns("A:F").EntireColumn.AutoFit
	Range("A1").Select
End Sub
Sub Proc_Bon()
txt_brut = Cells(aRow, 1).Value
p_data = 0
p_ora = 0
nr_prod = 0
While p_data * p_ora = 0 And txt_brut <> ""
  p_egal = InStr(txt_brut, "=")
  p_X = InStr(txt_brut, "X")
  p_data = InStr(txt_brut, "DATA:")
  p_ora = InStr(txt_brut, "ORA:")
  If p_egal * p_X > 0 Then 'avem linie cu pret, cantitate, valoare
	 pret = Val(Trim(Mid(txt_brut, p_X + 1, p_egal - p_X - 1))) ' pretul este intre X si =
	 p_UM = p_X - 2
	 While Mid(txt_brut, p_UM, 1) <> " "
	   p_UM = p_UM - 1
	 Wend
	 UnitM = Trim(Mid(txt_brut, p_UM + 1, p_X - p_UM - 1)) ' unitatea de masura este inainte de X
	 p_Cant = p_UM - 1
	 While Mid(txt_brut, p_Cant, 1) <> " "
	   p_Cant = p_Cant - 1
	 Wend
	 cantitate = Val(Trim(Mid(txt_brut, p_Cant, p_UM - p_Cant)))
	 If Left(txt_brut, 2) = "  " Then ' denumirea produsului este pe linia precedenta
	   produs = Trim(Cells(aRow - 1, 1).Value)
	 Else
	   produs = Trim(Mid(txt_brut, 1, p_Cant))
	 End If
	 ' ne mutam in Bonuri si punem linia produsului
	 Sheets("Bonuri").Select
	 Cells(bRow + nr_prod, 3).Value = produs
	 Cells(bRow + nr_prod, 4).Value = cantitate
	 Cells(bRow + nr_prod, 5).Value = UnitM
	 Cells(bRow + nr_prod, 6).Value = pret
	 nr_prod = nr_prod + 1
	 Sheets("Sheet1").Select
	 ' si revenim in Sheet1
  End If
  If p_data * p_ora > 0 Then ' avem linie cu data si ora - gata bonul
	ziua = Trim(Mid(txt_brut, p_data + 5, p_ora - p_data - 5))
	ora = Trim(Mid(txt_brut, p_ora + 4))
	 ' ne mutam in Bonuri si punem data/ora la toate produsele bonului
	 Sheets("Bonuri").Select
	 For i = 1 To nr_prod
	   Cells(bRow, 1).Value = ziua
	   Cells(bRow, 2).Value = ora
	   bRow = bRow + 1
	 Next
	 Sheets("Sheet1").Select
	 ' si revenim in Sheet1
  End If
  aRow = aRow + 1
  txt_brut = Cells(aRow, 1).Value
Wend
aRow = aRow + 7
End Sub


Apeși Alt-F8 pentru a crea o nouă macro-comandă (Dacă nu merge, fie ai o tastatură la care F1..F12 se activează apăsând suplimentar tasta Fn, fie trebuie să instalezi suportul VBA în Excel).
La „Macro Name” scrii un cuvânt oarecare (ex.Test) și apoi apeși butonul „Create”.
Vei intra în editorul de macrocomenzi.
Apesi Ctrl-A pentru a selecta cele 2-3 linii deja scrise și apoi apeși Delete pentru a le șterge.
În acel spațiu gol dai „Paste”/Ctrl-V pentru a pune codul din clipboard.

Inchizi editorul VBA.

3. Apoi executi procedura numită „Procesare” apăsând din nou Alt-F8 / click pe Procesare / click Run.

Vei vedea că a apărut un nou sheet, numit „Bonuri”, în care vei găsi datele solicitate.

Programul se bazează pe următoarele prezumții:
a. linia cu pret/valoare articol conține semnele „X” și „=”
b. linia cu data/ora conține șirurile "DATA:" și "ORA:" și este considerată sfârșitul de bonului.
c. toate sumele extrase sunt cu TVA inclus

Există diferite cote de TVA pentru diferite clase de articole.
Dacă doriți evidențierea lor separată, se poate modifica script-ul să includă la fiecare articol și cota de TVA aplicabilă.

#15
NAlexQ

NAlexQ

    Member

  • Grup: Members
  • Posts: 589
  • Înscris: 21.07.2011
Perfect.
Multumesc @maccip Posted Image a fost de mare folos varianta data de tine, reusisem sa parcurg vreo 70 de zile.
Si cu solutia lui @Pafarist Posted Image am reusit sa parcurg restul de zile cu mult mai mare usurinta.
Multumesc la amandoi.
You are the BEST  Posted Image   Posted Image

#16
aaaa4567

aaaa4567

    Senior Member

  • Grup: Senior Members
  • Posts: 9,488
  • Înscris: 18.10.2011

View PostNAlexQ, on 18 ianuarie 2023 - 10:19, said:

@eiffel si @aaaa4567 din pacate utilitarul de exportat bonurile fiscale nu ofera optiune de "format fisier" sa salvez, doar locatia unde sa se descarce.
Adopta solutia oferita mai sus (nu m-am uitat peste ea, doar ca principiu).

In plus, eu zic ca e bine sa iei legatura cu producatorul, sa le explici situatia - anume, ca iti trebuie importul datelor ca dataset, in format tabelar etc - si sa intrebi daca exista vreo solutie. Mi se pare greu de crezut ca nu s-au gandit, e o cerere frecventa. Sa ti-l exporte ca cvs, xls, xml, orice format structurat, in fine (deseori se ofera mai multe optiuni - asta e valabil pt orice generator de date, de ceva ani buni). Cu cat au mai multe cereri de o anumita natura, cu atat vor pune problema mai sus in problem list...

Problema poate aparea atunci cand, in urma unui update, se schimba formatul datelor, fie si cu putin :) Asa, daca ai un format standard, e mult mai sigur. Ideea e sa nu te trezesti in urma unui update ca ai |mai scapat niste inregistrari" si asta pe cateva luni inainte. Adica, pe scurt, iti trebuie o interfata definita ("contract de date").

Altfel spus, solutia e buna, merge, dar la nivel mic-mediu (ceea ce e si cazul, imi dau seama). In zonele mai "mari" s-ar ridica probleme ca cea pe care am zis-o. Nu vreau sa fiu cacotas, dar zic.

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate