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

Экспорт jQuery в CSV-экспорт

Я использую таблицу jQuery для CSV-плагина. Я изменил всплывающее окно, чтобы он сказал браузеру загрузить CSV файл.

Это было:

function popup(data) {
  var generator = window.open('', 'csv', 'height=400,width=600'); 
  generator.document.write('<html><head><title>CSV</title>'); 
  generator.document.write('</head><body >'); 
  generator.document.write('<textArea cols=70 rows=15 wrap="off" >'); 
  generator.document.write(data); 
  generator.document.write('</textArea>'); 
  generator.document.write('</body></html>'); 
  generator.document.close();
  return true; 
}

Я изменил его на:

function popup(data) {
  window.location='data:text/csv;charset=utf8,' + encodeURIComponent(data);
  return true; 
}

Он работает, по большей части. Он по-прежнему требует, чтобы вы нашли свое программное обеспечение для работы с электронными таблицами и создали свое собственное имя файла... потому что оно создает странное имя файла (пример: 14YuskG_.csv.part).

Любые предложения по улучшению этого?

4b9b3361

Ответ 1

Найдите решение, которое работает (с помощью http://www.topsemtips.com/2008/11/save-html-table-to-excel-using-jquery/):

Я изменил функцию на:

function popup(data) {
    $("#main div.inner").append('<form id="exportform" action="export.php" method="post" target="_blank"><input type="hidden" id="exportdata" name="exportdata" /></form>');
    $("#exportdata").val(data);
    $("#exportform").submit().remove();
    return true; 
}

И создал файл export.php:

<?php

    header("Content-type: application/vnd.ms-excel; name='excel'");
    header("Content-Disposition: filename=export.csv");
    header("Pragma: no-cache");
    header("Expires: 0");

    print $_REQUEST['exportdata'];

?>

Update: Более дружественная версия IE7:

<?php

    header('Content-Type: application/force-download');
    header('Content-disposition: attachment; filename=filename.csv');

    print $_POST['exportdata'];

?>

Ответ 2

спасибо за ваш вопрос и ответ, отлично поработали для меня. Вот (почти идентичная) версия ASP.Net вашего решения, которое я использую:

Заменить всплывающее меню table2CSV.js для:

function popup(data) {
       $("body").append('<form id="exportform" action="CsvExport.ashx" method="post" target="_blank"><input type="hidden" id="exportdata" name="exportdata" /></form>');
       $("#exportdata").val(data);
       $("#exportform").submit().remove();
       return true;
} 

Отмечаем изменение с export.php на общий обработчик .ashx.

Общий код обработчика:

 public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "application/force-download";
    context.Response.AddHeader("content-disposition", "filename=filename.csv");

    context.Response.Write(context.Request.Form["exportdata"]);
}

Ответ 3

Я не рекомендую "загружать" CSV-данные таким образом. IE7 допускает только до 2000 символов в адресной строке, поэтому вероятность того, что ваш файл будет усекаться, очень высок.

Ответ 4

Не совместим со всеми браузерами, но не нужна серверная сторона! Попробуйте использовать код с помощью JSFiddle и сообщите нам, запущен ли он в вашем браузере.

$('<a></a>')
    .attr('id','downloadFile')
    .attr('href','data:text/csv;charset=utf8,' + encodeURIComponent(data))
    .attr('download','filename.csv')
    .appendTo('body');

$('#downloadFile').ready(function() {
    $('#downloadFile').get(0).click();
});