Yaqinda tobora ko‘proq loyihalar veb-ilovalarda Excel muhitini aynan o‘z holicha joriy qilish uchun SpreadJS’dan foydalanmoqda. Men mas’ul bo‘lgan tizimda ham SpreadJS ishlatiladi. SpreadJS’dan foydalanish jarayonida duch kelgan muammolardan biri “muayyan fayl ekranda umuman ochilmasligi” edi.
Dastlabki ishlab chiqish bosqichida tizim eski versiyadan yangi versiyaga yangilandi va foydalanuvchilar turli fayllarni yuklagani sababli, sababi noma’lum parsing xatolari hamda ish vaqtida yuz beradigan xatolarni bartaraf etishimizga to‘g‘ri keldi. Buning sababi eski versiyada fayllarni ochish uchun faqat “open()” ishlatilgani, yangi versiyada esa “import()” va “fromJSON()” joriy etilgani hamda natijada ikkala yondashuv aralashib ketganidir.
Ushbu tajribaga asoslanib, bir xil xatoni hech qachon takrorlamaslik uchun uchta format (.xlsx, .ssjson va .sjs) bo‘yicha to‘g‘ri API moslashtirish usullari va tegishli namunaviy kodni tartibga soldim.
Xatoning sababi: fayl turi va method mos kelmasligi
SpreadJS faylni ocholmasligining asosiy sababi menda mavjud bo‘lgan fayl ma’lumotlarining “fizik shakli (ikkilik ma’lumotmi yoki JSON obyekti ekanligi)” uni o‘qish uchun ishlatilgan “API mexanizmi” bilan noto‘g‘ri moslashtirilganidir. Biz duch kelgan asosiy xato holatlari quyidagilardan iborat edi.
* Xato holati 1: Brauzerda foydalanuvchi tanlagan asl .xlsx ikkilik fayli yanglish ravishda satr ma’lumotlari sifatida ko‘rilib, to‘g‘ridan-to‘g‘ri eskirgan fromJSON() method’iga uzatildi -> SpreadJS mexanizmi ichki tuzilmani tahlil qila olmadi va ekran javob bermay qoldi.
* Xato holati 2: Server API orqali aloqa yordamida yuklab olingan .ssjson matn ma’lumotlari to‘g‘ridan-to‘g‘ri import() method’iga fayl obyekti sifatida uzatildi -> Ikkilik oqim formati sarlavhasi mavjud bo‘lmagani sababli yuklash xatosi yuz berdi.
* Xato holati 3: Eng yangi katta siqilgan format — .sjs — eskirgan ExcelIO.open() moduli yondashuvi yordamida ochishga urinildi -> Eskirgan IO kutubxonasi yangi siqilgan tuzilmani dekodlay olmadi va xato qaytardi.
Ushbu sinovlar va xatolardan so‘ng brauzer ishdan chiqishiga sabab bo‘lmasdan fayllarni xavfsiz ochishning kaliti har bir fayl kengaytmasini unga belgilangan method va parametrlar bilan aniq moslashtirish ekanini angladim.
Uch formatni moslashtirish matritsasi
Faylni ochishda xato yuz bersa, birinchi navbatda quyidagi matritsa qoidalariga amal qilingan-qilinmaganini tekshirish kerak.
-
Kengaytma .xlsx bo‘lsa,
* Haqiqiy ma’lumotlar formati: Standart Microsoft Excel ikkilik fayli
* To‘g‘ri qayta ishlash usuli: workbook.import()
* Talab qilinadigan kengaytma plagini: gc.spread.sheets.io
-
Kengaytma .ssjson bo‘lsa,
* Haqiqiy ma’lumotlar formati: Matnga asoslangan JavaScript JSON obyekti
* To‘g‘ri qayta ishlash usuli: workbook.fromJSON()
* Talab qilinadigan kengaytma plagini: Standart Core moduliga o‘rnatilgan
-
Kengaytma .sjs bo‘lsa,
* Haqiqiy ma’lumotlar formati: SpreadJS’ga xos katta siqilgan ikkilik ma’lumot (Zip)
* To‘g‘ri qayta ishlash usuli: workbook.import()
* Talab qilinadigan kengaytma plagini: gc.spread.sheets.io
Eski hujjatlar va yangilanmagan blog postlarida GC.Spread.Excel.IO nusxasini yaratib, so‘ngra excelIo.open()ni chaqirish ko‘rsatilgan bo‘lishi mumkin, biroq eng yangi SpreadJS arxitekturasida workbook obyektidagi integratsiyalangan workbook.import()dan foydalanish rasmiy standart va eng xavfsiz yondashuv hisoblanadi.
Format bo‘yicha fayllarni ochish bo‘yicha joriy etish qo‘llanmasi
Bu har bir format uchun standart joriy etish manba kodi. Brauzerdagi File/Blob obyektlarini qayta ishlash usuli har bir faylning xususiyatlariga qarab farq qiladi.
-
Standart Excel (.xlsx) faylini ochish
.xlsx fayli odatiy ikkilik fayldir. Shuning uchun brauzerdagi input tegidan olingan fayl obyektini to‘g‘ridan-to‘g‘ri workbook.import()ga uzating va parametrlarda FileType.excelni ko‘rsatishni unutmang.
-
Eski JSON (.ssjson) faylini ochish
.ssjsonfayl formati kabi ko‘rinishi mumkin, ammo aslida u SpreadJS holatini matn ko‘rinishida eksport qilish orqali ifodalovchi javaScript obyektidir. Uni fayl obyekti sifatida method’ga uzatish har doim xatoga olib keladi. Avval uni FileReader yordamida matn sifatida o‘qishingiz, keyin JSON.parse()yordamida oddiy obyektga aylantirishingiz va fromJSON()orqali yuklashingiz kerak.
-
Eng yangi maxsus siqilgan formatdagi (.sjs) faylni ochish
.sjs — katta hajmdagi Excel fayllarining sekin yuklanishi va fayl hajmi bilan bog‘liq muammolarni hal qilish uchun joriy etilgan maxsus siqilgan formatdir. Tuzilishi jihatidan u .xlsx kabi ikkilik siqilgan fayl bo‘lgani uchun, import() metodidan foydalanadi, biroq tahlil qilish mexanizmining ichki ishlov berish jarayoni farq qilishi sababli, fileType parametri aniq FileType.sjs qiymatiga o‘rnatilishi kerak.
Xulosa
Har bir format uchun faylni ochishning to‘g‘ri usulini standartlashtirib, aniq farqlaganimizdan so‘ng, fayl yuklanishi paytida formatlar mos kelmasligi sababli yuzaga keladigan bajarilish xatolari va tahlil qilishdagi nosozliklar avvalgiga nisbatan sezilarli darajada kamayganini hayrat bilan aniqladik. Xatolik darajasi keskin pasaygani sababli, tegishli nosozliklarni tuzatishga sarflanadigan resurslarni kamaytirish va ishlab chiqish vaqtining sezilarli qismini tejashga muvaffaq bo‘ldik. Natijada tizim barqarorligini sezilarli darajada yaxshilashdek qimmatli natijaga erishdik.
kina.j