U pitanju je .NET web aplikacija. Potrebno je da se uradi konverzija iz Excel file-a u XML. Neki savet kako je najbolje i najlakse to uraditi. Hvala.
Konverzija iz XLS-a u XML
Zaključano
Zakačeno
Mozes da napravis select nad sheet-om u xls kao nad tabelom u db i da napunis DataSet iz kojeg mozes dobiti lako xml .
Ispod je primjer za konekciju i upit .
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
Ispod je primjer za konekciju i upit .
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
I moje iskustvo potvrdjuje ovu preporuku.
Mozes lako da iscitas sve sheets iz nekog Excel fajla, pa za jedan po jedan kreiras novu tabelu u dataset i na kraju ga samo prebacis u XML. Prosto k'o pasulj. Ima cak i par dobrih primera za citanje Excel na netu ovim pristupom koji ti je kleo preporucio.
Mozes lako da iscitas sve sheets iz nekog Excel fajla, pa za jedan po jedan kreiras novu tabelu u dataset i na kraju ga samo prebacis u XML. Prosto k'o pasulj. Ima cak i par dobrih primera za citanje Excel na netu ovim pristupom koji ti je kleo preporucio.
Tja, ali sa druge strane, ja ti ne bih preporucio da koristis OLEDB za citanje excela iz sledeceg razloga:
problem nastaje sa intermixed kolonama, jer OLEDB provider uzima prvih osam redova i na osnovu njih zakljucuje kojeg je tipa kolona. Tako da ako imas kolonu gde su u prvih osam redova brojevi, a od devete idu stringovi nastaje picvajz jer tu kolonu tretira da je numerickog tipa. Ovo se moze zaobici tako sto ces u registry-u da promenis koliko ce redova da 'skenira', sto je niti pouzdano niti prakticno, ili da napravis fajl sa shemom.
Ako pravis WinForm aplikaciju, ja bih pre koristio Excelov COM ili VS Tools for Office.
problem nastaje sa intermixed kolonama, jer OLEDB provider uzima prvih osam redova i na osnovu njih zakljucuje kojeg je tipa kolona. Tako da ako imas kolonu gde su u prvih osam redova brojevi, a od devete idu stringovi nastaje picvajz jer tu kolonu tretira da je numerickog tipa. Ovo se moze zaobici tako sto ces u registry-u da promenis koliko ce redova da 'skenira', sto je niti pouzdano niti prakticno, ili da napravis fajl sa shemom.
Ako pravis WinForm aplikaciju, ja bih pre koristio Excelov COM ili VS Tools for Office.
Potpis
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
Slazem se. Da bi tretirao excel kao bazu (sto kacenje sa jet i jeste) sam fajl treba da bude struktuiran.
Evo i jedno komercijalno riješenje http://www.componentone.com/.
Kreiras xls fajl i zapamtis ga kao html
Hvala, uspeo sam da kreiram XML uz pomoc Jet-a.
SheetName je uvek isto tako da nema potrebe (za sad), za GetSheetNames funkcijom.
E sad, ja bih iz stringa (ne iz file-a) da uzimam vrednosti pojedinih elemenata XML-a. Pokusavam sa:
Kad pogledam sadrzaj xList.InnerText vidim sadrzaj celog stringa strName, a ja zelim samo pojedine elemente, odnosno redom element po element.
Oblik XML-a je ovakav:
Ovako imamo max do <F6> elementa. Nekad je neki od F-ova izostavljen (ukoliko je sadrzaj celije u Excelu prazan).
Znaci, kako redom da dobijem sadrzaj F-ova jednog po jednog pa da ih onda obradim?
SheetName je uvek isto tako da nema potrebe (za sad), za GetSheetNames funkcijom.
E sad, ja bih iz stringa (ne iz file-a) da uzimam vrednosti pojedinih elemenata XML-a. Pokusavam sa:
Code:
XmlDocument xd = new XmlDocument();
xd.LoadXml(strName);
XmlNodeList xList = xd.GetElementByTagName("neko_ime");
...
XmlDocument xd = new XmlDocument();
xd.LoadXml(strName);
XmlNodeList xList = xd.GetElementByTagName("neko_ime");
...
Kad pogledam sadrzaj xList.InnerText vidim sadrzaj celog stringa strName, a ja zelim samo pojedine elemente, odnosno redom element po element.
Oblik XML-a je ovakav:
Code:
<Root>
<Element>
<F1>nesto</F1>
<F2>nesto1</F2>
<F3>nesto2</F3>
</Element>
<Element>
<F1>nesto</F1>
<F2>nesto1</F2>
<F3>nesto2</F3>
<F4>nesto3</F4>
</Element>
...
...
</Root>
<Root>
<Element>
<F1>nesto</F1>
<F2>nesto1</F2>
<F3>nesto2</F3>
</Element>
<Element>
<F1>nesto</F1>
<F2>nesto1</F2>
<F3>nesto2</F3>
<F4>nesto3</F4>
</Element>
...
...
</Root>
Ovako imamo max do <F6> elementa. Nekad je neki od F-ova izostavljen (ukoliko je sadrzaj celije u Excelu prazan).
Znaci, kako redom da dobijem sadrzaj F-ova jednog po jednog pa da ih onda obradim?