Skip to content

Instantly share code, notes, and snippets.

@justin3737
Created October 7, 2014 16:09
Show Gist options
  • Save justin3737/7e6627d4019c2ad5761e to your computer and use it in GitHub Desktop.
Save justin3737/7e6627d4019c2ad5761e to your computer and use it in GitHub Desktop.
輸出下載 excel // source http://jsbin.com/todece/11
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<meta charset="utf-8">
<title>輸出下載 excel</title>
<script type="text/javascript" src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"></script>
<script type="text/javascript" src="https://rawgithub.com/eligrey/Blob.js/master/Blob.js"></script>
<script type="text/javascript" src="https://rawgithub.com/eligrey/FileSaver.js/master/FileSaver.js"></script>
</head>
<body>
<script id="jsbin-javascript">
;(function(){
function datenum(v, date1904)
{
if(date1904) v+=1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts)
{
var ws = {};
var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
for(var R = 0; R != data.length; ++R) {
for(var C = 0; C != data[R].length; ++C) {
if(range.s.r > R) range.s.r = R;
if(range.s.c > C) range.s.c = C;
if(range.e.r < R) range.e.r = R;
if(range.e.c < C) range.e.c = C;
var cell = {v: data[R][C] };
if(cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
if(typeof cell.v === 'number') cell.t = 'n';
else if(typeof cell.v === 'boolean') cell.t = 'b';
else if(cell.v instanceof Date) {
cell.t = 'n'; cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
}
else cell.t = 's';
ws[cell_ref] = cell;
}
}
if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
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;
}
function Workbook()
{
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function save(fileName, arr)
{
/* 設定欄寬 */
var wscols = [
{wch:15},
{wch:12},
{wch:12},
{wch:30},
{wch:12},
{wch:12},
{wch:12},
{wch:15},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
{wch:15},
{wch:15},
{wch:20},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
];
var data = [];
for (var i =0; i< arr.length; i++){
var _newarr = [];
for(var n in arr[i] ){
_newarr.push(arr[i][n]);
}
data.push(_newarr);
}
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(fileName);
wb.Sheets[fileName] = ws;
/* TEST: column widths */
ws['!cols'] = wscols;
var wbout = XLSX.write(wb, {bookType:'xlsx', bookSST:true, type: 'binary'});
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), fileName + ".xlsx");
}
window.saveXls = {
save : save
};
})();
//初始化
$(function(){
var data = [
{
'obj_orderid' : '訂單編號',
'obj_weight' : '重量',
'obj_size' : '尺寸',
'obj_name' : '品名',
'obj_amount' : '數量',
'obj_price' : '價值',
'sender_name' : '寄件人姓名',
'sender_phone' : '寄件人電話',
'sender_email' : '寄件人電子信箱',
'sender_country' : '寄件人國家',
'sender_city' : '寄件人城市',
'sender_prov' : '寄件人省份',
'sender_zip' : '寄件人郵編',
'sender_fulladdr': '寄件人完整地址',
'recip_name' : '收件人姓名',
'recip_phone' : '收件人電話',
'recip_email' : '收件人電子信箱',
'recip_id' : '收件人ID',
'recip_country' : '收件人國家',
'recip_city' : '收件人城市',
'recip_prov' : '收件人省份',
'recip_zip' : '收件人郵編',
'recip_fulladdr' : '收件人完整地址'
},
{
'obj_orderid' : 'xxx100011222xxd',
'obj_weight' : '1000g',
'obj_size' : '10x10x10',
'obj_name' : '吸塵器',
'obj_amount' : '10個',
'obj_price' : '2000',
'sender_name' : 'Mitch',
'sender_phone' : '0912333555',
'sender_email' : '[email protected]',
'sender_country' : 'TW',
'sender_city' : 'TP',
'sender_prov' : 'TW',
'sender_zip' : '12345',
'sender_fulladdr': '台北市大安區敦化南路二段77號',
'recip_name' : 'Justin',
'recip_phone' : '0912555777',
'recip_email' : '[email protected]',
'recip_id' : 'A123456789',
'recip_country' : 'TW',
'recip_city' : 'TP',
'recip_prov' : 'TW',
'recip_zip' : '23456',
'recip_fulladdr' : '台北市大安區敦化南路二段33號'
}
];
var ws_name = "SheetJS";
saveXls.save( ws_name, data);
});
</script>
<script id="jsbin-source-html" type="text/html"><!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.9.1.min.js"><\/script>
<meta charset="utf-8">
<title>輸出下載 excel</title>
<script type="text/javascript" src="http://oss.sheetjs.com/js-xlsx/xlsx.core.min.js"><\/script>
<script type="text/javascript" src="https://rawgithub.com/eligrey/Blob.js/master/Blob.js"><\/script>
<script type="text/javascript" src="https://rawgithub.com/eligrey/FileSaver.js/master/FileSaver.js"><\/script>
</head>
<body>
</body>
</html></script>
<script id="jsbin-source-javascript" type="text/javascript">;(function(){
function datenum(v, date1904)
{
if(date1904) v+=1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts)
{
var ws = {};
var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
for(var R = 0; R != data.length; ++R) {
for(var C = 0; C != data[R].length; ++C) {
if(range.s.r > R) range.s.r = R;
if(range.s.c > C) range.s.c = C;
if(range.e.r < R) range.e.r = R;
if(range.e.c < C) range.e.c = C;
var cell = {v: data[R][C] };
if(cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
if(typeof cell.v === 'number') cell.t = 'n';
else if(typeof cell.v === 'boolean') cell.t = 'b';
else if(cell.v instanceof Date) {
cell.t = 'n'; cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
}
else cell.t = 's';
ws[cell_ref] = cell;
}
}
if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
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;
}
function Workbook()
{
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function save(fileName, arr)
{
/* 設定欄寬 */
var wscols = [
{wch:15},
{wch:12},
{wch:12},
{wch:30},
{wch:12},
{wch:12},
{wch:12},
{wch:15},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
{wch:15},
{wch:15},
{wch:20},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
];
var data = [];
for (var i =0; i< arr.length; i++){
var _newarr = [];
for(var n in arr[i] ){
_newarr.push(arr[i][n]);
}
data.push(_newarr);
}
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(fileName);
wb.Sheets[fileName] = ws;
/* TEST: column widths */
ws['!cols'] = wscols;
var wbout = XLSX.write(wb, {bookType:'xlsx', bookSST:true, type: 'binary'});
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), fileName + ".xlsx");
}
window.saveXls = {
save : save
};
})();
//初始化
$(function(){
var data = [
{
'obj_orderid' : '訂單編號',
'obj_weight' : '重量',
'obj_size' : '尺寸',
'obj_name' : '品名',
'obj_amount' : '數量',
'obj_price' : '價值',
'sender_name' : '寄件人姓名',
'sender_phone' : '寄件人電話',
'sender_email' : '寄件人電子信箱',
'sender_country' : '寄件人國家',
'sender_city' : '寄件人城市',
'sender_prov' : '寄件人省份',
'sender_zip' : '寄件人郵編',
'sender_fulladdr': '寄件人完整地址',
'recip_name' : '收件人姓名',
'recip_phone' : '收件人電話',
'recip_email' : '收件人電子信箱',
'recip_id' : '收件人ID',
'recip_country' : '收件人國家',
'recip_city' : '收件人城市',
'recip_prov' : '收件人省份',
'recip_zip' : '收件人郵編',
'recip_fulladdr' : '收件人完整地址'
},
{
'obj_orderid' : 'xxx100011222xxd',
'obj_weight' : '1000g',
'obj_size' : '10x10x10',
'obj_name' : '吸塵器',
'obj_amount' : '10個',
'obj_price' : '2000',
'sender_name' : 'Mitch',
'sender_phone' : '0912333555',
'sender_email' : '[email protected]',
'sender_country' : 'TW',
'sender_city' : 'TP',
'sender_prov' : 'TW',
'sender_zip' : '12345',
'sender_fulladdr': '台北市大安區敦化南路二段77號',
'recip_name' : 'Justin',
'recip_phone' : '0912555777',
'recip_email' : '[email protected]',
'recip_id' : 'A123456789',
'recip_country' : 'TW',
'recip_city' : 'TP',
'recip_prov' : 'TW',
'recip_zip' : '23456',
'recip_fulladdr' : '台北市大安區敦化南路二段33號'
}
];
var ws_name = "SheetJS";
saveXls.save( ws_name, data);
});</script></body>
</html>
;(function(){
function datenum(v, date1904)
{
if(date1904) v+=1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts)
{
var ws = {};
var range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};
for(var R = 0; R != data.length; ++R) {
for(var C = 0; C != data[R].length; ++C) {
if(range.s.r > R) range.s.r = R;
if(range.s.c > C) range.s.c = C;
if(range.e.r < R) range.e.r = R;
if(range.e.c < C) range.e.c = C;
var cell = {v: data[R][C] };
if(cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({c:C,r:R});
if(typeof cell.v === 'number') cell.t = 'n';
else if(typeof cell.v === 'boolean') cell.t = 'b';
else if(cell.v instanceof Date) {
cell.t = 'n'; cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
}
else cell.t = 's';
ws[cell_ref] = cell;
}
}
if(range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
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;
}
function Workbook()
{
if(!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function save(fileName, arr)
{
/* 設定欄寬 */
var wscols = [
{wch:15},
{wch:12},
{wch:12},
{wch:30},
{wch:12},
{wch:12},
{wch:12},
{wch:15},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
{wch:15},
{wch:15},
{wch:20},
{wch:20},
{wch:12},
{wch:12},
{wch:12},
{wch:12},
{wch:40},
];
var data = [];
for (var i =0; i< arr.length; i++){
var _newarr = [];
for(var n in arr[i] ){
_newarr.push(arr[i][n]);
}
data.push(_newarr);
}
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(fileName);
wb.Sheets[fileName] = ws;
/* TEST: column widths */
ws['!cols'] = wscols;
var wbout = XLSX.write(wb, {bookType:'xlsx', bookSST:true, type: 'binary'});
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), fileName + ".xlsx");
}
window.saveXls = {
save : save
};
})();
//初始化
$(function(){
var data = [
{
'obj_orderid' : '訂單編號',
'obj_weight' : '重量',
'obj_size' : '尺寸',
'obj_name' : '品名',
'obj_amount' : '數量',
'obj_price' : '價值',
'sender_name' : '寄件人姓名',
'sender_phone' : '寄件人電話',
'sender_email' : '寄件人電子信箱',
'sender_country' : '寄件人國家',
'sender_city' : '寄件人城市',
'sender_prov' : '寄件人省份',
'sender_zip' : '寄件人郵編',
'sender_fulladdr': '寄件人完整地址',
'recip_name' : '收件人姓名',
'recip_phone' : '收件人電話',
'recip_email' : '收件人電子信箱',
'recip_id' : '收件人ID',
'recip_country' : '收件人國家',
'recip_city' : '收件人城市',
'recip_prov' : '收件人省份',
'recip_zip' : '收件人郵編',
'recip_fulladdr' : '收件人完整地址'
},
{
'obj_orderid' : 'xxx100011222xxd',
'obj_weight' : '1000g',
'obj_size' : '10x10x10',
'obj_name' : '吸塵器',
'obj_amount' : '10個',
'obj_price' : '2000',
'sender_name' : 'Mitch',
'sender_phone' : '0912333555',
'sender_email' : '[email protected]',
'sender_country' : 'TW',
'sender_city' : 'TP',
'sender_prov' : 'TW',
'sender_zip' : '12345',
'sender_fulladdr': '台北市大安區敦化南路二段77號',
'recip_name' : 'Justin',
'recip_phone' : '0912555777',
'recip_email' : '[email protected]',
'recip_id' : 'A123456789',
'recip_country' : 'TW',
'recip_city' : 'TP',
'recip_prov' : 'TW',
'recip_zip' : '23456',
'recip_fulladdr' : '台北市大安區敦化南路二段33號'
}
];
var ws_name = "SheetJS";
saveXls.save( ws_name, data);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment