Képek beágyazása Excel-fájlokba JavaScript és SheetJS segítségével
Excel (.xlsx) fájlokat generáló Chrome-bővítmény fejlesztésekor a képek közvetlenül a cellákba ágyazása kihívást jelenthet. Míg a JavaScript és az olyan könyvtárak, mint a SheetJS, leegyszerűsítik a táblázatok létrehozását és szerkesztését, a beágyazott képek kezelése gyakran specifikusabb kezelést igényel.
Sok esetben a fejlesztők azzal a korláttal szembesülnek, hogy csak képhivatkozásokat adhatnak hozzá a cellákhoz, nem pedig közvetlenül beágyazhatják a képeket. Ez a probléma a képadatok átalakítása és az Excel-fájlformázás bonyolultságából adódik, különösen olyan böngészőkörnyezetben, mint a Chrome-bővítmények.
Ebben a cikkben egy olyan megoldást vizsgálunk meg, amellyel közvetlenül az Excel fájl celláiba ágyazhatók be a képek JavaScript használatával. A képeket HTML-elemekből kérik le, és a megfelelő Excel cellákba illesztik be, így zökkenőmentesebb élményt kínálnak azoknak a felhasználóknak, akiknek vizuális adatokra van szükségük a táblázataikban.
Megbeszéljük, hogyan integrálhatunk olyan könyvtárakat, mint az ExcelJS, és hogyan kezeljük az olyan gyakori kihívásokat, mint például a képek beágyazása egy védett Chrome-bővítménykörnyezetbe. Ezenkívül áttekintjük a Node.js és a Chrome-bővítmények közötti különbségeket a sikeres megvalósítás érdekében.
Parancs | Használati példa |
---|---|
ExcelJS.Workbook() | Ezzel új Excel-munkafüzet objektumot hoz létre a Node.js környezetben az ExcelJS könyvtár használatával. Alapvető fontosságú az Excel-fájlok – beleértve a munkalapokat, a formázást és a képeket – a semmiből történő létrehozásához. |
addWorksheet() | Ez a módszer egy új munkalapot ad a munkafüzethez. Ezzel a problémával összefüggésben egy olyan lap létrehozására szolgál, amelybe adatok (szöveg és képek) beilleszthetők. |
axios.get() | Képadatok lekérésére szolgál egy URL-ből. A bináris képadatokat tömbpuffer formátumban kéri le, ami a képek Excel cellákba való beágyazásához szükséges. |
workbook.addImage() | Ez a parancs egy képet ad az Excel-munkafüzethez. A kép bináris adatok puffereként biztosítható, ami elengedhetetlen a képek meghatározott cellákba való beágyazásához. |
worksheet.addImage() | Ez a módszer felelős azért, hogy a hozzáadott képet egy adott cellába vagy cellatartományba helyezze a munkalapon, lehetővé téve a vizuális elemek beágyazását a szöveges adatok mellé. |
fetch() | Böngészőkörnyezetben ezzel a paranccsal kérheti le a képet egy távoli kiszolgálóról, és blobként kérheti le. A blob ezután base64-kódolású karakterláncsá konvertálódik az Excelbe való beágyazáshoz. |
FileReader.readAsDataURL() | Ez a parancs konvertálja a kép URL-jéből lekért blob (bináris nagy objektum) adatokat base64-karakterláncsá, így kompatibilis az Excel-fájlba való beágyazással SheetJS-en keresztül. |
aoa_to_sheet() | Ez a SheetJS-módszer egy tömbtömböt (AoA) alakít át Excel-lappá. Különösen hasznos olyan egyszerű adatszerkezetek beállításához, amelyek szöveget és képeket egyaránt tartalmaznak. |
writeFile() | Ez a funkció az ExcelJS-ben és a SheetJS-ben is elmenti a létrehozott Excel-fájlt a beágyazott képekkel a helyi fájlrendszerbe. Ez az utolsó lépés a munkafüzet létrehozása és az összes szükséges elem hozzáadása után. |
Képek beágyazása Excel cellákba JavaScript és ExcelJS használatával
Az általam biztosított szkript megoldja a képek közvetlenül az Excel cellákba való beágyazásának problémáját JavaScript, ExcelJS és Axios. Először a szkript egy új munkafüzet inicializálásával indul ExcelJS használatával a paranccsal ExcelJS.Workbook(), amely az Excel fájlok létrehozásának alapja. Ezután hívással létrehoz egy munkalapot addWorksheet(). Ez a munkalap az összes hozzáadandó adat és kép tárolójaként működik. A mintaadatok képek URL-jeit tartalmazzák, amelyeket később lekérnek, és bizonyos cellákba ágyaznak be.
A képlekéréshez a szkript az Axios könyvtárat használja axios.get() hogy képeket kérjenek az URL-jükről. Az Axios bináris adatként kéri le a képet a responseType "arraybuffer" használatával, amely alkalmas bináris tartalom, például képek beágyazására az Excel fájlba. Az adatok beérkezése után a kép pufferformátumba kerül, így az ExcelJS képes felismerni azt, mint egy cellába való beágyazást.
A kép lekérése és feldolgozása után a parancs workbook.addImage() a kép beillesztésére szolgál a munkafüzetbe. Ez a lépés meghatározza a képet, és előkészíti a munkalap egy meghatározott helyére történő elhelyezésre. Ezt követően, workheet.addImage() megadja, hogy a kép hova kerüljön, ebben az esetben az aktuális sor "B" oszlopában. A sor magassága úgy van beállítva, hogy a kép jól illeszkedjen a cellába.
Végül a szkript elmenti a munkafüzetet a segítségével workbook.xlsx.writeFile(), amely a fájlt a helyi rendszerbe írja. Ez befejezi a folyamatot, és egy Excel-fájlt kap, amely közvetlenül a cellákba ágyazott képekkel rendelkezik, nem csupán hivatkozásokat. Ez a módszer rendkívül hatékony azokban az esetekben, amikor képeket kell szerepeltetni a jelentésekben vagy adatlapokban, zökkenőmentes élményt biztosítva az adatokat és vizuális elemeket egyaránt tartalmazó Excel-fájlokkal kezelő felhasználók számára.
Képek beágyazása Excel cellákba ExcelJS és Axios használatával
Ez a megoldás Node.js-t, ExcelJS-t használ az Excel-munkafüzet létrehozásához és Axios-t a képadatok lekéréséhez. A képek közvetlenül az Excel cellákba történő beágyazását kezeli.
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);
Képek beágyazása Excelbe Base64 Data és SheetJS használatával
Ez a megoldás a képek lekérésére és base64 formátumba való konvertálására összpontosít, mielőtt beágyazná őket az Excel-fájlba a SheetJS használatával a Chrome bővítménykörnyezetben.
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();
A képbeágyazás optimalizálása Excel-fájlokba a Chrome-bővítményekhez
Kidolgozásakor a Chrome bővítmény amely integrálja a képeket Excel-fájlokba, az egyik legnagyobb kihívás a képbeágyazás kezelése böngésző környezetben. A hagyományos Node.js környezetektől eltérően a Chrome-bővítmények további biztonsági és teljesítménykorlátozásokkal rendelkeznek, amelyek megakadályozzák a közvetlen hozzáférést bizonyos API-khoz. Ez azt jelenti, hogy az olyan módszereknek, mint a képek lekérése olyan könyvtárak használatával, mint például az Axios, alternatívákra lehet szükség a böngésző szabályzatainak való megfeleléshez.
A böngészőkörnyezetek megoldása magában foglalhatja a használatát alap64 kódolt képek a nyers bináris adatok helyett. A Base64 kódolás lehetővé teszi a képek egyszerű átvitelét és sztringként való tárolását, amelyet aztán közvetlenül beágyazhat egy Excel-lapba olyan könyvtárak segítségével, mint a SheetJS. Ebben az esetben a base64 kódolás segít leküzdeni a Chrome által támasztott biztonsági korlátokat, különösen azért, mert a bővítmények nem tudják végrehajtani a Node.js-specifikus kódot.
Egy másik lényeges szempont, amelyet figyelembe kell venni, a nagy képadat-készletek kezelése Excel-fájlokban. Több kép beágyazása egy Excel-lapba drasztikusan megnövelheti a fájl méretét, ami befolyásolhatja a teljesítményt, különösen böngészőalapú alkalmazások esetén. Ennek optimalizálása érdekében a fejlesztőknek olyan tömörített képformátumokat kell használniuk, mint a WebP vagy a JPEG, hogy minimalizálják a fájlméretet, miközben biztosítják a képminőség sértetlenségét.
Gyakori kérdések a képek Excelbe JavaScript segítségével történő beágyazásával kapcsolatban
- Hogyan tölthetek le képeket Chrome-bővítménykörnyezetben?
- Egy Chrome-bővítményben használhatja fetch() képek lekéréséhez egy URL-ről, és konvertálhatja őket base64-re a használatával FileReader beágyazáshoz.
- Milyen formátumban legyenek a képek a nagy fájlméretek elkerülése érdekében?
- Használata javasolt WebP vagy JPEG formátumokat, mivel jobb tömörítést kínálnak, és csökkentik a végső Excel-fájl méretét.
- Lehetséges több kép beágyazása egyetlen Excel fájlba?
- Igen, olyan könyvtárak használatával, mint pl ExcelJS vagy SheetJS, több képet is beágyazhat különböző cellákba a képek URL-jei között.
- Mi a különbség a képek Node.js-be ágyazása és a böngésző között?
- A Node.js-ben használhatja axios.get() képadatok lekéréséhez, miközben böngészőben van, használnia kell fetch() és megfelelően kezelje a CORS házirendeket.
- Hogyan biztosíthatom, hogy a képek megfelelően legyenek átméretezve az Excel celláiban?
- Használja a row.height és addImage() funkciók a képek beágyazott celláinak méreteinek szabályozására, biztosítva a megfelelő megjelenítést.
Utolsó gondolatok a képek beágyazásához Excelbe
Képek beágyazása közvetlenül Excel cellákba a segítségével JavaScript megfelelő eszközöket és könyvtárakat igényel, például az ExcelJS-t, különösen, ha Chrome-bővítménykörnyezetben dolgozik. Lehetővé teszi dinamikusabb és vizuálisan gazdagabb Excel-fájlok létrehozását.
Az olyan optimalizált technikák révén, mint a képadatok bináris formátumban történő lekérése és közvetlenül a cellákba való beágyazása, ez a módszer biztosítja, hogy a létrehozott Excel-fájlok funkcionálisak és látványosak legyenek, és megfeleljenek a különféle webfejlesztési és azon túli felhasználási eseteknek.
Referenciák és további források
- Az ExcelJS Excel-fájlok létrehozásához és kezeléséhez való használatával kapcsolatos részletesebb dokumentációért látogassa meg a webhelyet ExcelJS hivatalos dokumentáció .
- Ha meg szeretné érteni, hogyan lehet képeket lekérni URL-ekről a JavaScript Axios használatával, tekintse meg a következőt: Axios dokumentáció .
- Az Excel-fájlokba ágyazható JavaScript-alapú base64-képkódolással kapcsolatos információkért tekintse meg a webhelyet MDN Web Docs: FileReader.readAsDataURL .
- Ha Chrome-bővítményt fejleszt, és útmutatásra van szüksége az API használatával kapcsolatban, látogassa meg a Chrome-bővítmények fejlesztői útmutatója .