Kujutiste manustamine Exceli failidesse JavaScripti ja SheetJS-iga
Exceli (.xlsx) faile genereeriva Chrome'i laienduse arendamisel võib piltide manustamine otse lahtritesse olla keeruline ülesanne. Kuigi JavaScript ja teegid, nagu SheetJS, lihtsustavad arvutustabelite loomist ja redigeerimist, nõuab manustatud piltide käsitlemine sageli täpsemat käsitsemist.
Paljudel juhtudel seisavad arendajad silmitsi piiranguga, kuna neil on võimalik piltide otse manustamise asemel lisada lahtritesse ainult pildilinke. See probleem tuleneb pildiandmete teisendamise ja Exceli failivormingu keerukusest, eriti brauserikeskkonnas, nagu Chrome'i laiendused.
Selles artiklis uurime lahendust piltide manustamiseks otse Exceli faililahtritesse JavaScripti abil. Pildid tuuakse HTML-i elementidest ja sisestatakse sobivatesse Exceli lahtritesse, pakkudes sujuvamat kasutuskogemust kasutajatele, kes vajavad oma arvutustabelites visuaalseid andmeid.
Arutame, kuidas integreerida teeke, nagu ExcelJS, ja lahendada levinud väljakutseid, nagu piltide manustamine kaitstud Chrome'i laienduskeskkonda. Lisaks vaatame eduka juurutamise tagamiseks üle Node.js-i ja Chrome'i laienduse lähenemisviiside erinevused.
Käsk | Kasutusnäide |
---|---|
ExcelJS.Workbook() | See loob ExcelJS-i teeki kasutades Node.js keskkonnas uue Exceli töövihiku objekti. See on hädavajalik Exceli failide, sealhulgas töölehtede, vormindamise ja piltide nullist genereerimiseks. |
addWorksheet() | See meetod lisab töövihikule uue töölehe. Selle probleemi kontekstis kasutatakse seda lehe loomiseks, kuhu saab sisestada andmeid (nii teksti kui pilte). |
axios.get() | Kasutatakse pildiandmete toomiseks URL-ilt. See hangib binaarkujutise andmed massiivi puhvervormingus, mis on vajalik piltide manustamiseks Exceli lahtritesse. |
workbook.addImage() | See käsk lisab Exceli töövihikusse pildi. Pilti saab pakkuda binaarandmete puhvrina, mis on piltide kindlatesse lahtritesse manustamiseks hädavajalik. |
worksheet.addImage() | See meetod vastutab lisatud pildi paigutamise eest töölehe konkreetsesse lahtrisse või lahtrite vahemikku, võimaldades visuaalsete elementide manustamist koos tekstiandmetega. |
fetch() | Brauseri keskkonnas kasutatakse seda käsku pildi pärimiseks kaugserverist ja selle toomiseks blobina. Seejärel teisendatakse blob Excelisse manustamiseks base64-kodeeringuga stringiks. |
FileReader.readAsDataURL() | See käsk teisendab pildi URL-ist hangitud blob-andmed (suure kahendobjekti) base64-stringiks, muutes selle ühilduvaks SheetJS-i kaudu Exceli faili manustamiseks. |
aoa_to_sheet() | See SheetJS-i meetod teisendab massiivi massiivi (AoA) Exceli leheks. See on eriti kasulik lihtsate andmestruktuuride seadistamiseks, mis sisaldavad nii teksti kui ka pilte. |
writeFile() | See funktsioon nii ExcelJS-is kui ka SheetJS-is salvestab loodud Exceli faili koos manustatud piltidega kohalikku failisüsteemi. See on viimane samm pärast töövihiku loomist ja kõigi vajalike elementide lisamist. |
Kuidas manustada pilte Exceli lahtritesse JavaScripti ja ExcelJS-i abil
Minu pakutud skript lahendab kujutiste otse Exceli lahtritesse manustamise probleemi JavaScript, ExcelJS ja Axios. Esiteks algab skript uue töövihiku lähtestamisega ExcelJS-i abil käsuga ExcelJS. Töövihik(), mis on Exceli failide loomise aluseks. Seejärel loob see helistades töölehe addWorksheet(). See tööleht toimib kõigi lisatavate andmete ja piltide konteinerina. Näidisandmed sisaldavad piltide URL-e, mis hiljem tuuakse ja manustatakse konkreetsetesse lahtritesse.
Pildi toomise käsitlemiseks kasutab skript Axiose teeki koos axios.get() et taotleda pilte oma URL-idelt. Axios hangib pildi binaarandmetena, kasutades vastusetüüpi "massiivipuhver", mis sobib binaarse sisu, näiteks piltide manustamiseks Exceli faili. Pärast andmete saamist teisendatakse pilt puhvervormingusse, mis võimaldab ExcelJS-il tuvastada selle lahtrisse manustamiseks sobiva pildina.
Kui pilt on toodud ja töödeldud, käsk workbook.addImage() kasutatakse pildi sisestamiseks töövihikusse. See samm määratleb pildi ja valmistab selle ette töölehel kindlasse kohta paigutamiseks. Pärast seda, workheet.addImage() määrab, kuhu pilt tuleb paigutada, antud juhul praeguse rea veergu "B". Rea kõrgust reguleeritakse nii, et pilt mahuks hästi lahtrisse.
Lõpuks salvestab skript töövihiku kasutades workbook.xlsx.writeFile(), mis kirjutab faili kohalikku süsteemi. See viib protsessi lõpule, mille tulemuseks on Exceli fail, mille kujutised on manustatud otse lahtritesse, mitte ainult linke. See meetod on väga tõhus juhtudel, kui aruannetesse või andmelehtedesse tuleb lisada pilte, pakkudes sujuvat kogemust kasutajatele, kes suhtlevad nii andmeid kui ka visuaalseid elemente sisaldavate Exceli failidega.
Kujutiste manustamine Exceli lahtritesse ExcelJSi ja Axiose abil
See lahendus kasutab Node.js-i, ExcelJS-i Exceli töövihiku loomiseks ja Axiost pildiandmete toomiseks. See käsitleb piltide manustamist otse Exceli lahtritesse.
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);
Kujutiste manustamine Excelisse Base64 Data ja SheetJS-i abil
See lahendus keskendub piltide toomisele ja nende teisendamisele base64-vormingusse enne nende manustamist Exceli faili kasutades Chrome'i laienduskeskkonnas SheetJS-i.
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();
Kujutiste manustamise optimeerimine Exceli failidesse Chrome'i laienduste jaoks
Arendades a Chrome'i laiendus mis integreerib pildid Exceli failidesse, on üks peamisi väljakutseid, kuidas käsitleda piltide manustamist brauseri keskkonnas. Erinevalt tavapärastest Node.js-i keskkondadest on Chrome'i laiendustel täiendavad turva- ja jõudluspiirangud, mis takistavad otsest juurdepääsu teatud API-dele. See tähendab, et sellised meetodid nagu piltide toomine teekide (nt Axios) abil võivad vajada brauseri eeskirjade järgimiseks alternatiive.
Brauserikeskkondade lahendus võib hõlmata kasutamist alus64 kodeeritud kujutised töötlemata binaarandmete asemel. Base64 kodeering võimaldab pilte hõlpsasti üle kanda ja stringina salvestada, mille saab seejärel otse Exceli lehele manustada, kasutades selliseid teeke nagu SheetJS. Sel juhul aitab base64 kodeering ületada Chrome'i seatud turvapiirangud, eriti kuna laiendused ei saa käivitada Node.js-spetsiifilist koodi.
Veel üks oluline aspekt, mida tuleb arvestada, on suurte pildiandmekogumite käsitlemine Exceli failides. Mitme pildi manustamine Exceli lehele võib faili suurust drastiliselt suurendada, mis võib mõjutada jõudlust, eriti brauseripõhises rakenduses. Selle optimeerimiseks peaksid arendajad kasutama tihendatud pildivorminguid, nagu WebP või JPEG, et minimeerida faili suurust, tagades samal ajal pildikvaliteedi muutumatuks.
Levinud küsimused piltide manustamise kohta JavaScripti Excelisse
- Kuidas saan Chrome'i laienduskeskkonnas pilte tuua?
- Chrome'i laienduses saate kasutada fetch() piltide hankimiseks URL-ist ja teisendamiseks base64-ks kasutades FileReader kinnistamiseks.
- Millises vormingus peaksid pildid olema, et vältida suuri failimahtusid?
- Soovitatav on kasutada WebP või JPEG vormingutes, kuna need pakuvad paremat tihendamist ja vähendavad lõplikku Exceli faili suurust.
- Kas ühte Exceli faili on võimalik manustada mitu pilti?
- Jah, kasutades teeke nagu ExcelJS või SheetJS, saate manustada erinevatesse lahtritesse mitu pilti, sirvides kujutiste URL-ide massiivi.
- Mis vahe on Node.js-i ja brauseri piltide manustamisel?
- Node.js-is saate kasutada axios.get() pildiandmete toomiseks brauseris olles peate kasutama fetch() ja CORS-i eeskirju õigesti käsitlema.
- Kuidas tagada, et piltide suurust muudetakse Exceli lahtrites õigesti?
- Kasutage row.height ja addImage() funktsioonid lahtrite mõõtmete juhtimiseks, kuhu kujutised on manustatud, tagades õige kuvamise.
Viimased mõtted piltide manustamise kohta Excelis
Kujutiste manustamine otse Exceli lahtritesse kasutades JavaScript nõuab õigeid tööriistu ja teeke, nagu ExcelJS, eriti kui töötate Chrome'i laienduskeskkonnas. See võimaldab teil luua dünaamilisemaid ja visuaalselt rikkalikumaid Exceli faile.
Tänu optimeeritud tehnikatele, nagu pildiandmete toomine binaarvormingus ja nende otse lahtritesse manustamine, tagab see meetod, et teie loodud Exceli failid on nii funktsionaalsed kui ka visuaalselt atraktiivsed ning vastavad erinevatele kasutusjuhtudele nii veebiarenduses kui ka mujal.
Viited ja lisaallikad
- Üksikasjalikuma dokumentatsiooni saamiseks selle kohta, kuidas ExcelJS-i kasutada Exceli failide loomiseks ja nendega manipuleerimiseks, külastage ExcelJS ametlik dokumentatsioon .
- Et mõista, kuidas laadida URL-idelt pilte JavaScriptis Axiose abil, vaadake artiklit Axiose dokumentatsioon .
- Kui soovite teavet Exceli failidesse manustamiseks JavaScriptis base64 pildikodeeringuga töötamise kohta, vaadake MDN-i veebidokumendid: FileReader.readAsDataURL .
- Kui arendate Chrome'i laiendust ja vajate API kasutamise kohta juhiseid, külastage veebisaiti Chrome'i laienduste arendaja juhend .