Ugrađivanje slika u Excel datoteke s JavaScriptom i SheetJS
Prilikom razvoja proširenja za Chrome koje generira Excel (.xlsx) datoteke, ugrađivanje slika izravno u ćelije može biti izazovan zadatak. Iako JavaScript i biblioteke poput SheetJS pojednostavljuju stvaranje i uređivanje proračunskih tablica, rukovanje ugrađenim slikama često zahtijeva specifičnije rukovanje.
U mnogim slučajevima, programeri se suočavaju s ograničenjem mogućnosti samo dodavanja poveznica na slike u ćelije umjesto izravnog ugrađivanja slika. Ovaj problem proizlazi iz složenosti uključene u pretvorbu slikovnih podataka i formatiranje Excel datoteke, osobito u okruženju preglednika kao što su proširenja za Chrome.
U ovom ćemo članku istražiti rješenje za ugrađivanje slika izravno u ćelije Excel datoteke pomoću JavaScripta. Slike će biti dohvaćene iz HTML elemenata i umetnute u odgovarajuće Excel ćelije, nudeći besprijekornije iskustvo za korisnike koji trebaju vizualne podatke unutar svojih proračunskih tablica.
Raspravljat ćemo o tome kako integrirati biblioteke kao što je ExcelJS i uhvatiti se u koštac s uobičajenim izazovima kao što je ugrađivanje slika u zaštićeno okruženje proširenja za Chrome. Osim toga, pregledat ćemo razlike između pristupa proširenjima Node.js i Chrome kako bismo osigurali uspješnu implementaciju.
Naredba | Primjer korištenja |
---|---|
ExcelJS.Workbook() | Time se stvara novi objekt Excel radne knjige u okruženju Node.js pomoću biblioteke ExcelJS. Neophodan je za generiranje Excel datoteka od nule, uključujući radne listove, oblikovanje i slike. |
addWorksheet() | Ova metoda dodaje novi radni list u radnu knjigu. U kontekstu ovog problema, koristi se za stvaranje lista u koji se mogu umetnuti podaci (i tekst i slike). |
axios.get() | Koristi se za dohvaćanje slikovnih podataka s URL-a. Dohvaća binarne slikovne podatke u formatu međuspremnika polja, koji je neophodan za ugrađivanje slika u ćelije programa Excel. |
workbook.addImage() | Ova naredba dodaje sliku u Excel radnu knjigu. Slika se može osigurati kao međuspremnik binarnih podataka, što je bitno za ugrađivanje slika u određene ćelije. |
worksheet.addImage() | Ova je metoda odgovorna za postavljanje dodane slike u određenu ćeliju ili raspon ćelija na radnom listu, omogućujući ugrađivanje vizualnih elemenata uz tekstualne podatke. |
fetch() | U okruženju preglednika ova se naredba koristi za traženje slike s udaljenog poslužitelja i njezino dohvaćanje kao blob. Blob se zatim pretvara u base64 kodirani niz za ugrađivanje u Excel. |
FileReader.readAsDataURL() | Ova naredba pretvara blob (binarni veliki objekt) podatke dohvaćene iz URL-a slike u base64 niz, čineći ga kompatibilnim za ugradnju u Excel datoteku putem SheetJS. |
aoa_to_sheet() | Ova metoda iz SheetJS pretvara niz nizova (AoA) u Excel list. Posebno je koristan za postavljanje jednostavnih struktura podataka koje uključuju i tekst i slike. |
writeFile() | Ova funkcija u ExcelJS i SheetJS sprema generiranu Excel datoteku s ugrađenim slikama u lokalni datotečni sustav. To je posljednji korak nakon izrade radne knjige i dodavanja svih potrebnih elemenata. |
Kako ugraditi slike u ćelije programa Excel koristeći JavaScript i ExcelJS
Skripta koju sam dao rješava problem ugrađivanja slika izravno u ćelije programa Excel JavaScript, ExcelJS i Axios. Prvo, skripta počinje inicijalizacijom nove radne knjige pomoću ExcelJS s naredbom ExcelJS.Radna knjiga(), koji je temelj za generiranje Excel datoteka. Zatim stvara radni list pozivom addWorksheet(). Ovaj radni list služi kao spremnik za sve podatke i slike koje će se dodati. Uzorak podataka uključuje URL-ove slika koji će se kasnije dohvatiti i ugraditi u određene ćelije.
Za rukovanje dohvaćanjem slike, skripta koristi biblioteku Axios sa axios.get() za traženje slika s njihovih URL-ova. Axios dohvaća sliku kao binarne podatke koristeći responseType "arraybuffer", koji je prikladan za ugrađivanje binarnog sadržaja poput slika u Excel datoteku. Nakon primitka podataka, slika se pretvara u format međuspremnika, što omogućuje ExcelJS-u da je prepozna kao valjanu sliku za ugradnju u ćeliju.
Nakon što je slika dohvaćena i obrađena, naredba radna knjiga.addImage() služi za umetanje slike u radnu bilježnicu. Ovaj korak definira sliku i priprema je za postavljanje na određeno mjesto unutar radnog lista. Nakon ovoga, radni list.addImage() određuje gdje se slika treba postaviti, u ovom slučaju u stupac "B" trenutnog reda. Visina reda se podešava kako bi se osiguralo da slika dobro stane unutar ćelije.
Na kraju, skripta sprema radnu knjigu pomoću radna knjiga.xlsx.writeFile(), koji zapisuje datoteku u lokalni sustav. Time je proces dovršen, što rezultira Excel datotekom s ugrađenim slikama izravno u ćelije, a ne samo vezama. Ova je metoda vrlo učinkovita u slučajevima kada je potrebno uključiti slike u izvješća ili podatkovne listove, pružajući besprijekorno iskustvo za korisnike u interakciji s Excel datotekama koje sadrže i podatke i vizualne elemente.
Ugrađivanje slika u Excel ćelije pomoću programa ExcelJS i Axios
Ovo rješenje koristi Node.js, ExcelJS za izradu Excel radne knjige i Axios za dohvaćanje slikovnih podataka. Upravlja ugradnjom slika izravno u ćelije programa Excel.
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);
Ugrađivanje slika u Excel pomoću podataka Base64 i SheetJS
Ovo se rješenje fokusira na dohvaćanje slika i njihovo pretvaranje u format base64 prije ugrađivanja u Excel datoteku pomoću SheetJS-a u okruženju proširenja za 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 ugrađivanja slika u Excel datoteke za Chromeove ekstenzije
Prilikom razvoja a Chrome proširenje koji integrira slike u Excel datoteke, jedan veliki izazov je kako rukovati ugrađivanjem slika unutar okruženja preglednika. Za razliku od tradicionalnih Node.js okruženja, Chrome proširenja dolaze s dodatnim sigurnosnim ograničenjima i ograničenjima performansi koja sprječavaju izravan pristup određenim API-jima. To znači da će metode poput dohvaćanja slika pomoću biblioteka kao što je Axios možda trebati alternative kako bi bile u skladu s pravilima preglednika.
Rješenje za okruženja preglednika moglo bi uključivati korištenje baza64 kodirane slike umjesto neobrađenih binarnih podataka. Kodiranje Base64 omogućuje jednostavan prijenos i pohranu slika kao niza, koji se zatim mogu ugraditi izravno u Excelov list pomoću biblioteka poput SheetJS. U ovom slučaju, kodiranje base64 pomaže u prevladavanju sigurnosnih ograničenja koja nameće Chrome, posebno zato što proširenja ne mogu izvršiti kôd specifičan za Node.js.
Drugi ključni aspekt koji treba uzeti u obzir je rukovanje velikim skupovima slikovnih podataka u Excel datotekama. Ugrađivanje više slika u Excel list može drastično povećati veličinu datoteke, što može utjecati na izvedbu, posebno u aplikaciji koja se temelji na pregledniku. Kako bi ovo optimizirali, programeri bi trebali koristiti komprimirane slikovne formate kao što su WebP ili JPEG kako bi smanjili veličinu datoteke, a pritom osigurali da kvaliteta slike ostane nepromijenjena.
Uobičajena pitanja o ugrađivanju slika u Excel s JavaScriptom
- Kako mogu dohvatiti slike u okruženju proširenja za Chrome?
- U proširenju za Chrome možete koristiti fetch() za dohvaćanje slika s URL-a i njihovo pretvaranje u base64 korištenjem FileReader za ugradnju.
- U kojem bi formatu slike trebale biti kako bi se izbjegle velike datoteke?
- Preporučljivo je koristiti WebP ili JPEG formatima jer nude bolju kompresiju i smanjuju konačnu veličinu Excel datoteke.
- Je li moguće ugraditi više slika u jednu Excel datoteku?
- Da, koristeći knjižnice poput ExcelJS ili SheetJS, možete ugraditi više slika u različite ćelije ponavljanjem kroz niz URL-ova slika.
- Koja je razlika između ugrađivanja slika u Node.js i preglednika?
- U Node.js, možete koristiti axios.get() za dohvaćanje slikovnih podataka, dok ste u pregledniku, trebate koristiti fetch() i ispravno postupati s pravilima CORS-a.
- Kako mogu osigurati da se slikama ispravno promijeni veličina u Excel ćelijama?
- Koristite row.height i addImage() funkcije za kontrolu dimenzija ćelija u koje su ugrađene slike, osiguravajući pravilan prikaz.
Završne misli o ugrađivanju slika u Excel
Ugrađivanje slika izravno u ćelije programa Excel pomoću JavaScript zahtijeva prave alate i biblioteke, kao što je ExcelJS, posebno kada radite u okruženju proširenja za Chrome. Omogućuje vam generiranje dinamičnijih i vizualno bogatijih Excel datoteka.
Putem optimiziranih tehnika kao što je dohvaćanje slikovnih podataka u binarnom formatu i njihovo izravno ugrađivanje u ćelije, ova metoda osigurava da su vaše generirane Excel datoteke funkcionalne i vizualno privlačne, zadovoljavajući različite slučajeve upotrebe u web razvoju i šire.
Reference i dodatni izvori
- Za detaljniju dokumentaciju o tome kako koristiti ExcelJS za stvaranje i rukovanje Excel datotekama, posjetite Službena dokumentacija programa ExcelJS .
- Da biste razumjeli kako dohvatiti slike s URL-ova koristeći Axios u JavaScriptu, pogledajte Axios dokumentacija .
- Za informacije o radu s base64 kodiranjem slike u JavaScriptu za ugrađivanje u Excel datoteke, provjerite MDN web dokumenti: FileReader.readAsDataURL .
- Ako razvijate proširenje za Chrome i trebate smjernice o korištenju API-ja, posjetite Vodič za razvojne programere proširenja za Chrome .