forked from sheetjs/sheetjs
SheetJS
d15b81e0e9
- very basic XLSX / XLSM write support with roundtrip tests (XLSB stubs) - reorganized source tree - new XLSB range check ensures that A1 is not emitted for empty sheets - SSF table emitted in output (consistent with js-xls) - CLI supports writing Backwards-incompatible changes: o new Property aliases (see CORE_PROPS and EXT_PROPS) o FILETIME custom properties parsed as JS Dates o `xlsx2csv` -> `xlsx` (and `bin/xlsx{2csv,}.njs`)
76 lines
2.4 KiB
JavaScript
76 lines
2.4 KiB
JavaScript
/* [MS-XLSB] 2.4.301 BrtBundleSh */
|
|
var parse_BrtBundleSh = function(data, length) {
|
|
var z = {};
|
|
z.hsState = data.read_shift(4); //ST_SheetState
|
|
z.iTabID = data.read_shift(4);
|
|
z.strRelID = parse_RelID(data,length-8);
|
|
z.name = parse_XLWideString(data);
|
|
return z;
|
|
};
|
|
|
|
/* [MS-XLSB] 2.1.7.60 Workbook */
|
|
var parse_wb_bin = function(data, opts) {
|
|
var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
|
|
var pass = false, z;
|
|
|
|
recordhopper(data, function(val, R) {
|
|
switch(R.n) {
|
|
case 'BrtBundleSh': wb.Sheets.push(val); break;
|
|
|
|
case 'BrtBeginBook': break;
|
|
case 'BrtFileVersion': break;
|
|
case 'BrtWbProp': break;
|
|
case 'BrtACBegin': break;
|
|
case 'BrtAbsPath15': break;
|
|
case 'BrtACEnd': break;
|
|
/*case 'BrtBookProtectionIso': break;*/
|
|
case 'BrtBookProtection': break;
|
|
case 'BrtBeginBookViews': break;
|
|
case 'BrtBookView': break;
|
|
case 'BrtEndBookViews': break;
|
|
case 'BrtBeginBundleShs': break;
|
|
case 'BrtEndBundleShs': break;
|
|
case 'BrtBeginFnGroup': break;
|
|
case 'BrtEndFnGroup': break;
|
|
case 'BrtBeginExternals': break;
|
|
case 'BrtSupSelf': break;
|
|
case 'BrtSupBookSrc': break;
|
|
case 'BrtExternSheet': break;
|
|
case 'BrtEndExternals': break;
|
|
case 'BrtName': break;
|
|
case 'BrtCalcProp': break;
|
|
case 'BrtUserBookView': break;
|
|
case 'BrtBeginPivotCacheIDs': break;
|
|
case 'BrtBeginPivotCacheID': break;
|
|
case 'BrtEndPivotCacheID': break;
|
|
case 'BrtEndPivotCacheIDs': break;
|
|
case 'BrtWebOpt': break;
|
|
case 'BrtFileRecover': break;
|
|
case 'BrtFileSharing': break;
|
|
/*case 'BrtBeginWebPubItems': break;
|
|
case 'BrtBeginWebPubItem': break;
|
|
case 'BrtEndWebPubItem': break;
|
|
case 'BrtEndWebPubItems': break;*/
|
|
case 'BrtFRTBegin': pass = true; break;
|
|
case 'BrtFRTEnd': pass = false; break;
|
|
case 'BrtEndBook': break;
|
|
default: if(!pass) throw new Error("Unexpected record " + R.n);
|
|
}
|
|
});
|
|
|
|
/* defaults */
|
|
for(z in WBPropsDef) if(typeof wb.WBProps[z] === 'undefined') wb.WBProps[z] = WBPropsDef[z];
|
|
for(z in CalcPrDef) if(typeof wb.CalcPr[z] === 'undefined') wb.CalcPr[z] = CalcPrDef[z];
|
|
|
|
wb.WBView.forEach(function(w){for(var z in WBViewDef) if(typeof w[z] === 'undefined') w[z]=WBViewDef[z]; });
|
|
wb.Sheets.forEach(function(w){for(var z in SheetDef) if(typeof w[z] === 'undefined') w[z]=SheetDef[z]; });
|
|
|
|
_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
|
|
|
|
return wb;
|
|
};
|
|
|
|
var write_wb_bin = function(wb, opts) {
|
|
|
|
};
|