У нас есть шаблон отчета Excel, в котором есть некоторый текст-заполнитель (ключи), который будет заменен определенными значениями при создании отчета.
мы искали везде, но не смогли найти решения с помощью javascript (я знаю, что мы можем сделать это с помощью С#/.Net, но наш проект использует AngularCLI, и манипуляция выполняется с помощью javascript).
мы видели/читали о exceljs, но все же это не соответствует этому требованию.
есть ли способ или какая-либо JS-библиотека, способная выполнить эту конкретную задачу, или нам не повезло?
@Richard Нет, это не может быть полезно для нас, в нашем случае мы не будем создавать шаблоны Excel, в нашем сценарии пользователи могут загружать свои собственные шаблоны Excel (для целей отчета) с переменными текстами в качестве заполнителей (человека имя, телефон, адрес .. и т. д.)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Решением этой проблемы, которое мы реализовали, было использование docxtemplater, но мы сделали это с помощью word(docx), а не excel.
docxtemplater — это библиотека для создания документов docx/pptx из шаблон docx/pptx. Он может заменить {placeholders} данными, а также поддерживает циклы и условия. Шаблоны можно редактировать не программисты, например, ваши клиенты
Он доступен как npm: docxtemplater
пример кода взят из docs:
const PizZip = require("pizzip");
const Docxtemplater = require("docxtemplater");
const fs = require("fs");
const path = require("path");
// Load the docx file as binary content
const content = fs.readFileSync(
path.resolve(__dirname, "input.docx"),
"binary"
);
const zip = new PizZip(content);
const doc = new Docxtemplater(zip, {
paragraphLoop: true,
linebreaks: true,
});
// Render the document (Replace {first_name} by John, {last_name} by Doe, ...)
doc.render({
first_name: "John",
last_name: "Doe",
phone: "0652455478",
description: "New Website",
});
const buf = doc.getZip().generate({
type: "nodebuffer",
// compression: DEFLATE adds a compression step.
// For a 50MB output document, expect 500ms additional CPU time
compression: "DEFLATE",
});
// buf is a nodejs Buffer, you can either write it to a
// file or res.send it with express for example.
fs.writeFileSync(path.resolve(__dirname, "output.docx"), buf);
Вы нашли или просмотрели JHXLSX («библиотека JavaScript, зависящая от jQuery, для загрузки или создания электронных таблиц Excel XLSX с использованием JavaScript (JSON)»). Возможно, вам будет лучше, если шаблон получит доступ к другой книге, содержащей только данные, и создаст книгу «данные» с помощью Javascript.