2008-12-02 24 views
39

Có cách nào để tạo Excel/CSV qua Javascript không? (Trình duyệt phải tương thích với trình duyệt)cách tạo Excel qua Javascript

+2

Bạn có thể tạo một download CSV từ Javascript với HTML 5 trong một số trình duyệt: xem câu trả lời chấp nhận http://stackoverflow.com/câu hỏi/17836273/trực tiếp-đầu ra-javascript-tính-as-csv-cho-tải-mà không-thêm-serv/17836529? noredirect = 1 # bình luận26036496_17836529 – Paul

Trả lời

3

Tạo phương thức postback AJAX ghi tệp CSV vào máy chủ web của bạn và trả về url .. Đặt IFrame ẩn trong trình duyệt đến vị trí của tệp CSV trên máy chủ.

Người dùng của bạn sau đó sẽ được hiển thị với liên kết tải xuống CSV.

+4

Kinda ngớ ngẩn mặc dù - truyền dữ liệu trở lại máy chủ chỉ để nó có thể phục vụ nó ngay cho người dùng. Ngoài ra, XLS được tạo ra có thể khá lớn. (có lẽ đó là lý do tại sao tác giả muốn tạo ra nó phía máy khách?) Có lẽ sau đó nó tốt hơn để tạo ra phía máy chủ XLS quá? –

-2

Dường như với tôi dễ dàng hơn nhiều khi thực hiện ở phía máy chủ. Nhưng tôi đoán bạn có lý do của bạn. Ngoài ra, như gmc ghi chú, hãy thả Excel và tạo tệp CSV thay thế. Điều này có thêm tiền thưởng là hữu ích cho những người dùng của bạn mà không có cài đặt Excel.

-1

Tôi khuyên bạn nên tạo tệp XML Excel định dạng mở, linh hoạt hơn nhiều so với CSV.
Đọc Generating an Excel file in ASP.NET để biết thêm thông tin

22

Nếu bạn có thể tạo tệp Excel trên máy chủ, đó có lẽ là cách tốt nhất. Với Excel, bạn có thể thêm định dạng và làm cho đầu ra trông đẹp hơn. Một số tùy chọn Excel đã được đề cập. Nếu bạn có một chương trình phụ trợ PHP, bạn có thể xem xét phpExcel.

Nếu bạn đang cố gắng làm mọi thứ trên máy khách trong javascript, tôi không nghĩ Excel là một tùy chọn. Bạn có thể tạo tệp CSV và tạo URL dữ liệu để cho phép người dùng tải xuống tệp đó.

Tôi tạo ra một JSFiddle để chứng minh: http://jsfiddle.net/5KRf6/3/

javascript này (giả sử bạn đang sử dụng jQuery) sẽ mất các giá trị ra khỏi hộp đầu vào trong một bảng và xây dựng một chuỗi CSV được định dạng:

var csv = ""; 
$("table").find("tr").each(function() { 
    var sep = ""; 
    $(this).find("input").each(function() { 
     csv += sep + $(this).val(); 
     sep = ","; 
    }); 
    csv += "\n"; 
}); 

Nếu bạn muốn, bạn có thể thả dữ liệu vào một thẻ trên trang (trong trường hợp của tôi một thẻ với một id của "csv"):

$("#csv").text(csv); 

bạn có thể tạo ra một URL với văn bản với mã này:

window.URL = window.URL || window.webkiURL; 
var blob = new Blob([csv]); 
var blobURL = window.URL.createObjectURL(blob); 

Cuối cùng, điều này sẽ thêm một liên kết để tải dữ liệu:

$("#downloadLink").html(""); 
$("<a></a>"). 
attr("href", blobURL). 
attr("download", "data.csv"). 
text("Download Data"). 
appendTo('#downloadLink'); 
+0

câu trả lời hay, +1 – SpringLearner

0

Để trả lời câu hỏi của bạn với một ví dụ làm việc:

<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> 
+0

Hạn chế duy nhất là bạn không thể quyết định tệp nào được gọi. Bạn sẽ phải dựa vào người dùng để lưu nó dưới dạng * .csv, nếu họ muốn mở nó dễ dàng. – Fireworm

37

Có một dự án thú vị trên github được gọi là Excel Builder (.js) cung cấp cách khách hàng tải xuống Excel xlsx tệp và bao gồm các tùy chọn để định dạng bảng tính Excel.
https://github.com/stephenliberty/excel-builder.js

Bạn có thể gặp phải cả vấn đề tương thích với trình duyệt và Excel khi sử dụng thư viện này, nhưng trong điều kiện thích hợp, nó có thể khá hữu ích.

Trình diễn dường như giữ một số lời hứa.
http://excelbuilderjs.com/index.html

Một dự án github với các tùy chọn Excel ít nhưng lo lắng ít về vấn đề tương thích Excel có thể được tìm thấy ở đây: ExcellentExport.js
https://github.com/jmaister/excellentexport

Nếu bạn đang sử dụng AngularJS, có ng-csv:
"Chỉ thị đơn giản sẽ biến mảng và đối tượng thành tệp CSV có thể tải xuống".

+7

Trong năm 2015, có nhiều thư viện hơn như [ng-xlsx] (https://libraries.io/bower/angular-xlsx) và [js-xlsx] (https://libraries.io/bower/js-xlsx) –

+3

Cuối năm 2016 có một thư viện rất tốt https://github.com/guyonroche/exceljs (tôi đã thử Excel Builder nhưng có một vấn đề thực sự trong khi bạn đang cố lưu tệp của mình) –

5

Câu trả lời tương tự được đăng here.

Link cho working example

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]]); 

thư viện chính cần thiết -

<script src="http://alasql.org/console/alasql.min.js"></script> 
<script src="http://alasql.org/console/xlsx.core.min.js"></script> 
+0

Xin chào dòng nào để lưu excel tập tin? Bởi vì ngay bây giờ tôi có một mảng và tôi muốn viết mảng vào bảng tính excel. – hyperfkcb

+0

@DeniseTan, chức năng tiết kiệm được xử lý bởi 'alasql' bị trigerred sau khi tạo tệp. Dữ liệu của bạn cần phải nằm trong mảng các đối tượng (xem ví dụ của tôi). Khóa đối tượng là cần thiết để xác định tên cột. Bạn có thể chuyển đổi mảng của bạn thành mảng các đối tượng. Hãy xem ví dụ [this] (https://stackoverflow.com/questions/20807804/convert-an-array-to-an-array-of-objects). –

+0

Tôi thấy tôi thấy. cám ơn rất nhiều!! – hyperfkcb

Các vấn đề liên quan