Подтвердить что ты не робот

Как генерировать Excel через Javascript

Есть ли способ генерировать Excel/CSV через Javascript? (Он также должен быть совместим с браузером)

4b9b3361

Ответ 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.