XLSX’in İç Yapısı: Sıkıştırılmış Bir XML Kütüphanesi
Bir XLSX dosyası, aslında bir ZIP arşividir. İçinde birden fazla XML dosyası barındırır: çalışma kitabının yapısını tanımlayan workbook.xml, her bir sayfanın verilerini tutan sheet1.xml, sheet2.xml gibi dosyalar, stilleri tanımlayan styles.xml, paylaşılan dizeleri içeren sharedStrings.xml ve daha fazlası. Bu yapı, XLSX’in tek bir düz metin dosyası olmadığı, aksine hiyerarşik ve meta veri açısından zengin bir format olduğu anlamına gelir. Her hücrenin yalnızca değeri değil, aynı zamanda türü (metin, sayı, tarih, boolean), biçimlendirmesi (yazı tipi, renk, kenarlık) ve varsa formülü de ayrı XML öğelerinde saklanır. Bu aracın yaptığı, bu ZIP arşivini tarayıcıda açmak, sheet1.xml dosyasını ayrıştırmak ve içindeki hücre değerlerini JSON formatına dönüştürmektir. Bu nedenle, çıktıda yalnızca ilk çalışma sayfasındaki veriler yer alır; diğer sayfalar, hücre biçimleri ve formüllerin ham metinleri atılır.
JSON’un Yapısı: Tür Bilincine Sahip Bir Veri Formatı
JSON, nesneler (‹ ›), diziler ([ ]), dizeler ("..."), sayılar (123, 3.14), boolean değerler (true, false) ve null olmak üzere altı farklı veri türünü destekler. Bu, CSV’nin aksine, hücre değerlerinin türlerini koruyarak dönüştürülebileceği anlamına gelir. Araç, XLSX’teki bir hücrenin türüne göre JSON’da uygun karşılığını üretir:
| XLSX Hücre Türü | JSON Karşılığı | Örnek |
|---|---|---|
| Sayı (Number) | Sayı | 42 veya 3.14159 |
| Boolean | Boolean | true veya false |
| Metin (String) | Dize | "Merhaba" |
| Tarih (Date) | Dize | "2023-10-15T00:00:00.000Z" |
| Boş (Empty) | null |
null |
Örneğin, bir Excel hücresinde 42 yazıyorsa ve hücre türü sayı olarak işaretlenmişse, JSON çıktısında 42 (tırnak işareti olmadan bir sayı) olarak yer alır. Eğer aynı değer metin olarak işaretlenmiş olsaydı, "42" (tırnak içinde bir dize) olurdu. Bu ayrım, sayısal verilerle çalışan API’lar ve uygulamalar için kritiktir. Tarihler ise ISO 8601 biçiminde bir dize olarak çıktılanır, çünkü JSON’un yerleşik bir tarih türü yoktur. Bu, dönüşüm sonrası tarih verilerinin ayrıştırılmasını ve kullanılmasını kolaylaştırır.
Hücre Tipi Eşlemesi: Sayılar, Boolean ve Tarihler
XLSX dosyasında her hücrenin bir türü vardır: s (paylaşılan dize), n (sayı), b (boolean), e (hata) veya str (satır içi dize). Bu araç, bu türleri JSON’a birebir eşler. Ancak pratikte bazı nüanslar vardır:
- Sayılar: XLSX’te sayılar kayan nokta (float) veya tam sayı (integer) olabilir. Araç, sayıyı olduğu gibi JSON sayısına dönüştürür.
12.500gibi bir değer12.5olarak,0ise0olarak korunur. - Boolean: Excel’de
DOĞRUveyaYANLIŞolarak girilen değerler, JSON’datrueveyafalseboolean değerlerine dönüşür. Dize olarak"DOĞRU"yazan bir hücre ise metin olarak kalır. - Tarihler: Excel, tarihleri seri numarası olarak saklar (örneğin 1 Ocak 1900 = 1). Araç, bu seri numarasını okuyarak onu ISO 8601 biçimli bir dizeye çevirir. Ancak bu, yalnızca hücrenin tarih olarak biçimlendirilmiş olması durumunda geçerlidir. Hücre sayı olarak biçimlendirilmişse, seri numarası örneğin
45292gibi bir sayı olarak dönüşür. Bu yüzden, Excel’de doğru tarih biçimini kullanmak önemlidir.
Formüllerin Kaybı: Neden Sadece Son Hali Korunur?
XLSX dosyasında bir hücre bir formül içerebilir; örneğin =A1+B1. Bu formül, çalışma kitabı kaydedildiğinde hesaplanmış değeriyle birlikte saklanır. Yani dosyada hem formül metni (=A1+B1) hem de sonuç değeri (örneğin 42) bulunur. Bu araç, formül metnini okumaz; yalnızca hücrenin son kaydedilen sonuç değerini kullanır. Bunun iki pratik sonucu vardır:
- Formül yeniden hesaplanmaz: XLSX dosyası açıldığında Excel’in dinamik olarak güncellediği bir formülün en güncel sonucu değil, en son kaydedildiği andaki değeri JSON’a aktarılır.
- Formül metni kaybolur: JSON çıktısında formülün kendisi yoktur, sadece sonucu vardır. Formülü olduğu gibi JSON’da taşımak istiyorsanız, hücre değerini metin olarak biçimlendirmeniz gerekir.
Bu, araçtan beklenen bir davranıştır: amaç, Excel’in görünen değerlerini JSON’a taşımaktır, formül mantığını korumak değil.
Tek Sayfa Sınırlaması: Neden İlk Sayfa?
Excel dosyaları birden fazla çalışma sayfası içerebilir (Sheet1, Sheet2, vb.). Bu araç yalnızca ilk sayfayı (dosyadaki ilk sayfa, genellikle Sheet1) işler. Bunun nedeni, aracın basit ve öngörülebilir bir dönüşüm sunmasıdır. Kullanıcının çok sayfalı bir Excel’den yalnızca bir sayfayı JSON’a dönüştürmesi gerekiyorsa, önce o sayfayı ayrı bir XLSX dosyası olarak kaydetmesi gerekir. Alternatif olarak, Excel’de sayfaları birleştirip tek bir sayfaya taşıyabilir. Bu sınırlama, aracın varsayılan kurulumunda bilinçli olarak seçilmiştir; çünkü çok sayfalı dönüşüm, JSON çıktısının yapısını (örneğin her sayfa için ayrı bir dizi) karmaşıklaştırır ve bu aracın kapsamı dışındadır.
İstemci Tarafı İşleme: Gizlilik ve Hız Avantajı
Araç tamamen tarayıcınızda çalışır. XLSX dosyasını sunucuya yüklemezsiniz; JavaScript ile dosyayı okur, ZIP’i açar, XML’i ayrıştırır ve JSON’u oluşturur. Bu yaklaşımın iki büyük avantajı vardır:
- Gizlilik: Hiçbir veri internet üzerinden başka bir sunucuya gitmez. Bu, hassas müşteri bilgileri, finansal raporlar veya kişisel veriler içeren Excel dosyaları için idealdir. Verileriniz sadece sizin bilgisayarınızda işlenir.
- Hız: Dönüşüm işlemi, dosya boyutuna ve bilgisayarınızın işlem gücüne bağlı olarak saniyeler içinde tamamlanır. Bir sunucuya bağlanma, bekleme ve dosyayı geri indirme zahmeti yoktur.
Ancak çok büyük dosyalar (örneğin 50 MB üzeri) tarayıcının hafıza sınırlarına takılabilir. Araç, belirli bir boyut ve satır/sütun eşiği aşıldığında kullanıcıyı uyarır. Bu eşik değerleri ‹max› değişkeniyle belirtilmiştir; örneğin “Bu dosya çok büyük. ‹max› altındaki bir dosya kullanın.” gibi bir mesaj alırsınız.
Dönüşüm Sonrası Veri Doğrulama: Nelere Dikkat Etmelisiniz?
XLSX’ten JSON’a dönüşüm sonrası verilerinizi kontrol etmeniz gerekebilir. İşte sık karşılaşılan durumlar:
- Birleştirilmiş hücreler: Excel’de bitişik hücreler birleştirilmişse, araç yalnızca sol üstteki hücrenin değerini alır; diğer hücreler boş (
null) olarak atanır. Örneğin A1:B1 birleştirilmişse, A1’in değeri korunur, B1 boş olur. - Boş satırlar: Araç, ilk satırı başlık olarak kabul eder. Eğer ilk satırdan sonra tamamen boş bir satır varsa, bu satır atlanmaz;
nulldeğerlerle dolu bir JSON nesnesi oluşturulur. Bu nedenle, dönüşüm öncesinde boş satırları Excel’den temizlemeniz önerilir. - Gizli sütunlar: XLSX dosyasında gizli sütunlar, aracın okuduğu XML verisinde yer alır. Bu sütunlar JSON çıktısında görünür. Gizli verileri dışarıda bırakmak istiyorsanız, dönüşüm öncesinde bu sütunları silin veya görünür yapın.
- Başlık satırının çoklu satır olması: Excel’de başlık bazen iki satıra yayılabilir (örneğin “Ad” ve “Soyad” ayrı satırlarda). Araç, yalnızca ilk satırı başlık olarak alır. Bu durumda JSON’da anahtarlar ilk satırdaki değerler olur; ikinci satır veri olarak yorumlanır. Bunu önlemek için başlıkları tek bir satıra birleştirin.
Sıkça Sorulan Sorular
S: 100 MB’lık bir Excel dosyasını dönüştürebilir miyim?
C: Dosya boyutu sınırı ‹max› olarak belirtilmiştir. Bu değer genellikle 10-20 MB civarındadır. Daha büyük dosyalar için önce parçalara ayırmayı deneyin.
S: Formül içeren hücrelerin formülünü JSON’da görebilir miyim? C: Hayır, araç yalnızca hücrenin son kaydedilen değerini okur. Formül metni kaybolur.
S: Tarihler neden çılgın sayılar olarak görünüyor? C: Excel tarihleri seri numarası olarak saklar. Hücre tarih olarak biçimlendirilmemişse, araç bu seri numarasını olduğu gibi sayıya çevirir. Tarih biçimini Excel’de dönüşüm öncesinde ayarlayın.
S: İkinci sayfadaki verileri nasıl dönüştürebilirim? C: Excel’de ilgili sayfayı yeni bir dosya olarak kaydedin (Farklı Kaydet) ve o dosyayı yükleyin.
S: Dönüşüm sırasında verilerim nereye gidiyor? C: Hiçbir yere. Dosyanız tarayıcınızda işlenir, sunucuya gönderilmez. İndirdiğiniz JSON dosyası dışında hiçbir kopya kalmaz.
S: “Bu dosya açılamadı” hatası alıyorum, ne yapmalıyım? C: Dosyanın gerçekten XLSX formatında olduğundan emin olun. Bozuk bir dosya veya farklı bir format (örneğin XLS) bu hataya neden olur. Dosyayı Excel’de açıp yeniden XLSX olarak kaydedin.