Есть ли способ генерировать Excel/CSV через Javascript? (Он также должен быть совместим с браузером)
Как генерировать Excel через Javascript
Ответ 1
Есть интересный проект по github, называемый Excel Builder (.js)
который предлагает клиентский способ загрузки файлов Excel xlsx и включает в себя параметры форматирования электронной таблицы Excel.
https://github.com/stephenliberty/excel-builder.js
Вы можете столкнуться с проблемами совместимости браузера и Excel с помощью этой библиотеки, но при правильных условиях это может быть весьма полезно.
Демонстрации, похоже, обещают. http://excelbuilderjs.com/index.html
Другой проект github с меньшими вариантами Excel, но меньше забот о проблемах совместимости с Excel можно найти здесь: ExcellentExport.js
https://github.com/jmaister/excellentexport
Если вы используете AngularJS, есть ng-csv:
"Простая директива, которая превращает массивы и объекты в загружаемые CSV файлы".
Ответ 2
Если вы можете создать файл Excel на сервере, это, вероятно, лучший способ. С помощью Excel вы можете добавить форматирование и получить результат, чтобы выглядеть лучше. Несколько параметров Excel уже упомянуты. Если у вас есть PHP-сервер, вы можете рассмотреть phpExcel.
Если вы пытаетесь сделать все на клиенте в javascript, я не думаю, что Excel является опцией. Вы можете создать CSV файл и создать URL-адрес данных, чтобы пользователь мог его загрузить.
Я создал JSFiddle, чтобы продемонстрировать: http://jsfiddle.net/5KRf6/3/
Этот javascript (при условии, что вы используете jQuery) примет значения из полей ввода в таблице и построит строку в формате CSV:
var csv = "";
$("table").find("tr").each(function () {
var sep = "";
$(this).find("input").each(function () {
csv += sep + $(this).val();
sep = ",";
});
csv += "\n";
});
Если вы хотите, вы можете удалить данные в тег на странице (в моем случае тег с идентификатором "csv" ):
$("#csv").text(csv);
Вы можете создать URL-адрес этого текста с помощью этого кода:
window.URL = window.URL || window.webkiURL;
var blob = new Blob([csv]);
var blobURL = window.URL.createObjectURL(blob);
Наконец, это добавит ссылку для загрузки этих данных:
$("#downloadLink").html("");
$("<a></a>").
attr("href", blobURL).
attr("download", "data.csv").
text("Download Data").
appendTo('#downloadLink');
Ответ 3
Похожие ответы размещены здесь.
Ссылка для рабочий пример
var sheet_1_data = [{Col_One:1, Col_Two:11}, {Col_One:2, Col_Two:22}];
var sheet_2_data = [{Col_One:10, Col_Two:110}, {Col_One:20, Col_Two:220}];
var opts = [{sheetid:'Sheet One',header:true},{sheetid:'Sheet Two',header:false}];
var result = alasql('SELECT * INTO XLSX("sample_file.xlsx",?) FROM ?', [opts,[sheet_1_data ,sheet_2_data]]);
Требуются основные библиотеки -
<script src="http://alasql.org/console/alasql.min.js"></script>
<script src="http://alasql.org/console/xlsx.core.min.js"></script>
Ответ 4
Создайте метод обратной передачи AJAX, который записывает CSV файл на ваш веб-сервер и возвращает URL-адрес. Установите скрытый IFrame в браузере в расположение файла CSV на сервере.
Затем ваш пользователь будет представлен ссылкой для загрузки CSV.
Ответ 5
Чтобы ответить на ваш вопрос с помощью рабочего примера:
<script type="text/javascript">
function DownloadJSON2CSV(objArray)
{
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '';
for (var i = 0; i < array.length; i++) {
var line = new Array();
for (var index in array[i]) {
line.push('"' + array[i][index] + '"');
}
str += line.join(';');
str += '\r\n';
}
window.open( "data:text/csv;charset=utf-8," + encodeURIComponent(str));
}
</script>
Ответ 6
Я рекомендую вам сгенерировать XML файл открытого формата, гораздо более гибкий, чем CSV.
Подробнее читайте Создание файла Excel в ASP.NET для получения дополнительной информации
Ответ 7
Мне кажется, что гораздо проще делать на стороне сервера. Но я думаю, у вас есть свои причины. Кроме того, в качестве заметок gmc, отбросьте Excel и сгенерируйте CSV файлы. Это дает дополнительный бонус, который может быть полезен для ваших пользователей, у которых не установлен Excel.