Bygge inn bilder i Excel-filer med JavaScript og SheetJS
Når du utvikler en Chrome-utvidelse som genererer Excel-filer (.xlsx), kan det være en utfordrende oppgave å bygge inn bilder direkte i celler. Mens JavaScript og biblioteker som SheetJS forenkler oppretting og redigering av regneark, krever håndtering av innebygde bilder ofte mer spesifikk håndtering.
I mange tilfeller står utviklere overfor begrensningen av å bare kunne legge til bildelenker til celler i stedet for å bygge inn bildene direkte. Dette problemet oppstår på grunn av kompleksiteten involvert i konvertering av bildedata og Excel-filformatering, spesielt i et nettlesermiljø som Chrome-utvidelser.
I denne artikkelen vil vi utforske en løsning for å bygge inn bilder direkte i Excel-filceller ved hjelp av JavaScript. Bildene vil bli hentet fra HTML-elementer og satt inn i de riktige Excel-cellene, og gir en mer sømløs opplevelse for brukere som trenger visuelle data i regnearkene sine.
Vi vil diskutere hvordan man integrerer biblioteker som ExcelJS og takler vanlige utfordringer som å bygge inn bilder i et beskyttet Chrome-utvidelsesmiljø. I tillegg vil vi se på forskjellene mellom Node.js og Chrome-utvidelsestilnærminger for å sikre en vellykket implementering.
Kommando | Eksempel på bruk |
---|---|
ExcelJS.Workbook() | Dette oppretter et nytt Excel-arbeidsbokobjekt i Node.js-miljøet ved å bruke ExcelJS-biblioteket. Det er viktig for å generere Excel-filer fra bunnen av, inkludert regneark, formatering og bilder. |
addWorksheet() | Denne metoden legger til et nytt regneark i arbeidsboken. I sammenheng med dette problemet brukes det til å lage et ark der data (både tekst og bilder) kan settes inn. |
axios.get() | Brukes til å hente bildedata fra en URL. Den henter binære bildedata i et matrisebufferformat, som er nødvendig for å bygge inn bilder i Excel-celler. |
workbook.addImage() | Denne kommandoen legger til et bilde i Excel-arbeidsboken. Bildet kan leveres som en buffer av binære data, som er avgjørende for å bygge inn bilder i bestemte celler. |
worksheet.addImage() | Denne metoden er ansvarlig for å plassere det tilføyde bildet i en bestemt celle eller celleområde i regnearket, slik at visuelle elementer kan bygges inn sammen med tekstdata. |
fetch() | I nettlesermiljøet brukes denne kommandoen til å be om bildet fra en ekstern server og hente det som en blob. Blobben konverteres deretter til en base64-kodet streng for innbygging i Excel. |
FileReader.readAsDataURL() | Denne kommandoen konverterer blob-dataene (binært stort objekt) hentet fra bilde-URLen til en base64-streng, noe som gjør det kompatibelt for innebygging i en Excel-fil via SheetJS. |
aoa_to_sheet() | Denne metoden fra SheetJS konverterer en array of arrays (AoA) til et Excel-ark. Det er spesielt nyttig for å sette opp enkle datastrukturer som inkluderer både tekst og bilder. |
writeFile() | Denne funksjonen i både ExcelJS og SheetJS lagrer den genererte Excel-filen med de innebygde bildene til det lokale filsystemet. Det er det siste trinnet etter å ha opprettet arbeidsboken og lagt til alle nødvendige elementer. |
Slik bygger du inn bilder i Excel-celler ved hjelp av JavaScript og ExcelJS
Skriptet jeg har gitt løser problemet med å bygge inn bilder direkte i Excel-celler ved å bruke JavaScript, ExcelJS og Axios. Først starter skriptet med å initialisere en ny arbeidsbok ved hjelp av ExcelJS med kommandoen ExcelJS.Workbook(), som er grunnlaget for å generere Excel-filer. Den lager deretter et regneark ved å ringe addWorksheet(). Dette regnearket fungerer som beholderen for alle dataene og bildene som vil bli lagt til. Eksempeldataene inkluderer bildenettadresser som senere vil bli hentet og innebygd i bestemte celler.
For å håndtere bildehentingen bruker skriptet Axios-biblioteket med axios.get() for å be om bilder fra nettadressene deres. Axios henter bildet som binære data ved å bruke responseType "arraybuffer", som er egnet for å bygge inn binært innhold som bilder i Excel-filen. Etter å ha mottatt dataene, konverteres bildet til et bufferformat, slik at ExcelJS kan gjenkjenne det som et gyldig bilde for innbygging i en celle.
Når bildet er hentet og behandlet, vil kommandoen workbook.addImage() brukes til å sette inn bildet i arbeidsboken. Dette trinnet definerer bildet og forbereder det til å plasseres på et bestemt sted i regnearket. Etter dette, workheet.addImage() angir hvor bildet skal plasseres, i dette tilfellet i kolonnen "B" i gjeldende rad. Radhøyden justeres for å sikre at bildet passer godt inn i cellen.
Til slutt lagrer skriptet arbeidsboken ved hjelp av workbook.xlsx.writeFile(), som skriver filen til det lokale systemet. Dette fullfører prosessen, og resulterer i en Excel-fil med innebygde bilder direkte i cellene, i stedet for bare lenker. Denne metoden er svært effektiv i tilfeller der bilder må inkluderes i rapporter eller dataark, og gir en sømløs opplevelse for brukere som samhandler med Excel-filer som inneholder både data og visuelle elementer.
Bygge inn bilder i Excel-celler ved hjelp av ExcelJS og Axios
Denne løsningen bruker Node.js, ExcelJS for å lage Excel-arbeidsboken og Axios for å hente bildedataene. Den håndterer å bygge inn bilder direkte i Excel-celler.
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);
Bygge inn bilder i Excel ved å bruke Base64 Data og SheetJS
Denne løsningen fokuserer på å hente bilder og konvertere dem til base64-format før de bygges inn i Excel-filen ved hjelp av SheetJS i Chrome-utvidelsesmiljøet.
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();
Optimalisering av bildeinnbygging i Excel-filer for Chrome-utvidelser
Når du utvikler en Chrome-utvidelse som integrerer bilder i Excel-filer, er en stor utfordring hvordan man håndterer bildeinnbygging i et nettlesermiljø. I motsetning til tradisjonelle Node.js-miljøer, kommer Chrome-utvidelser med ytterligere sikkerhets- og ytelsesbegrensninger som forhindrer direkte tilgang til visse APIer. Dette betyr at metoder som å hente bilder ved hjelp av biblioteker som Axios kan trenge alternativer for å overholde nettleserpolicyene.
En løsning for nettlesermiljøer kan innebære bruk base64 kodede bilder i stedet for rå binære data. Base64-koding lar bilder enkelt overføres og lagres som en streng, som deretter kan bygges inn direkte i et Excel-ark ved hjelp av biblioteker som SheetJS. I dette tilfellet hjelper base64-koding med å overvinne sikkerhetsbegrensningene som er pålagt av Chrome, spesielt siden utvidelser ikke kan kjøre Node.js-spesifikk kode.
Et annet viktig aspekt å vurdere er håndteringen av store bildedatasett i Excel-filer. Å bygge inn flere bilder i et Excel-ark kan drastisk øke filstørrelsen, noe som kan påvirke ytelsen, spesielt i et nettleserbasert program. For å optimalisere dette, bør utviklere bruke komprimerte bildeformater som WebP eller JPEG for å minimere filstørrelsen samtidig som bildekvaliteten forblir intakt.
Vanlige spørsmål om å bygge inn bilder i Excel med JavaScript
- Hvordan kan jeg hente bilder i et Chrome-utvidelsesmiljø?
- I en Chrome-utvidelse kan du bruke fetch() for å hente bilder fra en URL og konvertere dem til base64 ved hjelp av FileReader for innbygging.
- Hvilket format bør bildene være i for å unngå store filstørrelser?
- Det anbefales å bruke WebP eller JPEG formater, da de gir bedre komprimering og reduserer den endelige Excel-filstørrelsen.
- Er det mulig å bygge inn flere bilder i en enkelt Excel-fil?
- Ja, bruker biblioteker som ExcelJS eller SheetJS, kan du bygge inn flere bilder i forskjellige celler ved å gå gjennom en rekke bilde-URL-er.
- Hva er forskjellen mellom å bygge inn bilder i Node.js og en nettleser?
- I Node.js kan du bruke axios.get() for å hente bildedata, mens du er i en nettleser, må du bruke fetch() og håndtere CORS-policyer riktig.
- Hvordan sikrer jeg at bildene endres riktig i Excel-celler?
- Bruk row.height og addImage() funksjoner for å kontrollere dimensjonene til cellene der bildene er innebygd, noe som sikrer riktig visning.
Siste tanker om å bygge inn bilder i Excel
Bygge inn bilder direkte i Excel-celler ved hjelp av JavaScript krever de riktige verktøyene og bibliotekene, som ExcelJS, spesielt når du arbeider i et Chrome-utvidelsesmiljø. Den lar deg generere mer dynamiske og visuelt rike Excel-filer.
Gjennom optimaliserte teknikker som å hente bildedata i binært format og legge det direkte inn i celler, sikrer denne metoden at de genererte Excel-filene dine er både funksjonelle og visuelt tiltalende, og møter ulike brukstilfeller i webutvikling og utover.
Referanser og tilleggsressurser
- For mer detaljert dokumentasjon om hvordan du bruker ExcelJS til å lage og manipulere Excel-filer, besøk ExcelJS offisielle dokumentasjon .
- For å forstå hvordan du henter bilder fra URL-er ved å bruke Axios i JavaScript, se Axios dokumentasjon .
- For informasjon om arbeid med base64-bildekoding i JavaScript for innebygging i Excel-filer, sjekk ut MDN Web Docs: FileReader.readAsDataURL .
- Hvis du utvikler en Chrome-utvidelse og trenger veiledning om API-bruk, kan du gå til Utviklerveiledning for Chrome Extensions .