Vdelava slik v Excelove datoteke z JavaScriptom in SheetJS
Pri razvoju razširitve za Chrome, ki ustvarja datoteke Excel (.xlsx), je vdelava slik neposredno v celice lahko zahtevna naloga. Medtem ko JavaScript in knjižnice, kot je SheetJS, poenostavijo ustvarjanje in urejanje preglednic, je za ravnanje z vdelanimi slikami pogosto potrebno bolj specifično ravnanje.
V mnogih primerih se razvijalci soočajo z omejitvijo, da lahko samo dodajajo slikovne povezave v celice, namesto da bi neposredno vdelali slike. Ta težava izhaja iz zapletenosti pretvorbe slikovnih podatkov in oblikovanja datoteke Excel, zlasti v okolju brskalnika, kot so razširitve za Chrome.
V tem članku bomo raziskali rešitev za neposredno vdelavo slik v celice datoteke Excel z uporabo JavaScripta. Slike bodo pridobljene iz elementov HTML in vstavljene v ustrezne Excelove celice, kar bo ponudilo bolj brezhibno izkušnjo za uporabnike, ki potrebujejo vizualne podatke v svojih preglednicah.
Razpravljali bomo o tem, kako integrirati knjižnice, kot je ExcelJS, in se spopasti s pogostimi izzivi, kot je vdelava slik v zaščiteno okolje razširitev za Chrome. Poleg tega bomo pregledali razlike med pristopoma Node.js in razširitve za Chrome, da zagotovimo uspešno izvedbo.
Ukaz | Primer uporabe |
---|---|
ExcelJS.Workbook() | To ustvari nov objekt Excelovega delovnega zvezka v okolju Node.js z uporabo knjižnice ExcelJS. Bistvenega pomena je za ustvarjanje Excelovih datotek iz nič, vključno z delovnimi listi, oblikovanjem in slikami. |
addWorksheet() | Ta metoda v delovni zvezek doda nov delovni list. V okviru te težave se uporablja za ustvarjanje lista, kamor je mogoče vstaviti podatke (besedilo in slike). |
axios.get() | Uporablja se za pridobivanje slikovnih podatkov iz URL-ja. Pridobi binarne slikovne podatke v formatu medpomnilnika polja, ki je potreben za vdelavo slik v Excelove celice. |
workbook.addImage() | Ta ukaz doda sliko v Excelov delovni zvezek. Slika se lahko zagotovi kot vmesni pomnilnik binarnih podatkov, kar je bistveno za vdelavo slik v določene celice. |
worksheet.addImage() | Ta metoda je odgovorna za postavitev dodane slike v določeno celico ali obseg celic na delovnem listu, kar omogoča vdelavo vizualnih elementov poleg besedilnih podatkov. |
fetch() | V okolju brskalnika se ta ukaz uporablja za zahtevanje slike z oddaljenega strežnika in njeno pridobitev kot blob. Blob se nato pretvori v niz, kodiran z base64, za vdelavo v Excel. |
FileReader.readAsDataURL() | Ta ukaz pretvori podatke blob (binarni veliki objekt), pridobljene iz URL-ja slike, v niz base64, zaradi česar je združljiv za vdelavo v Excelovo datoteko prek SheetJS. |
aoa_to_sheet() | Ta metoda iz SheetJS pretvori niz nizov (AoA) v Excelov list. Še posebej je uporaben za nastavitev preprostih podatkovnih struktur, ki vključujejo besedilo in slike. |
writeFile() | Ta funkcija v ExcelJS in SheetJS shrani ustvarjeno datoteko Excel z vdelanimi slikami v lokalni datotečni sistem. Je zadnji korak po ustvarjanju delovnega zvezka in dodajanju vseh potrebnih elementov. |
Kako vdelati slike v Excelove celice z uporabo JavaScripta in ExcelJS
Skript, ki sem ga predložil, rešuje problem vdelave slik neposredno v Excelove celice z uporabo JavaScript, ExcelJS in Axios. Najprej se skript začne z inicializacijo novega delovnega zvezka z uporabo ExcelJS z ukazom ExcelJS.Workbook(), ki je osnova za ustvarjanje datotek Excel. Nato s klicem ustvari delovni list addWorksheet(). Ta delovni list deluje kot vsebnik za vse podatke in slike, ki bodo dodani. Vzorčni podatki vključujejo URL-je slik, ki bodo pozneje pridobljeni in vdelani v določene celice.
Za obdelavo pridobivanja slik skript uporablja knjižnico Axios s axios.get() zahtevati slike z njihovih URL-jev. Axios pridobi sliko kot binarne podatke z uporabo responseType "arraybuffer", ki je primeren za vdelavo binarne vsebine, kot so slike, v datoteko Excel. Po prejemu podatkov se slika pretvori v obliko vmesnega pomnilnika, kar omogoča, da jo ExcelJS prepozna kot veljavno sliko za vdelavo v celico.
Ko je slika pridobljena in obdelana, ukaz delovni zvezek.addImage() se uporablja za vstavljanje slike v delovni zvezek. Ta korak definira sliko in jo pripravi za postavitev na določeno mesto v delovnem listu. Po tem, worksheet.addImage() določa, kam naj bo slika postavljena, v tem primeru v stolpec "B" trenutne vrstice. Višina vrstice je prilagojena tako, da se slika dobro prilega celici.
Končno skript shrani delovni zvezek z uporabo workbook.xlsx.writeFile(), ki zapiše datoteko v lokalni sistem. S tem je postopek zaključen, rezultat pa je Excelova datoteka z vdelanimi slikami neposredno v celice in ne le s povezavami. Ta metoda je zelo učinkovita v primerih, ko je treba slike vključiti v poročila ali podatkovne liste, kar zagotavlja brezhibno izkušnjo za uporabnike, ki komunicirajo z Excelovimi datotekami, ki vsebujejo podatke in vizualne elemente.
Vdelava slik v Excelove celice z uporabo ExcelJS in Axios
Ta rešitev uporablja Node.js, ExcelJS za ustvarjanje Excelovega delovnega zvezka in Axios za pridobivanje slikovnih podatkov. Ukvarja se z vdelavo slik neposredno v Excelove celice.
const ExcelJS = require('exceljs');
const axios = require('axios');
async function addImageToExcel() {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('My Sheet');
const data = [
{ id: 1, imageUrl: 'https://example.com/image1.png' },
{ id: 2, imageUrl: 'https://example.com/image2.png' }
];
worksheet.columns = [
{ header: 'ID', key: 'id', width: 10 },
{ header: 'Image', key: 'image', width: 30 }
];
for (const item of data) {
const row = worksheet.addRow({ id: item.id });
row.height = 90;
const imageId = workbook.addImage({
buffer: (await axios.get(item.imageUrl, { responseType: 'arraybuffer' })).data,
extension: 'png'
});
worksheet.addImage(imageId, \`B${row.number}:B${row.number}\`);
}
await workbook.xlsx.writeFile('ExcelWithImages.xlsx');
console.log('Excel file with images saved!');
}
addImageToExcel().catch(console.error);
Vdelava slik v Excel z uporabo podatkov Base64 in SheetJS
Ta rešitev se osredotoča na pridobivanje slik in njihovo pretvorbo v format base64, preden jih vdelate v Excelovo datoteko z uporabo SheetJS v okolju razširitve Chrome.
async function getImageBase64(url) {
const response = await fetch(url);
const blob = await response.blob();
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.onerror = reject;
reader.readAsDataURL(blob);
});
}
async function addImageToSheetJS() {
const wb = XLSX.utils.book_new();
const ws = XLSX.utils.aoa_to_sheet([[ 'ID', 'Image' ]]);
const imageData = await getImageBase64('https://example.com/image.png');
ws['!merges'] = [{ s: { c: 1, r: 1 }, e: { c: 1, r: 5 } }];
ws['B2'] = { t: 's', v: imageData, l: { Target: 'base64 image' } };
XLSX.utils.book_append_sheet(wb, ws, 'Sheet 1');
XLSX.writeFile(wb, 'SheetWithImages.xlsx');
}
addImageToSheetJS();
Optimiziranje vdelave slik v Excelove datoteke za razširitve za Chrome
Pri razvoju a Razširitev za Chrome ki integrira slike v Excelove datoteke, je eden glavnih izzivov, kako ravnati z vdelavo slik v okolju brskalnika. Za razliko od tradicionalnih okolij Node.js imajo razširitve za Chrome dodatne varnostne in zmogljivostne omejitve, ki preprečujejo neposreden dostop do določenih API-jev. To pomeni, da metode, kot je pridobivanje slik z uporabo knjižnic, kot je Axios, morda potrebujejo alternative za skladnost s pravilniki brskalnika.
Rešitev za okolja brskalnika bi lahko vključevala uporabo base64 kodirane slike namesto neobdelanih binarnih podatkov. Kodiranje Base64 omogoča preprost prenos in shranjevanje slik kot niza, ki ga je mogoče nato vdelati neposredno v Excelov list s pomočjo knjižnic, kot je SheetJS. V tem primeru kodiranje base64 pomaga premagati varnostne omejitve, ki jih nalaga Chrome, zlasti ker razširitve ne morejo izvesti kode, specifične za Node.js.
Drugi ključni vidik, ki ga je treba upoštevati, je ravnanje z velikimi nizi slikovnih podatkov v Excelovih datotekah. Vdelava več slik v Excelov list lahko drastično poveča velikost datoteke, kar lahko vpliva na zmogljivost, zlasti v aplikaciji, ki temelji na brskalniku. Da bi to optimizirali, bi morali razvijalci uporabiti formate stisnjenih slik, kot sta WebP ali JPEG, da zmanjšajo velikost datoteke in hkrati zagotovijo, da kakovost slike ostane nedotaknjena.
Pogosta vprašanja o vdelavi slik v Excel z JavaScriptom
- Kako lahko pridobim slike v okolju razširitev za Chrome?
- V razširitvi za Chrome lahko uporabite fetch() za pridobivanje slik iz URL-ja in njihovo pretvorbo v base64 z uporabo FileReader za vdelavo.
- V kakšnem formatu naj bodo slike, da se izognete velikim velikostim datotek?
- Priporočljivo je uporabljati WebP oz JPEG formatih, saj ponujajo boljše stiskanje in zmanjšajo končno velikost datoteke Excel.
- Ali je mogoče vdelati več slik v eno datoteko Excel?
- Da, z uporabo knjižnic, kot je ExcelJS oz SheetJS, lahko vdelate več slik v različne celice tako, da se pomikate po matriki URL-jev slik.
- Kakšna je razlika med vdelavo slik v Node.js in brskalnik?
- V Node.js lahko uporabite axios.get() za pridobitev slikovnih podatkov, medtem ko ste v brskalniku, morate uporabiti fetch() in pravilno ravnajte s pravilniki CORS.
- Kako zagotovim, da je velikost slik v Excelovih celicah pravilno spremenjena?
- Uporabite row.height in addImage() funkcije za nadzor dimenzij celic, v katere so vdelane slike, kar zagotavlja pravilen prikaz.
Končne misli o vdelavi slik v Excel
Vdelava slik neposredno v Excelove celice z uporabo JavaScript zahteva prava orodja in knjižnice, kot je ExcelJS, zlasti pri delu v okolju razširitev za Chrome. Omogoča ustvarjanje bolj dinamičnih in vizualno bogatih datotek Excel.
Z optimiziranimi tehnikami, kot je pridobivanje slikovnih podatkov v binarni obliki in njihova vdelava neposredno v celice, ta metoda zagotavlja, da so vaše ustvarjene Excelove datoteke funkcionalne in vizualno privlačne ter ustrezajo različnim primerom uporabe v spletnem razvoju in drugod.
Reference in dodatni viri
- Za podrobnejšo dokumentacijo o tem, kako uporabljati ExcelJS za ustvarjanje in upravljanje datotek Excel, obiščite Uradna dokumentacija ExcelJS .
- Če želite razumeti, kako pridobiti slike iz URL-jev z uporabo Axios v JavaScriptu, glejte Dokumentacija Axios .
- Za informacije o delu s kodiranjem slik base64 v JavaScriptu za vdelavo v Excelove datoteke si oglejte Spletni dokumenti MDN: FileReader.readAsDataURL .
- Če razvijate razširitev za Chrome in potrebujete navodila za uporabo API-ja, obiščite Priročnik za razvijalce razširitev za Chrome .