Citire fisiere Excel 2007 (Office Open XML) cu VBA 2003
Citire fisiere Excel 2007 (Office Open XML) cu VBA 2003
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 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.
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 Lun Mar 01, 2010 8:06 pm de către smcsa, modificat 1 dată în total.
Motiv: Modificat titlul, sa fie mai explicit pentru ceilalti
Motiv: Modificat titlul, sa fie mai explicit pentru ceilalti
- Dr.Excel
- Site Admin
- Mesaje: 1997
- Membru din: Sâm Ian 24, 2009 1:45 pm
- Localitate: Bucharest
- Contact:
Re: Citire Office Open XML cu VBA 2003
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)
2. poti sa ne atasezi aici fisierul cu pricina?
citirea programatica a datelor dintr-un XML se poate face printr-un com (MSXML)
MCT, MCITP
MOS Master Instructor
IT Learning
Re: Citire Office Open XML cu VBA 2003
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
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
Re: Citire Office Open XML cu VBA 2003
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
http://en.wikipedia.org/wiki/OpenDocument
Daca are extensia .ods e fisiser de OO Calc - echivalentul Excel-ului
- Dr.Excel
- Site Admin
- Mesaje: 1997
- Membru din: Sâm Ian 24, 2009 1:45 pm
- Localitate: Bucharest
- Contact:
Re: Citire Office Open XML cu VBA 2003
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)
ce zici?
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
MCT, MCITP
MOS Master Instructor
IT Learning
Re: Citire Office Open XML cu VBA 2003
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.gecs scrie:N-am inteles eu bine, sau e un fisier Open Office?
http://en.wikipedia.org/wiki/OpenDocument
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.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)
Multumim de ajutor, daca merge, bag un tutorial, ceva, sa afle si comunitatea care sta cu sufletul la gura
Re: Citire Office Open XML cu VBA 2003
LE: si poate am si vre-o functie care sa testeze daca e instalat pack-ul, asta inainte de a incerca sa-l deschida
- Dr.Excel
- Site Admin
- Mesaje: 1997
- Membru din: Sâm Ian 24, 2009 1:45 pm
- Localitate: Bucharest
- Contact:
Re: Citire Office Open XML cu VBA 2003
vreo cheie ceva in registry
MCT, MCITP
MOS Master Instructor
IT Learning
- Dr.Excel
- Site Admin
- Mesaje: 1997
- Membru din: Sâm Ian 24, 2009 1:45 pm
- Localitate: Bucharest
- Contact:
Re: Citire Office Open XML cu VBA 2003
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
MCT, MCITP
MOS Master Instructor
IT Learning
Re: Citire Office Open XML cu VBA 2003
Multumim. Pai la cate bat-uri am facut in DOS....Dr.Excel scrie: tot iti placea tie shell-ul