Вбудовування зображень у файли 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-адреси. Він отримує двійкові дані зображення у форматі буфера масиву, який необхідний для вбудовування зображень у клітинки 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.Workbook(), який є основою для створення файлів Excel. Потім він створює робочий аркуш шляхом виклику addWorksheet(). Цей робочий аркуш діє як контейнер для всіх даних і зображень, які будуть додані. Зразок даних містить URL-адреси зображень, які пізніше буде отримано та вставлено в певні комірки.
Щоб отримати зображення, сценарій використовує бібліотеку Axios з axios.get() запитувати зображення з їхніх URL-адрес. Axios отримує зображення як двійкові дані за допомогою responseType "arraybuffer", який підходить для вбудовування двійкового вмісту, наприклад зображень, у файл Excel. Після отримання даних зображення перетворюється у формат буфера, що дозволяє 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
При розробці a Розширення 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, див Документація Axios .
- Щоб отримати інформацію про роботу з кодуванням зображень base64 у JavaScript для вбудовування у файли Excel, перегляньте Веб-документи MDN: FileReader.readAsDataURL .
- Якщо ви розробляєте розширення Chrome і потребуєте вказівок щодо використання API, відвідайте Посібник розробника розширень Chrome .