Vkladanie obrázkov do súborov Excel pomocou JavaScriptu a SheetJS
Pri vývoji rozšírenia pre Chrome, ktoré generuje súbory Excel (.xlsx), môže byť vkladanie obrázkov priamo do buniek náročná úloha. Zatiaľ čo JavaScript a knižnice ako SheetJS zjednodušujú vytváranie a úpravu tabuliek, manipulácia s vloženými obrázkami si často vyžaduje špecifickejšie zaobchádzanie.
V mnohých prípadoch sa vývojári stretávajú s obmedzením, že môžu do buniek iba pridávať odkazy na obrázky, a nie priamo vkladať obrázky. Tento problém vzniká v dôsledku zložitosti konverzie obrazových údajov a formátovania súborov programu Excel, najmä v prostredí prehliadača, ako sú rozšírenia prehliadača Chrome.
V tomto článku preskúmame riešenie na vkladanie obrázkov priamo do buniek súboru Excel pomocou JavaScriptu. Obrázky sa načítajú z prvkov HTML a vložia sa do príslušných buniek Excelu, čo používateľom, ktorí vo svojich tabuľkách potrebujú vizuálne údaje, ponúkne plynulejší zážitok.
Budeme diskutovať o tom, ako integrovať knižnice, ako je ExcelJS, a riešiť bežné výzvy, ako je vkladanie obrázkov do chráneného prostredia rozšírenia Chrome. Okrem toho preskúmame rozdiely medzi prístupmi rozšírení Node.js a Chrome, aby sme zaistili úspešnú implementáciu.
Príkaz | Príklad použitia |
---|---|
ExcelJS.Workbook() | Tým sa vytvorí nový objekt zošita programu Excel v prostredí Node.js pomocou knižnice ExcelJS. Je to nevyhnutné na vytváranie súborov programu Excel od začiatku, vrátane pracovných hárkov, formátovania a obrázkov. |
addWorksheet() | Táto metóda pridá do zošita nový pracovný hárok. V kontexte tohto problému sa používa na vytvorenie hárku, kde je možné vkladať údaje (text aj obrázky). |
axios.get() | Používa sa na načítanie obrazových údajov z adresy URL. Načítava binárne obrazové dáta vo formáte vyrovnávacej pamäte poľa, čo je potrebné na vkladanie obrázkov do buniek Excelu. |
workbook.addImage() | Tento príkaz pridá obrázok do zošita programu Excel. Obrázok môže byť poskytnutý ako vyrovnávacia pamäť binárnych údajov, čo je nevyhnutné na vkladanie obrázkov do špecifických buniek. |
worksheet.addImage() | Táto metóda je zodpovedná za umiestnenie pridaného obrázka do špecifickej bunky alebo rozsahu buniek v pracovnom hárku, čo umožňuje vloženie vizuálnych prvkov popri textových údajoch. |
fetch() | V prostredí prehliadača sa tento príkaz používa na vyžiadanie obrázka zo vzdialeného servera a jeho načítanie ako blob. Blob sa potom skonvertuje na reťazec zakódovaný v base64 na vloženie do Excelu. |
FileReader.readAsDataURL() | Tento príkaz konvertuje dáta blob (binárny veľký objekt) získané z adresy URL obrázka na reťazec base64, vďaka čomu je kompatibilný na vloženie do súboru Excel cez SheetJS. |
aoa_to_sheet() | Táto metóda z SheetJS konvertuje pole polí (AoA) na hárok programu Excel. Je to užitočné najmä pri nastavovaní jednoduchých dátových štruktúr, ktoré obsahujú text aj obrázky. |
writeFile() | Táto funkcia v ExcelJS aj SheetJS uloží vygenerovaný súbor Excel s vloženými obrázkami do lokálneho systému súborov. Je to posledný krok po vytvorení zošita a pridaní všetkých potrebných prvkov. |
Ako vložiť obrázky do buniek Excelu pomocou JavaScriptu a ExcelJS
Skript, ktorý som poskytol, rieši problém vkladania obrázkov priamo do buniek Excelu pomocou JavaScript, ExcelJS a Axios. Najprv sa skript spustí inicializáciou nového zošita pomocou ExcelJS s príkazom ExcelJS.Workbook(), ktorý je základom pre generovanie súborov programu Excel. Potom vytvorí pracovný hárok volaním addWorksheet(). Tento pracovný hárok funguje ako kontajner pre všetky údaje a obrázky, ktoré budú pridané. Vzorové údaje zahŕňajú adresy URL obrázkov, ktoré budú neskôr načítané a vložené do konkrétnych buniek.
Na spracovanie načítania obrázkov skript používa knižnicu Axios s axios.get() vyžiadať obrázky z ich adries URL. Axios získava obrázok ako binárne dáta pomocou responseType "arraybuffer", ktorý je vhodný na vkladanie binárneho obsahu, ako sú obrázky, do súboru Excel. Po prijatí údajov sa obrázok skonvertuje do vyrovnávacej pamäte, čo umožňuje ExcelJS rozpoznať ho ako platný obrázok na vloženie do bunky.
Po načítaní a spracovaní obrázka príkaz workbook.addImage() slúži na vloženie obrázku do zošita. Tento krok definuje obrázok a pripraví ho na umiestnenie na konkrétne miesto v pracovnom hárku. Po tomto worksheet.addImage() určuje, kam má byť obrázok umiestnený, v tomto prípade do stĺpca "B" aktuálneho riadku. Výška riadka je upravená tak, aby sa zabezpečilo, že obrázok dobre zapadne do bunky.
Nakoniec skript uloží zošit pomocou workbook.xlsx.writeFile(), ktorý zapíše súbor do lokálneho systému. Tým je proces dokončený a výsledkom je súbor programu Excel s vloženými obrázkami priamo v bunkách, a nie iba odkazmi. Táto metóda je vysoko efektívna v prípadoch, keď je potrebné zahrnúť obrázky do správ alebo údajových hárkov, čím poskytuje používateľom bezproblémovú interakciu so súbormi Excelu, ktoré obsahujú údaje aj vizuálne prvky.
Vkladanie obrázkov do buniek Excelu pomocou ExcelJS a Axios
Toto riešenie používa Node.js, ExcelJS na vytvorenie excelového zošita a Axios na načítanie obrazových údajov. Zvláda vkladanie obrázkov priamo do buniek Excelu.
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);
Vkladanie obrázkov do Excelu pomocou Base64 Data a SheetJS
Toto riešenie sa zameriava na načítanie obrázkov a ich konverziu do formátu base64 pred ich vložením do súboru Excel pomocou SheetJS v prostredí rozšírenia 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();
Optimalizácia vkladania obrázkov do súborov Excel pre rozšírenia Chrome
Pri vývoji a Rozšírenie pre Chrome ktorý integruje obrázky do súborov programu Excel, jednou z hlavných výziev je, ako zvládnuť vkladanie obrázkov do prostredia prehliadača. Na rozdiel od tradičných prostredí Node.js sa rozšírenia prehliadača Chrome dodávajú s ďalšími obmedzeniami zabezpečenia a výkonu, ktoré bránia priamemu prístupu k určitým rozhraniam API. To znamená, že metódy, ako je načítanie obrázkov pomocou knižníc, ako je Axios, môžu potrebovať alternatívy, aby boli v súlade s pravidlami prehliadača.
Riešenie pre prostredia prehliadača by mohlo zahŕňať použitie základ 64 zakódované obrázky namiesto nespracovaných binárnych údajov. Kódovanie Base64 umožňuje jednoducho prenášať a ukladať obrázky ako reťazec, ktorý je potom možné vložiť priamo do hárka programu Excel pomocou knižníc, ako je SheetJS. V tomto prípade kódovanie base64 pomáha prekonať bezpečnostné obmedzenia uložené prehliadačom Chrome, najmä preto, že rozšírenia nedokážu spustiť kód špecifický pre Node.js.
Ďalším dôležitým aspektom, ktorý je potrebné zvážiť, je manipulácia s veľkými súbormi obrazových údajov v súboroch programu Excel. Vloženie viacerých obrázkov do hárka programu Excel môže drasticky zväčšiť veľkosť súboru, čo môže ovplyvniť výkon, najmä v aplikácii založenej na prehliadači. Na optimalizáciu by vývojári mali používať komprimované obrazové formáty ako WebP alebo JPEG, aby sa minimalizovala veľkosť súboru a zároveň sa zabezpečilo, že kvalita obrazu zostane nedotknutá.
Bežné otázky týkajúce sa vkladania obrázkov do Excelu pomocou JavaScriptu
- Ako môžem načítať obrázky v prostredí rozšírenia Chrome?
- V rozšírení Chrome môžete použiť fetch() na načítanie obrázkov z adresy URL a ich konverzia na base64 pomocou FileReader na vloženie.
- V akom formáte by mali byť obrázky, aby ste sa vyhli veľkým súborom?
- Odporúča sa použiť WebP alebo JPEG formáty, pretože ponúkajú lepšiu kompresiu a znižujú konečnú veľkosť súboru Excel.
- Je možné vložiť viacero obrázkov do jedného súboru Excel?
- Áno, pomocou knižníc ako ExcelJS alebo SheetJS, môžete vložiť viacero obrázkov do rôznych buniek prejdením cez pole adries URL obrázkov.
- Aký je rozdiel medzi vložením obrázkov do Node.js a prehliadača?
- V Node.js môžete použiť axios.get() na načítanie obrazových údajov v prehliadači musíte použiť fetch() a správne zaobchádzať s politikami CORS.
- Ako zabezpečím, aby sa veľkosť obrázkov v bunkách Excelu zmenila správne?
- Použite row.height a addImage() funkcie na ovládanie rozmerov buniek, do ktorých sú vložené obrázky, čím sa zabezpečí správne zobrazenie.
Záverečné myšlienky na vkladanie obrázkov do Excelu
Vkladanie obrázkov priamo do buniek Excelu pomocou JavaScript vyžaduje správne nástroje a knižnice, ako je ExcelJS, najmä pri práci v prostredí rozšírenia Chrome. Umožňuje vám vytvárať dynamickejšie a vizuálne bohatšie súbory programu Excel.
Prostredníctvom optimalizovaných techník, ako je načítanie obrazových údajov v binárnom formáte a ich vkladanie priamo do buniek, táto metóda zaisťuje, že vaše vygenerované excelové súbory budú funkčné aj vizuálne príťažlivé a spĺňajú rôzne prípady použitia pri vývoji webových aplikácií aj mimo nej.
Referencie a ďalšie zdroje
- Podrobnejšiu dokumentáciu o tom, ako používať ExcelJS na vytváranie a manipuláciu so súbormi Excel, nájdete na stránke Oficiálna dokumentácia ExcelJS .
- Ak chcete pochopiť, ako načítať obrázky z adries URL pomocou Axios v JavaScripte, pozrite si Dokumentácia Axios .
- Informácie o práci s kódovaním obrázkov base64 v jazyku JavaScript na vkladanie do súborov programu Excel nájdete na stránke Webové dokumenty MDN: FileReader.readAsDataURL .
- Ak vyvíjate rozšírenie prehliadača Chrome a potrebujete poradiť o používaní rozhrania API, navštívte stránku Príručka pre vývojárov rozšírení Chrome .