Ενσωμάτωση εικόνων σε αρχεία Excel με JavaScript και SheetJS
Κατά την ανάπτυξη μιας επέκτασης Chrome που δημιουργεί αρχεία Excel (.xlsx), η ενσωμάτωση εικόνων απευθείας σε κελιά μπορεί να είναι μια πρόκληση. Ενώ η JavaScript και οι βιβλιοθήκες όπως το SheetJS απλοποιούν τη δημιουργία και την επεξεργασία υπολογιστικών φύλλων, ο χειρισμός των ενσωματωμένων εικόνων απαιτεί συχνά πιο συγκεκριμένο χειρισμό.
Σε πολλές περιπτώσεις, οι προγραμματιστές αντιμετωπίζουν τον περιορισμό της δυνατότητας μόνο προσθήκης συνδέσμων εικόνων σε κελιά αντί να ενσωματώνουν απευθείας τις εικόνες. Αυτό το ζήτημα προκύπτει από τις πολυπλοκότητες που σχετίζονται με τη μετατροπή δεδομένων εικόνας και τη μορφοποίηση αρχείων Excel, ιδιαίτερα σε ένα περιβάλλον προγράμματος περιήγησης όπως οι επεκτάσεις του Chrome.
Σε αυτό το άρθρο, θα εξερευνήσουμε μια λύση για την ενσωμάτωση εικόνων απευθείας σε κελιά αρχείου Excel χρησιμοποιώντας JavaScript. Οι εικόνες θα ληφθούν από στοιχεία HTML και θα εισαχθούν στα κατάλληλα κελιά του Excel, προσφέροντας μια πιο απρόσκοπτη εμπειρία για τους χρήστες που χρειάζονται οπτικά δεδομένα στα υπολογιστικά φύλλα τους.
Θα συζητήσουμε πώς να ενοποιήσουμε βιβλιοθήκες όπως το ExcelJS και να αντιμετωπίσουμε κοινές προκλήσεις, όπως η ενσωμάτωση εικόνων σε ένα προστατευμένο περιβάλλον επέκτασης Chrome. Επιπλέον, θα εξετάσουμε τις διαφορές μεταξύ των προσεγγίσεων επέκτασης Node.js και Chrome για να διασφαλίσουμε την επιτυχή εφαρμογή.
Εντολή | Παράδειγμα χρήσης |
---|---|
ExcelJS.Workbook() | Αυτό δημιουργεί ένα νέο αντικείμενο βιβλίου εργασίας του Excel στο περιβάλλον Node.js χρησιμοποιώντας τη βιβλιοθήκη ExcelJS. Είναι απαραίτητο για τη δημιουργία αρχείων Excel από την αρχή, συμπεριλαμβανομένων των φύλλων εργασίας, της μορφοποίησης και των εικόνων. |
addWorksheet() | Αυτή η μέθοδος προσθέτει ένα νέο φύλλο εργασίας στο βιβλίο εργασίας. Στο πλαίσιο αυτού του προβλήματος, χρησιμοποιείται για τη δημιουργία ενός φύλλου όπου μπορούν να εισαχθούν δεδομένα (και κείμενο και εικόνες). |
axios.get() | Χρησιμοποιείται για τη λήψη δεδομένων εικόνας από μια διεύθυνση URL. Ανακτά δεδομένα δυαδικής εικόνας σε μορφή buffer πίνακα, η οποία είναι απαραίτητη για την ενσωμάτωση εικόνων σε κελιά Excel. |
workbook.addImage() | Αυτή η εντολή προσθέτει μια εικόνα στο βιβλίο εργασίας του Excel. Η εικόνα μπορεί να παρέχεται ως προσωρινή μνήμη δυαδικών δεδομένων, η οποία είναι απαραίτητη για την ενσωμάτωση εικόνων σε συγκεκριμένα κελιά. |
worksheet.addImage() | Αυτή η μέθοδος είναι υπεύθυνη για την τοποθέτηση της προστιθέμενης εικόνας σε ένα συγκεκριμένο κελί ή εύρος κελιών στο φύλλο εργασίας, επιτρέποντας την ενσωμάτωση οπτικών στοιχείων μαζί με δεδομένα κειμένου. |
fetch() | Στο περιβάλλον του προγράμματος περιήγησης, αυτή η εντολή χρησιμοποιείται για να ζητήσει την εικόνα από έναν απομακρυσμένο διακομιστή και να την ανακτήσει ως blob. Στη συνέχεια, το blob μετατρέπεται σε μια συμβολοσειρά με κωδικοποίηση base64 για ενσωμάτωση στο Excel. |
FileReader.readAsDataURL() | Αυτή η εντολή μετατρέπει τα δεδομένα blob (δυαδικό μεγάλο αντικείμενο) που ανακτώνται από τη διεύθυνση URL της εικόνας σε μια συμβολοσειρά base64, καθιστώντας την συμβατή για ενσωμάτωση σε ένα αρχείο Excel μέσω του SheetJS. |
aoa_to_sheet() | Αυτή η μέθοδος από το SheetJS μετατρέπει έναν πίνακα πινάκων (AoA) σε ένα φύλλο Excel. Είναι ιδιαίτερα χρήσιμο για τη ρύθμιση απλών δομών δεδομένων που περιλαμβάνουν κείμενο και εικόνες. |
writeFile() | Αυτή η λειτουργία τόσο στο ExcelJS όσο και στο SheetJS αποθηκεύει το αρχείο Excel που δημιουργείται με τις ενσωματωμένες εικόνες στο τοπικό σύστημα αρχείων. Είναι το τελευταίο βήμα μετά τη δημιουργία του βιβλίου εργασίας και την προσθήκη όλων των απαραίτητων στοιχείων. |
Πώς να ενσωματώσετε εικόνες σε κελιά Excel χρησιμοποιώντας JavaScript και ExcelJS
Το σενάριο που παρείχα επιλύει το πρόβλημα της ενσωμάτωσης εικόνων απευθείας σε κελιά του Excel χρησιμοποιώντας JavaScript, ExcelJS και Axios. Αρχικά, το σενάριο ξεκινά με την προετοιμασία ενός νέου βιβλίου εργασίας χρησιμοποιώντας το ExcelJS με την εντολή ExcelJS.Βιβλίο εργασίας(), που αποτελεί τη βάση για τη δημιουργία αρχείων Excel. Στη συνέχεια, δημιουργεί ένα φύλλο εργασίας καλώντας add Worksheet(). Αυτό το φύλλο εργασίας λειτουργεί ως κοντέινερ για όλα τα δεδομένα και τις εικόνες που θα προστεθούν. Τα δείγματα δεδομένων περιλαμβάνουν διευθύνσεις URL εικόνων που αργότερα θα ανακτηθούν και θα ενσωματωθούν σε συγκεκριμένα κελιά.
Για να χειριστεί την ανάκτηση εικόνας, το σενάριο χρησιμοποιεί τη βιβλιοθήκη Axios με axios.get() να ζητήσουν εικόνες από τις διευθύνσεις URL τους. Το Axios ανακτά την εικόνα ως δυαδικά δεδομένα χρησιμοποιώντας το answerType "arraybuffer", το οποίο είναι κατάλληλο για την ενσωμάτωση δυαδικού περιεχομένου όπως εικόνες στο αρχείο Excel. Μετά τη λήψη των δεδομένων, η εικόνα μετατρέπεται σε μορφή buffer, επιτρέποντας στο ExcelJS να την αναγνωρίσει ως έγκυρη εικόνα για ενσωμάτωση σε ένα κελί.
Μόλις ληφθεί και επεξεργαστεί η εικόνα, η εντολή workbook.addImage() χρησιμοποιείται για την εισαγωγή της εικόνας στο βιβλίο εργασίας. Αυτό το βήμα ορίζει την εικόνα και την προετοιμάζει για να τοποθετηθεί σε μια συγκεκριμένη θέση μέσα στο φύλλο εργασίας. Μετά από αυτό, worksheet.addImage() καθορίζει πού πρέπει να τοποθετηθεί η εικόνα, σε αυτήν την περίπτωση στη στήλη "B" της τρέχουσας σειράς. Το ύψος της σειράς προσαρμόζεται για να διασφαλιστεί ότι η εικόνα ταιριάζει καλά στο κελί.
Τέλος, το σενάριο αποθηκεύει το βιβλίο εργασίας χρησιμοποιώντας workbook.xlsx.writeFile(), το οποίο εγγράφει το αρχείο στο τοπικό σύστημα. Αυτό ολοκληρώνει τη διαδικασία, με αποτέλεσμα ένα αρχείο Excel με ενσωματωμένες εικόνες απευθείας στα κελιά και όχι απλώς συνδέσμους. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική σε περιπτώσεις όπου οι εικόνες πρέπει να συμπεριληφθούν σε αναφορές ή φύλλα δεδομένων, παρέχοντας μια απρόσκοπτη εμπειρία στους χρήστες που αλληλεπιδρούν με αρχεία Excel που περιέχουν δεδομένα και οπτικά στοιχεία.
Ενσωμάτωση εικόνων σε κελιά Excel χρησιμοποιώντας ExcelJS και Axios
Αυτή η λύση χρησιμοποιεί Node.js, ExcelJS για τη δημιουργία του βιβλίου εργασίας του Excel και Axios για την ανάκτηση των δεδομένων εικόνας. Χειρίζεται την ενσωμάτωση εικόνων απευθείας σε κελιά του 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);
Ενσωμάτωση εικόνων στο Excel με χρήση δεδομένων Base64 και SheetJS
Αυτή η λύση εστιάζει στην ανάκτηση εικόνων και στη μετατροπή τους σε μορφή base64 πριν τις ενσωματώσει στο αρχείο Excel χρησιμοποιώντας το SheetJS στο περιβάλλον επέκτασης 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();
Βελτιστοποίηση της ενσωμάτωσης εικόνας σε αρχεία Excel για επεκτάσεις Chrome
Κατά την ανάπτυξη α Επέκταση Chrome που ενσωματώνει εικόνες σε αρχεία Excel, μια σημαντική πρόκληση είναι πώς να χειριστείτε την ενσωμάτωση εικόνας σε ένα περιβάλλον προγράμματος περιήγησης. Σε αντίθεση με τα παραδοσιακά περιβάλλοντα Node.js, οι επεκτάσεις του Chrome συνοδεύονται από πρόσθετους περιορισμούς ασφάλειας και απόδοσης που εμποδίζουν την άμεση πρόσβαση σε ορισμένα API. Αυτό σημαίνει ότι μέθοδοι όπως η ανάκτηση εικόνων χρησιμοποιώντας βιβλιοθήκες όπως το Axios ενδέχεται να χρειάζονται εναλλακτικές λύσεις για τη συμμόρφωση με τις πολιτικές του προγράμματος περιήγησης.
Μια λύση για περιβάλλοντα προγράμματος περιήγησης θα μπορούσε να περιλαμβάνει τη χρήση βάση64 κωδικοποιημένες εικόνες αντί για ακατέργαστα δυαδικά δεδομένα. Η κωδικοποίηση Base64 επιτρέπει την εύκολη μεταφορά και αποθήκευση εικόνων ως συμβολοσειρά, η οποία στη συνέχεια μπορεί να ενσωματωθεί απευθείας σε ένα φύλλο Excel χρησιμοποιώντας βιβλιοθήκες όπως το SheetJS. Σε αυτήν την περίπτωση, η κωδικοποίηση base64 βοηθά να ξεπεραστούν οι περιορισμοί ασφαλείας που επιβάλλονται από το Chrome, ειδικά επειδή οι επεκτάσεις δεν μπορούν να εκτελέσουν κώδικα για το Node.js.
Μια άλλη κρίσιμη πτυχή που πρέπει να λάβετε υπόψη είναι ο χειρισμός μεγάλων συνόλων δεδομένων εικόνας σε αρχεία Excel. Η ενσωμάτωση πολλών εικόνων σε ένα φύλλο Excel μπορεί να αυξήσει δραστικά το μέγεθος του αρχείου, γεγονός που θα μπορούσε να επηρεάσει την απόδοση, ειδικά σε μια εφαρμογή που βασίζεται σε πρόγραμμα περιήγησης. Για να βελτιστοποιηθεί αυτό, οι προγραμματιστές θα πρέπει να χρησιμοποιούν συμπιεσμένες μορφές εικόνας όπως WebP ή JPEG για να ελαχιστοποιήσουν το μέγεθος του αρχείου, διασφαλίζοντας παράλληλα ότι η ποιότητα της εικόνας παραμένει ανέπαφη.
Συνήθεις ερωτήσεις σχετικά με την ενσωμάτωση εικόνων στο Excel με JavaScript
- Πώς μπορώ να ανακτήσω εικόνες σε περιβάλλον επέκτασης Chrome;
- Σε μια επέκταση Chrome, μπορείτε να χρησιμοποιήσετε fetch() για να ανακτήσετε εικόνες από μια διεύθυνση URL και να τις μετατρέψετε σε base64 χρησιμοποιώντας FileReader για ενσωμάτωση.
- Σε ποια μορφή πρέπει να είναι οι εικόνες για να αποφευχθούν μεγάλα μεγέθη αρχείων;
- Συνιστάται η χρήση WebP ή JPEG φορμά, καθώς προσφέρουν καλύτερη συμπίεση και μειώνουν το τελικό μέγεθος αρχείου Excel.
- Είναι δυνατή η ενσωμάτωση πολλών εικόνων σε ένα μόνο αρχείο Excel;
- Ναι, χρησιμοποιώντας βιβλιοθήκες όπως ExcelJS ή SheetJS, μπορείτε να ενσωματώσετε πολλές εικόνες σε διαφορετικά κελιά κάνοντας βρόχο μέσω μιας σειράς διευθύνσεων URL εικόνων.
- Ποια είναι η διαφορά μεταξύ της ενσωμάτωσης εικόνων στο Node.js και ενός προγράμματος περιήγησης;
- Στο Node.js, μπορείτε να χρησιμοποιήσετε axios.get() για να ανακτήσετε δεδομένα εικόνας, ενώ βρίσκεστε σε πρόγραμμα περιήγησης, πρέπει να χρησιμοποιήσετε fetch() και να χειριστείτε σωστά τις πολιτικές CORS.
- Πώς μπορώ να διασφαλίσω ότι το μέγεθος των εικόνων έχει αλλάξει σωστά στα κελιά του Excel;
- Χρησιμοποιήστε το row.height και addImage() λειτουργίες για τον έλεγχο των διαστάσεων των κελιών όπου είναι ενσωματωμένες οι εικόνες, διασφαλίζοντας τη σωστή εμφάνιση.
Τελικές σκέψεις για την ενσωμάτωση εικόνων στο Excel
Ενσωμάτωση εικόνων απευθείας σε κελιά του Excel χρησιμοποιώντας JavaScript απαιτεί τα σωστά εργαλεία και βιβλιοθήκες, όπως το ExcelJS, ειδικά όταν εργάζεστε σε περιβάλλον επέκτασης Chrome. Σας επιτρέπει να δημιουργείτε πιο δυναμικά και οπτικά πλούσια αρχεία Excel.
Μέσω βελτιστοποιημένων τεχνικών, όπως η ανάκτηση δεδομένων εικόνας σε δυαδική μορφή και η ενσωμάτωσή τους απευθείας σε κελιά, αυτή η μέθοδος διασφαλίζει ότι τα αρχεία Excel που δημιουργούνται είναι λειτουργικά και ελκυστικά οπτικά, ικανοποιώντας διάφορες περιπτώσεις χρήσης στην ανάπτυξη ιστού και όχι μόνο.
Αναφορές και πρόσθετοι πόροι
- Για πιο λεπτομερή τεκμηρίωση σχετικά με τον τρόπο χρήσης του ExcelJS για τη δημιουργία και τον χειρισμό αρχείων Excel, επισκεφτείτε το Επίσημη Τεκμηρίωση ExcelJS .
- Για να κατανοήσετε πώς να λαμβάνετε εικόνες από διευθύνσεις URL χρησιμοποιώντας το Axios σε JavaScript, ανατρέξτε στο Τεκμηρίωση Αξιού .
- Για πληροφορίες σχετικά με την εργασία με την κωδικοποίηση εικόνας base64 σε JavaScript για ενσωμάτωση σε αρχεία Excel, ρίξτε μια ματιά Έγγραφα Ιστού MDN: FileReader.readAsDataURL .
- Εάν αναπτύσσετε μια επέκταση Chrome και χρειάζεστε καθοδήγηση σχετικά με τη χρήση του API, επισκεφτείτε το Οδηγός προγραμματιστή επεκτάσεων Chrome .