Miksi XLSX–JSON-muunnos ei ole sama kuin XLSX–CSV
Kun viet Excel-tiedoston CSV-muotoon, kaikki solujen arvot muuttuvat merkkijonoiksi. CSV on tekstipohjainen tasoformaatti: jokainen rivi on yksi tekstirivi, ja solujen välissä on erotinmerkki. Excelin luvut, päivämäärät ja totuusarvot menettävät tietotyyppinsä. JSON sen sijaan on rakenteinen, tyypitetty muoto. Se tukee objekteja, taulukoita, lukuja, totuusarvoja (true, false) ja null-arvoa. Siksi XLSX–JSON-muunnoksessa solun alkuperäinen tietotyyppi voidaan säilyttää: jos solussa on luku, tuloksena on JSON-luku, ei lainausmerkeissä oleva merkkijono.
Tämä ei kuitenkaan tarkoita, että XLSX:n monimutkainen rakenne siirtyisi sellaisenaan JSONiin. Excel-tiedosto on zip-paketti, jonka sisällä on XML-tiedostoja: jokainen työkirjan välilehti, solutyypit, kaavat, muotoilut ja metatiedot tallentuvat omina XML-elementteinään. JSON ei tallenna muotoilua, solujen yhdistämistä tai kommentteja – se tallentaa vain datan. Siksi muunnoksessa kaikki solujen ulkoasu, fontit, reunukset ja värit häviävät. Samoin kaikki muut välilehdet kuin ensimmäinen jätetään pois.
Miten solutyypit kuvautuvat JSONiksi
Excel-tiedoston jokaisella solulla on tietotyyppi, joka on tallennettu XML-muodossa. Yleisimmät tyypit ovat:
| Excelin tallennustyyppi | JSON-ulostulo | Esimerkki solun arvosta |
|---|---|---|
| Numero (kokonaisluku tai desimaaliluku) | JSON-numero | 42, 3.1415, -7.99e2 |
| Totuusarvo | JSON-totuusarvo | true tai false |
| Päivämäärä / Aika | ISO 8601 -merkkijono | "2023-08-15T14:30:00.000Z" |
| Jaettu merkkijono / tekstisisältö | JSON-merkkijono | "Quarterly Report" |
| Tyhjä solu | Tyhjä merkkijono "" |
(ei mitään) |
| Virhe | JSON-merkkijono | "#DIV/0!" |
Päivämäärät ansaitsevat tarkemman tarkastelun. Excelissä ei ole natiivia JSON-päivämäärätyyppiä. Päivämääräsolu tallennetaan sarjanumerona (esim. 45144 elokuun 15. päivälle 2023), ja muunnin kirjoittaa sen ISO 8601 -muotoisena merkkijonona UTC-ajassa, kuten "2023-08-15T00:00:00.000Z". Jos tarvitset toisenlaisen muodon, sinun on jälkikäsiteltävä JSON. Sama koskee prosentteja ja valuuttoja – ne tallennetaan numeroina XLSX-tiedostoon, joten niistä tulee numeroita JSON-tiedostoon. Prosenttiarvo 12,5 % näkyy muodossa 0.125, ei "12.5%". Työkalu ei säilytä taustalla olevaa muotoilumaskia; se lukee vain tallennetun numeerisen arvon.
Totuusarvot tallennetaan XLSX-tiedostoon arvoina 1 tai 0 (totuusarvolipun kanssa). Jäsennin tulostaa suoraan true tai false, ei numeroa 1. Tämä vastaa JSON-määritystä ja välttää yleisen sekaannuksen, jossa "TRUE" nähdään merkkijonona.
Kaavoja ei lasketa. XLSX-tiedosto tallentaa sekä kaavan lausekkeen että viimeksi tallennetun arvon. Työkalu lukee vain tallennetun arvon. Jos avaat laskentataulukon, muutat solua ja tallennat ennen lataamista, tallennettu arvo heijastaa tätä muutosta. Mutta jos työkirja sisältää haihtuvia funktioita (NOW(), RAND()), joita ei laskettu uudelleen ennen tallentamista, tulostettu JSON käyttää vanhentunutta välimuistissa olevaa tulosta. Tämä on XLSX-muodon rajoitus itsessään – muunnostyökalu ei voi suorittaa Excelin laskentamoottoria uudelleen.
Vain ensimmäinen välilehti – miksi ja mitä tehdä, jos tarvitset muut
Työkalu lukee ainoastaan XLSX-tiedoston ensimmäistä välilehteä (worksheet). Peruste on yksinkertainen: JSON on yksi puurakenne, ja XLSX-työkirja on kokoelma itsenäisiä taulukoita. Useamman välilehden tapauksessa jokainen välilehti tuottaisi oman JSON-taulukkonsa, mikä vaatisi toisenlaista lähestymistapaa (esim. objektin, jossa avaimina ovat välilehtien nimet). Tämä työkalu on suunniteltu nopeaan yksittäiseen muunnokseen, joten se valitsee ensimmäisen välilehden.
Jos tarvitset dataa muilta välilehdiltä, käytännön ratkaisu on:
- Siirrä haluamasi välilehti ensimmäiseksi Excelissä ennen lataamista.
- Käytä työkalua, joka tukee välilehtien valintaa.
Tämä on myös hyvä tapa tarkistaa, että jokainen välilehti on suorakaiteen muotoinen taulukko ilman yhdistettyjä soluja tai tyhjiä rivejä.
Virhetilanteet ja rajoitukset
Muunnos toimii kokonaan selaimessa. Selaimesi jäsentää työkirjan – ZIP-paketin XML-osia – ja kirjoittaa muunnetun tulosteen laitteellesi. Mitään tavuja ei lähetetä palvelimelle. Tällä on kaksi seurausta:
- Tietosuoja: jos XLSX-tiedostosi sisältää arkaluonteisia tietoja – työntekijöiden palkkoja, asiakasluetteloita, taloudellisia ennusteita – se ei koskaan poistu koneeltasi. Latausvaihetta ei kirjata tai auditoida.
- Nopeus: tiedostoille, jotka ovat kokorajoituksen alapuolella, muunnos valmistuu muutamassa sekunnissa. Verkon viivettä ei ole.
Haittapuolena on, että selaimen muisti ja prosessointiteho asettavat ylärajan. Työkalu asettaa tiukat rajat: enintään 8 Mt tiedostoa kohden, enintään 10 000 riviä ja 200 saraketta taulukkoa kohden. Jos jokin raja ylittyy, muunnos pysähtyy ja näytetään asianmukainen virhe. Muunnos, joka kestää yli noin 12 sekuntia, pysäytetään myös viestillä ”Muunnos kestää liian kauan. Kokeile pienempää tiedostoa.”.
Työkalu näyttää tietyt virheilmoitukset tunnetuissa virhetilanteissa:
- ”Valitse CSV-, JSON- tai XLSX-tiedosto.” – valittu tiedosto ei ole CSV-, JSON- tai XLSX-tiedosto.
- ”Tätä Excel-tiedostoa ei voitu avata.” – XLSX on vioittunut, ei ole todellisuudessa ZIP-arkisto tai rikkoo OOXML-määritystä.
- ”Tässä tiedostossa ei ole taulukon rivejä.” – ensimmäinen välilehti on täysin tyhjä. Välilehti, jossa on vain otsikkorivi, ei ole virhe: se muunnetaan tyhjäksi taulukoksi (``).
- ”Tämä tiedosto on liian suuri. Käytä tiedostoa, jonka koko on alle ‹max›.” – tiedoston tavukoko ylittää 8 Mt rajan.
- ”Tätä tiedostoa ei voitu muuntaa.” – odottamaton virhe, joka ei vastaa tarkempaa virhettä.
- ”Muunnos peruutettu.” – peruutit muunnoksen, esimerkiksi tyhjentämällä valitun tiedoston sen ollessa käynnissä.
- ”Muunnos kestää liian kauan. Kokeile pienempää tiedostoa.” – muunnos kesti yli noin 12 sekunnin rajan, yleensä siksi, että työkirja on erittäin suuri.
Jos näet ”liian suuri” tai ”liian pitkä” -virheitä, rivien tai sarakkeiden määrän vähentäminen on ainoa korjauskeino. XLSX-tiedoston jakaminen pienempiin tiedostoihin ja kunkin tiedoston muuntaminen erikseen usein toimii.
Miten muunnos tapahtuu selaimessa – XLSX:n purku
XLSX-tiedosto on ZIP-arkisto, joka sisältää useita XML-tiedostoja:
[Content_Types].xml
_rels/.rels
xl/workbook.xml
xl/_rels/workbook.xml.rels
xl/worksheets/sheet1.xml
xl/sharedStrings.xml
xl/styles.xml
...
Muunnoksessa selain purkaa ZIP-paketin. Sitten se lukee xl/workbook.xml:stä välilehtien tiedot ja hakee xl/worksheets/sheet1.xml:n – tämä on ensimmäinen välilehti. sheet1.xml sisältää kaikki solut viittauksineen (esim. A1, B2). Solujen arvot saattavat olla joko suoraan solu-elementissä (inline string) tai viitata sharedStrings.xml:ään, jossa kaikki toistuvat merkkijonot on tallennettu tehokkuuden vuoksi. Muunnosohjelma kääntää nämä soluviittaukset taulukoksi, jossa ensimmäinen rivi tulkitaan otsikoiksi.
Jos otsikkoriviä ei ole, tuloksena on JSON-taulukko, jossa jokainen rivi on objekti, jonka avaimet ovat "Column1", "Column2" jne. Työkalu olettaa, että data on suorakaiteen muotoista: jos jossakin rivissä on vähemmän soluja kuin otsikossa, puuttuvat kentät saavat arvon null. Jos otsikkorivissä on yhdistettyjä soluja, ne käsitellään tyhjinä, mikä voi rikkoa rakenteen. Siksi ennen muunnosta kannattaa tarkistaa, ettei otsikkorivillä ole yhdistettyjä soluja, ja tarvittaessa poistaa ne jakamalla solut uudelleen.
Mitä tapahtuu, jos taulukko ei ole suorakaide – käytännön esimerkkejä
Valitettavan usein Excel-tiedostoissa on otsikkorivejä, jotka ulottuvat useammalle riville, tai väliotsikoita, jotka eivät ole varsinaista dataa. Tällöin muunnoksen tulos saattaa olla virheellinen. Harkitse seuraavaa Excel-taulukkoa:
| Rivi | A | B | C |
|---|---|---|---|
| 1 | Myynti raportti | ||
| 2 | Tuote | Hinta | Määrä |
| 3 | Kynä | 1.50 | 100 |
| 4 | Kumi | 0.80 | 50 |
Tässä rivi 1 on otsikkoteksti, joka ei ole dataa. Työkalu lukisi rivin 1 otsikkona, jolloin avaimet olisivat Myynti raportti, tyhjä, tyhjä. Toinen rivi jäisi dataksi ja sekoittaisi koko rakenteen. Paras tapa on siistiä Excel-tiedosto ennen muunnosta: poista ylimääräiset otsikkorivit, varmista, että otsikkorivi on yksi rivi ja että se sisältää jokaiselle sarakkeelle uniikin nimen. Jos sarakkeilla on samat nimet, JSON:in objektin avaimet saavat _2, _3 -suffiksit.
Usein kysyttyä
Miksi päivämäärä muuttuu luvuksi, enkä saa merkkijonoa?
Koska Excel tallentaa päivämäärät sarja-arvoina (päivien määrä 1.1.1900:sta). Muunnin kirjoittaa sen ISO 8601 -muotoisena merkkijonona UTC-ajassa, kuten "2023-08-15T00:00:00.000Z". Jos tarvitset toisenlaisen muodon, sinun on jälkikäsiteltävä JSON.
Voinko muuntaa.xls-tiedoston (vanha Excel)? Ei. Työkalu lukee vain.xlsx-muotoa. Jos sinulla on.xls-tiedosto, avaa se Excelissä ja tallenna se uutena tiedostona (Tiedosto > Tallenna nimellä > Excel-työkirja (.xlsx)).
Mitä teen, jos muunnos näyttää virheellisiä tietoja yhdistettyjen solujen takia? Yhdistetyt solut tuottavat tyhjiä soluja paitsi vasen yläkulma. Ennen muunnosta poista solujen yhdistäminen (Koti > Yhdistä ja keskitä > Pura solujen yhdistäminen) ja täytä tarvittaessa tyhjät solut uudelleen.
Onko tiedostoni salattu? Työkalu vaatii salasanan? Ei. Työkalu ei pysty käsittelemään salasanalla suojattuja XLSX-tiedostoja. Jos tiedosto on salasanalla suojattu, sinun on poistettava suojaus Excelissä ennen muunnosta.
Miksi muunnos kestää kauan suurella tiedostolla? Koska selain joutuu purkamaan koko ZIP-paketin ja jäsentämään XML:n. Mitä enemmän soluja, sitä enemmän aikaa kuluu. Suositellaan tiedoston koon rajoittamista 8 megatavuun ja solujen määrän rajoittamista 10 000 riviin ja 200 sarakkeeseen.
Miten näen rivien ja sarakkeiden määrän ennen muunnosta? Työkalu näyttää muunnoksen jälkeen tuloksen esikatselun ja tiedot: rivien ja sarakkeiden määrän sekä JSON-tiedoston koon. Jos haluat tarkat tiedot etukäteen, avaa Excel-tiedosto ja tarkista välilehden tiedot.
Mitä eroa on JSON-taulukolla ja JSON-objektilla? Tämä työkalu tuottaa taulukon (JSON array), jossa jokainen rivi on objekti (JSON object). Avaimet ovat otsikkorivin solujen arvoja. Jos tarvitset toisenlaista rakennetta, sinun on muokattava JSONia manuaalisesti konversion jälkeen.