2016-11-08 14 views
8

Tôi muốn tạo ra một file excel (ở định dạng .xlsx) và làm cho nó có sẵn để tải về sử dụng Khách hàng JavaScript bên. Tôi có thể tạo tệp mẫu bằng cách sử dụng thư viện js-xlsx. Nhưng tôi không thể áp dụng bất kỳ phong cách nào cho nó. Ít nhất một số phong cách cơ bản bao gồm màu nền để tiêu đề, đậm chữ cho header và văn bản gói cho các tế bào được yêu cầu.Tạo tập tin với một vài phong cách sử dụng phía khách hàng JavaScript một excel (nếu có thể sử dụng js-xlsx thư viện)

js-xlsx tài liệu thư viện cho biết rằng chúng tôi có thể cung cấp kiểu bằng cách sử dụng Cell Object.

Tôi đã thử đưa kiểu bằng cách sử dụng đối tượng ô nhưng không phản ánh trong tệp .xlsx đã tải xuống. Tôi thậm chí đã thử đọc một tệp .xlsx và ghi lại cùng một tệp bằng cách sử dụng hàm XLSX.write(). Nhưng nó mang lại một tập tin excel không có phong cách nào cả. Lý tưởng nhất là tôi mong đợi tệp đã tải xuống có cùng kiểu tệp được tải lên. Không có màu phông chữ hoặc màu nền nào được áp dụng trong tệp được tạo lại. Tôi sử dụng Excel 2013 để kiểm tra các tệp đã tải xuống.

Vui lòng tìm bên dưới ảnh chụp màn hình excel trước và sau khi tải lên.

gốc file

enter image description here

Downloaded file

enter image description here

Mã này được đưa ra dưới đây.

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> 
<script type="text/javascript" src="xlsx.core.min.js"></script> 
<script type="text/javascript" src="Blob.js"></script> 
<script type="text/javascript" src="FileSaver.js"></script> 

<script> 

function s2ab(s) { 
    var buf = new ArrayBuffer(s.length); 
    var view = new Uint8Array(buf); 
    for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 
    return buf; 
} 

/* set up XMLHttpRequest */ 
var url = "template-sample.xlsx"; 
var oReq = new XMLHttpRequest(); 
oReq.open("GET", url, true); 
oReq.responseType = "arraybuffer"; 

oReq.onload = function(e) { 
    var arraybuffer = oReq.response; 

    /* convert data to binary string */ 
    var data = new Uint8Array(arraybuffer); 
    var arr = new Array(); 
    for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); 
    var bstr = arr.join(""); 

    /* Call XLSX */ 
    var workbook = XLSX.read(bstr, {type:"binary", cellStyles:true}); 

    console.log("read workbook"); 
    console.log(workbook); 
    /* DO SOMETHING WITH workbook HERE */ 
    var wbout = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary', cellStyles: true}); 
    saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), "template-download.xlsx"); 

} 

function read(){ 
    oReq.send();  
} 


</script> 


</head> 
<body> 
    <button onclick="read()">save xlsx</button> 
</body></html> 

Mã mẫu được lấy từ here.

Điều tôi mong đợi là tùy chọn cung cấp kiểu cho các ô sử dụng thư viện js-xlsx hoặc thư viện khác cung cấp chức năng này. Tôi đã tìm thấy một thư viện có tên là exceljs, nhưng yêu cầu phải có nút js để hỗ trợ. Tôi đang tìm kiếm một giải pháp hoàn toàn dựa trên phía khách hàng. Điều này sẽ được sử dụng cho ứng dụng máy tính bảng và máy tính để bàn dựa trên Cordova.

Trả lời

10

Sau một số nghiên cứu, tôi có thể tìm ra giải pháp cho câu hỏi của riêng mình. Tôi đã tìm thấy một thư viện mới có tên xlsx-style để tạo kiểu. kiểu xlsx được xây dựng trên đầu trang của js-xlsx để tạo kiểu cũng cho tệp excel được tạo. Các kiểu có thể được trao cho các ô bằng cách sử dụng một thuộc tính mới bên trong đối tượng ô.

Giải thích có sẵn tại trang npm xlsx-style.

Tạo kiểu được đưa ra bằng cách sử dụng đối tượng kiểu được liên kết với mỗi ô. Phông chữ, màu sắc, căn chỉnh vv có thể được đưa ra bằng cách sử dụng đối tượng kiểu này.

Tôi đã thêm bản trình diễn tối giản trong một số github page. Mã mẫu có sẵn tại github repository này.

Bạn có thể tìm thấy ảnh chụp màn hình của trang excel được tạo bên dưới. enter image description here

+0

tôi đang tìm giải pháp tương tự. Bạn có thể cập nhật mã mẫu bằng cách sử dụng 'xlsx-style'. Yêu cầu của tôi là ghi dữ liệu vào tệp .xlsx với một số kiểu cơ bản. Đánh giá cao bất kỳ trợ giúp nào. – gihan

+0

bạn có thể vui lòng cho tôi biết cách đối tượng kiểu được xác định trong đối tượng ô.I đã thử cách này nhưng không hoạt động.'var cell = {v: dữ liệu [R] [C], s: {bgColor: "# E1697B"}} ; ' – gihan

+0

Tôi sẽ sớm cố gắng cập nhật mã hoạt động. –

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