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

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

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

Mesaj de 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 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

Avatar utilizator
Dr.Excel
Site Admin
Site Admin
Mesaje: 1921
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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

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

Mesaj de 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
Dr.Excel
Site Admin
Site Admin
Mesaje: 1921
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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

Mesaj de 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

Avatar utilizator
Dr.Excel
Site Admin
Site Admin
Mesaje: 1921
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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: 1921
Membru din: Sâm Ian 24, 2009 1:45 pm
Localitate: Bucharest
Contact:

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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

smcsa
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Citire Office Open XML cu VBA 2003

Mesaj de 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:

Scrie răspuns

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