Citire fisiere Excel 2007 (Office Open XML) cu VBA 2003

Citire fisiere Excel 2007 (Office Open XML) cu VBA 2003

Mesajde smcsa » Lun Mar 01, 2010 4:45 pm

Am un fisier care se exporta din programul de contabilitate. Structura fisierului este Office Open XML (am dedus asta cand, cu toate ca are extensia xls, 2007 mi l-a deschis dupa o atentionare ca nu corespunde structura interna cu extensia). Presupun ca programul de export din contabilitate da extensia xls automat :roll: sau persoana care a facut exportul l-a salvare i-a zis cutare.xls (ca eu ii cerusem sa-mi faca un export in xls), programul exportand de fapt xml, in ideea ca e universal.
La o vizualizare cu un viewer am vazut ca primele caractere sunt PK, deci am schimbat extensia in zip si am intrat in toata minunatia de structura XML.
Problema e urmatoarea: eu trebuie sa citesc cu VBA datele din acel fisier, sa le prelucrez si sa le pun intr-un alt xls. Totul se face in 2003. Datele nu sunt complicate (client,cod produs, denumire produs, cantitate, data si agent), fara formule. Pana ajung la locul faptei sa vad de fapt ce si cum cu exportul asta (poate stie csv sau xls nativ), ce varianta am de a citi din VBA 2003 ? M-am gandit sa citesc fisierul Sheet1.xml din container (fiind un export intotdeauna datele vor fi in Sheet1 si incep cu capul de tabel din A1), dar ma apucă bâţul pana identific tot ce trebuie si poate mai las ceva pe din-afara si ar fi nasol sa nu puste cu conta.
Ultima oară modificat de smcsa pe Lun Mar 01, 2010 8:06 pm, modificat 1 dată în total.
Motiv: Modificat titlul, sa fie mai explicit pentru ceilalti
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesajde Dr.Excel » Lun Mar 01, 2010 6:24 pm

1. sa inteleg ca poti sa extragi xml-ul din zip? adica sa faci manipularea doar asupra XML-ului nu si a zip-ului
2. poti sa ne atasezi aici fisierul cu pricina?

citirea programatica a datelor dintr-un XML se poate face printr-un com (MSXML)
Dr.Excel
MCT, MCITP
MOS Master Instructor
IT Learning
Avatar utilizator
Dr.Excel
Site Admin
Site Admin
 
Mesaje: 1915
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest

Re: Citire Office Open XML cu VBA 2003

Mesajde smcsa » Lun Mar 01, 2010 6:48 pm

1. Da, cred ca as putea sa extrag Sheet1.xml (n-am studiat, dar banui ca cu ceva shell, api pot sa extrag un fisier dintr-o arhiva). Pana acum am gasit ceva pe MSDN, dar trebuie sa studiez mai atent.
2. Nu pot si n-are rost. Structura e la fel ca intr-un xlsx, adica am \xl\worksheets\sheet1.xml calea pana la definititia sheet-ului care ma intereseaza, in rest toata structura e identica (mai putin CustomUI si userCustomization.
Am vazut ca, de exemplu, Ribbon Designer scoate din zip customUI, deci banui ca si eu va trebui sa scot sheet1.xml si sa-l citesc.
Ce ma streseaza este sa nu-mi scape ceva pe dinafara din toata structura aia (eu de fapt trebuie sa inlocuiesc munca de introducere manuala a datelor din conta, care acum se face "romaneste" - listare si introducere de pe lista - iar daca apar greseli / omisiuni in capul meu se sparg "ca asa cu greseli stiam si noi"), de aceea ma gandeam ca poate a inventat deja cineva roata in domeniul asta si e pe undeva o procedura care sa-mi citeasca (chiar si numai) sheet1.xml
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesajde gecs » Lun Mar 01, 2010 7:11 pm

N-am inteles eu bine, sau e un fisier Open Office?
http://en.wikipedia.org/wiki/OpenDocument
Daca are extensia .ods e fisiser de OO Calc - echivalentul Excel-ului
Avatar utilizator
gecs
Moderator
Moderator
 
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Citire Office Open XML cu VBA 2003

Mesajde Dr.Excel » Lun Mar 01, 2010 7:12 pm

dar nu ar fi mai bine sa instalezi office 2007 compatibility pack, astfel vei putea sa folosesti com-ul standard Excel (fara shell pt zip, respectiv MSXML pt manipularea programatica a XML-ului)

adica instalezi frumos office 2007 compatibility pack (gratuit), apoi vei putea manipula clasic xls-ul respectiv (chiar daca are structura de 2007) :)

Cod: Selectaţi tot
Private Sub Form_Load()
   Dim cPart As Range
   Dim cLoc As Range
   Dim oExcel As Excel.Application
   Dim oBook As Workbook
   Dim oSheet As Worksheet
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Open("C:\CarteaMea.xls(x)", , False)
   Set oSheet = oBook.Worksheets("FoaiaMea")
   For Each cPart In oSheet.Range("RangeulMeuDeCelule")
        ... faci ce vrei cu acele celule
   Next cPart
End Sub

ce zici?
Dr.Excel
MCT, MCITP
MOS Master Instructor
IT Learning
Avatar utilizator
Dr.Excel
Site Admin
Site Admin
 
Mesaje: 1915
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest

Re: Citire Office Open XML cu VBA 2003

Mesajde smcsa » Lun Mar 01, 2010 7:22 pm

gecs scrie:N-am inteles eu bine, sau e un fisier Open Office?
http://en.wikipedia.org/wiki/OpenDocument


E un fisier Office Open XML (banui, ca n-am stat sa studiez exact ce si cum). Daca ii schimb extensia in xlsx, Excel 2007 il deschide, daca schimb in ods OpenOffice zice ca e corupt si apoi nu il poate repara. Si ca structura interna a zip-ului e ientica cu cea de la xlsx, de aia zic e ca e varianta MS a XML.

Dr.Excel scrie:dar nu ar fi mai bine sa instalezi office 2007 compatibility pack, astfel vei putea sa folosesti com-ul standard Excel (fara shell pt zip, respectiv MSXML pt manipularea programatica a XML-ului)


Ei, asta nu stiam eu, daca dupa instalarea compatibility pack pot sa-l citesc din VBA 2003 ca pe un xls de 2003. Ma gandisem la asta si era pe lista de incercat.
Multumim de ajutor, daca merge, bag un tutorial, ceva, sa afle si comunitatea care sta cu sufletul la gura :D
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesajde smcsa » Lun Mar 01, 2010 7:24 pm

LE: si poate am si vre-o functie care sa testeze daca e instalat pack-ul, asta inainte de a incerca sa-l deschida
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesajde Dr.Excel » Lun Mar 01, 2010 7:28 pm

vreo cheie ceva in registry
Dr.Excel
MCT, MCITP
MOS Master Instructor
IT Learning
Avatar utilizator
Dr.Excel
Site Admin
Site Admin
 
Mesaje: 1915
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest

Re: Citire Office Open XML cu VBA 2003

Mesajde Dr.Excel » Lun Mar 01, 2010 7:29 pm

Cod: Selectaţi tot
Dim WSHShell, RegKey, rKeyWord, Result
Set WSHShell = CreateObject("WScript.Shell")
RegKey ="HKEY_CLASSES_ROOT\Installer\Products\00002109020090400000000000F01FEC\"
On Error Resume Next
rKeyWord = WSHShell.RegRead(RegKey & "ProductName")
If rKeyWord = "Compatibility Pack for the 2007 Office system" Then
MsgBox "Este"
Else
MsgBox "Nu este"
End If


tot iti placea tie shell-ul :)
Dr.Excel
MCT, MCITP
MOS Master Instructor
IT Learning
Avatar utilizator
Dr.Excel
Site Admin
Site Admin
 
Mesaje: 1915
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest

Re: Citire Office Open XML cu VBA 2003

Mesajde smcsa » Lun Mar 01, 2010 7:37 pm

Dr.Excel scrie:tot iti placea tie shell-ul :)


Multumim. Pai la cate bat-uri am facut in DOS.... :lol:
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Următorul

Înapoi la Visual Basic for Application (VBA) cu Excel - Intrebari tehnice

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator