forked from sheetjs/sheetjs
SheetJS
70c48a74b9
- `aoa_to_sheet` function (fixes #314 h/t @fonzy2013 @rvdwijngaard) - `writeFileAsync` function (fixes #396 h/t @barbalex) - `sheet_to_json` tests + docs + blankrows (fixes #602 h/t @EEaglehouse) - write number format scan now includes every index >= 50 - propagate SSF IE8 fixes (fixes #171 h/t @sheetjsdev) - update shim for extendscript (see #603 h/t @firas3d) - more flow type definitions
37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {
|
|
var n = opts && opts.sheet ? opts.sheet : "Sheet1";
|
|
var sheets = {}; sheets[n] = sheet;
|
|
return { SheetNames: [n], Sheets: sheets };
|
|
}
|
|
|
|
function aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {
|
|
var o = opts || {};
|
|
var ws/*:Worksheet*/ = ({}/*:any*/);
|
|
var range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);
|
|
for(var R = 0; R != data.length; ++R) {
|
|
for(var C = 0; C != data[R].length; ++C) {
|
|
if(typeof data[R][C] === 'undefined') continue;
|
|
var cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);
|
|
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_ref = encode_cell(({c:C,r:R}/*:any*/));
|
|
if(cell.v === null) { if(!o.cellStubs) continue; cell.t = 'z'; }
|
|
else if(typeof cell.v === 'number') cell.t = 'n';
|
|
else if(typeof cell.v === 'boolean') cell.t = 'b';
|
|
else if(cell.v instanceof Date) {
|
|
cell.z = o.dateNF || SSF._table[14];
|
|
if(o.cellDates) cell.t = 'd';
|
|
else { cell.t = 'n'; cell.v = datenum(cell.v); }
|
|
cell.w = SSF.format(cell.z, cell.v);
|
|
}
|
|
else cell.t = 's';
|
|
ws[cell_ref] = cell;
|
|
}
|
|
}
|
|
if(range.s.c < 10000000) ws['!ref'] = encode_range(range);
|
|
return ws;
|
|
}
|
|
|