Menyematkan Gambar di File Excel dengan JavaScript dan SheetJS
Saat mengembangkan ekstensi Chrome yang menghasilkan file Excel (.xlsx), menyematkan gambar langsung ke dalam sel bisa menjadi tugas yang menantang. Meskipun JavaScript dan pustaka seperti SheetJS menyederhanakan pembuatan dan pengeditan spreadsheet, penanganan gambar yang disematkan sering kali memerlukan penanganan yang lebih spesifik.
Dalam banyak kasus, pengembang menghadapi keterbatasan karena hanya dapat menambahkan tautan gambar ke sel daripada menyematkan gambar secara langsung. Masalah ini muncul dari kerumitan dalam konversi data gambar dan pemformatan file Excel, khususnya di lingkungan browser seperti ekstensi Chrome.
Pada artikel ini, kita akan mengeksplorasi solusi untuk menyematkan gambar langsung ke sel file Excel menggunakan JavaScript. Gambar akan diambil dari elemen HTML dan dimasukkan ke dalam sel Excel yang sesuai, menawarkan pengalaman yang lebih lancar bagi pengguna yang membutuhkan data visual dalam spreadsheet mereka.
Kami akan membahas cara mengintegrasikan perpustakaan seperti ExcelJS dan mengatasi tantangan umum seperti menyematkan gambar di lingkungan ekstensi Chrome yang dilindungi. Selain itu, kami akan meninjau perbedaan antara pendekatan ekstensi Node.js dan Chrome untuk memastikan penerapan yang sukses.
Memerintah | Contoh penggunaan |
---|---|
ExcelJS.Workbook() | Ini membuat objek buku kerja Excel baru di lingkungan Node.js menggunakan perpustakaan ExcelJS. Penting untuk membuat file Excel dari awal, termasuk lembar kerja, pemformatan, dan gambar. |
addWorksheet() | Metode ini menambahkan lembar kerja baru ke buku kerja. Dalam konteks masalah ini, digunakan untuk membuat lembar tempat data (baik teks maupun gambar) dapat disisipkan. |
axios.get() | Digunakan untuk mengambil data gambar dari URL. Ini mengambil data gambar biner dalam format buffer array, yang diperlukan untuk menyematkan gambar ke dalam sel Excel. |
workbook.addImage() | Perintah ini menambahkan gambar ke buku kerja Excel. Gambar dapat disediakan sebagai buffer data biner, yang penting untuk menyematkan gambar ke dalam sel tertentu. |
worksheet.addImage() | Metode ini bertanggung jawab untuk menempatkan gambar yang ditambahkan ke dalam sel atau rentang sel tertentu di lembar kerja, memungkinkan elemen visual untuk disematkan bersama data tekstual. |
fetch() | Di lingkungan browser, perintah ini digunakan untuk meminta gambar dari server jarak jauh dan mengambilnya sebagai blob. Gumpalan tersebut kemudian dikonversi menjadi string berkode base64 untuk disematkan di Excel. |
FileReader.readAsDataURL() | Perintah ini mengonversi data blob (objek biner besar) yang diambil dari URL gambar menjadi string base64, sehingga kompatibel untuk disematkan ke dalam file Excel melalui SheetJS. |
aoa_to_sheet() | Metode dari SheetJS ini mengubah array array (AoA) menjadi lembar Excel. Hal ini sangat berguna untuk menyiapkan struktur data sederhana yang mencakup teks dan gambar. |
writeFile() | Fungsi di ExcelJS dan SheetJS ini menyimpan file Excel yang dihasilkan dengan gambar yang disematkan ke sistem file lokal. Ini adalah langkah terakhir setelah membuat buku kerja dan menambahkan semua elemen yang diperlukan. |
Cara Menyematkan Gambar ke Sel Excel Menggunakan JavaScript dan ExcelJS
Skrip yang saya sediakan memecahkan masalah menyematkan gambar langsung ke sel Excel menggunakan JavaScript, ExcelJS, dan Axios. Pertama, skrip dimulai dengan menginisialisasi buku kerja baru menggunakan ExcelJS dengan perintah ExcelJS.Buku Kerja(), yang merupakan dasar untuk menghasilkan file Excel. Kemudian membuat lembar kerja dengan menelepon tambahkanLembar Kerja(). Lembar kerja ini bertindak sebagai wadah untuk semua data dan gambar yang akan ditambahkan. Data sampel mencakup URL gambar yang nantinya akan diambil dan disematkan ke dalam sel tertentu.
Untuk menangani pengambilan gambar, skrip menggunakan perpustakaan Axios dengan aksio.get() untuk meminta gambar dari URL mereka. Axios mengambil gambar sebagai data biner menggunakan "arraybuffer" tipe respons, yang cocok untuk menyematkan konten biner seperti gambar ke dalam file Excel. Setelah menerima data, gambar diubah menjadi format buffer, memungkinkan ExcelJS mengenalinya sebagai gambar yang valid untuk disematkan ke dalam sel.
Setelah gambar diambil dan diproses, perintahnya buku kerja.addImage() digunakan untuk memasukkan gambar ke dalam buku kerja. Langkah ini mendefinisikan gambar dan mempersiapkannya untuk ditempatkan di lokasi tertentu dalam lembar kerja. Setelah ini, lembar kerja.tambahkanGambar() menentukan di mana gambar harus ditempatkan, dalam hal ini di kolom "B" pada baris saat ini. Ketinggian baris disesuaikan untuk memastikan gambar pas di dalam sel.
Terakhir, skrip menyimpan buku kerja menggunakan buku kerja.xlsx.writeFile(), yang menulis file ke sistem lokal. Ini menyelesaikan prosesnya, menghasilkan file Excel dengan gambar yang disematkan langsung di sel, bukan hanya tautan. Metode ini sangat efektif jika gambar perlu disertakan dalam laporan atau lembar data, memberikan pengalaman yang lancar bagi pengguna saat berinteraksi dengan file Excel yang berisi data dan elemen visual.
Menyematkan Gambar ke Sel Excel Menggunakan ExcelJS dan Axios
Solusi ini menggunakan Node.js, ExcelJS untuk membuat buku kerja Excel, dan Axios untuk mengambil data gambar. Ini menangani penyematan gambar langsung ke sel 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);
Menyematkan Gambar di Excel Menggunakan Data Base64 dan SheetJS
Solusi ini berfokus pada pengambilan gambar dan mengonversinya ke format base64 sebelum menyematkannya ke dalam file Excel menggunakan SheetJS di lingkungan ekstensi 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();
Mengoptimalkan Penyematan Gambar di File Excel untuk Ekstensi Chrome
Saat mengembangkan a Ekstensi Chrome yang mengintegrasikan gambar ke dalam file Excel, salah satu tantangan utamanya adalah bagaimana menangani penyematan gambar dalam lingkungan browser. Tidak seperti lingkungan Node.js tradisional, ekstensi Chrome dilengkapi dengan batasan keamanan dan kinerja tambahan yang mencegah akses langsung ke API tertentu. Ini berarti metode seperti mengambil gambar menggunakan pustaka seperti Axios mungkin memerlukan alternatif untuk mematuhi kebijakan browser.
Solusi untuk lingkungan browser mungkin melibatkan penggunaan base64 gambar yang disandikan, bukan data biner mentah. Pengkodean Base64 memungkinkan gambar dengan mudah ditransfer dan disimpan sebagai string, yang kemudian dapat disematkan langsung ke dalam lembar Excel menggunakan pustaka seperti SheetJS. Dalam hal ini, pengkodean base64 membantu mengatasi batasan keamanan yang diberlakukan oleh Chrome, terutama karena ekstensi tidak dapat mengeksekusi kode khusus Node.js.
Aspek penting lainnya yang perlu dipertimbangkan adalah penanganan kumpulan data gambar berukuran besar dalam file Excel. Menyematkan banyak gambar ke dalam lembar Excel dapat meningkatkan ukuran file secara drastis, yang dapat memengaruhi kinerja, terutama dalam aplikasi berbasis browser. Untuk mengoptimalkannya, pengembang sebaiknya menggunakan format gambar terkompresi seperti WebP atau JPEG untuk meminimalkan ukuran file sekaligus memastikan kualitas gambar tetap utuh.
Pertanyaan Umum tentang Menyematkan Gambar ke Excel dengan JavaScript
- Bagaimana cara mengambil gambar di lingkungan ekstensi Chrome?
- Di ekstensi Chrome, Anda dapat menggunakan fetch() untuk mengambil gambar dari URL dan mengonversinya ke base64 menggunakan FileReader untuk penyematan.
- Format gambar apa yang harus digunakan untuk menghindari ukuran file besar?
- Disarankan untuk digunakan WebP atau JPEG format, karena menawarkan kompresi yang lebih baik dan mengurangi ukuran file Excel akhir.
- Apakah mungkin untuk menyematkan banyak gambar ke dalam satu file Excel?
- Ya, menggunakan perpustakaan seperti ExcelJS atau SheetJS, Anda dapat menyematkan beberapa gambar di sel yang berbeda dengan mengulang serangkaian URL gambar.
- Apa perbedaan antara menyematkan gambar di Node.js dan browser?
- Di Node.js, Anda dapat menggunakan axios.get() untuk mengambil data gambar, saat berada di browser, Anda perlu menggunakan fetch() dan menangani kebijakan CORS dengan benar.
- Bagaimana cara memastikan bahwa gambar diubah ukurannya dengan benar di sel Excel?
- Gunakan row.height Dan addImage() berfungsi untuk mengontrol dimensi sel tempat gambar disematkan, memastikan tampilan yang tepat.
Pemikiran Akhir tentang Menyematkan Gambar di Excel
Menyematkan gambar langsung ke sel Excel menggunakan JavaScript memerlukan alat dan pustaka yang tepat, seperti ExcelJS, terutama saat bekerja dalam lingkungan ekstensi Chrome. Ini memungkinkan Anda menghasilkan file Excel yang lebih dinamis dan kaya visual.
Melalui teknik yang dioptimalkan seperti mengambil data gambar dalam format biner dan menyematkannya langsung ke dalam sel, metode ini memastikan bahwa file Excel yang Anda hasilkan berfungsi dan menarik secara visual, memenuhi berbagai kasus penggunaan dalam pengembangan web dan seterusnya.
Referensi dan Sumber Tambahan
- Untuk dokumentasi lebih rinci tentang cara menggunakan ExcelJS untuk membuat dan memanipulasi file Excel, kunjungi Dokumentasi Resmi ExcelJS .
- Untuk memahami cara mengambil gambar dari URL menggunakan Axios di JavaScript, lihat Dokumentasi Aksio .
- Untuk informasi tentang bekerja dengan pengkodean gambar base64 dalam JavaScript untuk disematkan dalam file Excel, lihat Dokumen Web MDN: FileReader.readAsDataURL .
- Jika Anda sedang mengembangkan Ekstensi Chrome dan memerlukan panduan tentang penggunaan API, kunjungi Panduan Pengembang Ekstensi Chrome .