2014-01-28 16:38:02 +00:00
|
|
|
/* [MS-XLSB] 2.4.301 BrtBundleSh */
|
2014-06-29 18:29:45 +00:00
|
|
|
function parse_BrtBundleSh(data, length) {
|
2014-01-28 16:38:02 +00:00
|
|
|
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;
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
|
|
|
function write_BrtBundleSh(data, o) {
|
2014-05-29 22:30:03 +00:00
|
|
|
if(!o) o = new_buf(127);
|
|
|
|
o.write_shift(4, data.hsState);
|
|
|
|
o.write_shift(4, data.iTabID);
|
|
|
|
write_RelID(data.strRelID, o);
|
2014-05-31 15:44:56 +00:00
|
|
|
write_XLWideString(data.name.substr(0,31), o);
|
2014-05-29 22:30:03 +00:00
|
|
|
return o;
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
2014-05-29 22:30:03 +00:00
|
|
|
|
|
|
|
/* [MS-XLSB] 2.4.807 BrtWbProp */
|
2014-06-29 18:29:45 +00:00
|
|
|
function parse_BrtWbProp(data, length) {
|
2014-05-29 22:30:03 +00:00
|
|
|
data.read_shift(4);
|
|
|
|
var dwThemeVersion = data.read_shift(4);
|
|
|
|
var strName = (length > 8) ? parse_XLWideString(data) : "";
|
|
|
|
return [dwThemeVersion, strName];
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
|
|
|
function write_BrtWbProp(data, o) {
|
2014-05-29 22:30:03 +00:00
|
|
|
if(!o) o = new_buf(8);
|
|
|
|
o.write_shift(4, 0);
|
|
|
|
o.write_shift(4, 0);
|
|
|
|
return o;
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
2014-05-29 22:30:03 +00:00
|
|
|
|
2014-06-29 18:29:45 +00:00
|
|
|
function parse_BrtFRTArchID$(data, length) {
|
2014-05-29 22:30:03 +00:00
|
|
|
var o = {};
|
|
|
|
data.read_shift(4);
|
|
|
|
o.ArchID = data.read_shift(4);
|
|
|
|
data.l += length - 8;
|
|
|
|
return o;
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
2014-01-28 16:38:02 +00:00
|
|
|
|
|
|
|
/* [MS-XLSB] 2.1.7.60 Workbook */
|
2014-06-29 18:29:45 +00:00
|
|
|
function parse_wb_bin(data, opts) {
|
2014-01-28 16:38:02 +00:00
|
|
|
var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
|
2014-01-29 06:00:09 +00:00
|
|
|
var pass = false, z;
|
2014-01-28 16:38:02 +00:00
|
|
|
|
2014-06-29 18:29:45 +00:00
|
|
|
recordhopper(data, function hopper_wb(val, R) {
|
2014-01-28 16:38:02 +00:00
|
|
|
switch(R.n) {
|
|
|
|
case 'BrtBundleSh': wb.Sheets.push(val); break;
|
|
|
|
|
|
|
|
case 'BrtBeginBook': break;
|
|
|
|
case 'BrtFileVersion': break;
|
|
|
|
case 'BrtWbProp': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
case 'BrtACBegin': break;
|
|
|
|
case 'BrtAbsPath15': break;
|
|
|
|
case 'BrtACEnd': break;
|
2014-07-14 15:52:48 +00:00
|
|
|
case 'BrtWbFactoid': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
/*case 'BrtBookProtectionIso': break;*/
|
|
|
|
case 'BrtBookProtection': break;
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtBeginBookViews': break;
|
|
|
|
case 'BrtBookView': break;
|
|
|
|
case 'BrtEndBookViews': break;
|
|
|
|
case 'BrtBeginBundleShs': break;
|
|
|
|
case 'BrtEndBundleShs': break;
|
2014-02-14 06:25:46 +00:00
|
|
|
case 'BrtBeginFnGroup': break;
|
|
|
|
case 'BrtEndFnGroup': break;
|
|
|
|
case 'BrtBeginExternals': break;
|
|
|
|
case 'BrtSupSelf': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
case 'BrtSupBookSrc': break;
|
2014-02-14 06:25:46 +00:00
|
|
|
case 'BrtExternSheet': break;
|
|
|
|
case 'BrtEndExternals': break;
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtName': break;
|
|
|
|
case 'BrtCalcProp': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
case 'BrtUserBookView': break;
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtBeginPivotCacheIDs': break;
|
|
|
|
case 'BrtBeginPivotCacheID': break;
|
|
|
|
case 'BrtEndPivotCacheID': break;
|
|
|
|
case 'BrtEndPivotCacheIDs': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
case 'BrtWebOpt': break;
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtFileRecover': break;
|
2014-03-29 02:05:50 +00:00
|
|
|
case 'BrtFileSharing': break;
|
2014-02-17 08:44:22 +00:00
|
|
|
/*case 'BrtBeginWebPubItems': break;
|
|
|
|
case 'BrtBeginWebPubItem': break;
|
|
|
|
case 'BrtEndWebPubItem': break;
|
|
|
|
case 'BrtEndWebPubItems': break;*/
|
2014-07-28 13:22:32 +00:00
|
|
|
|
|
|
|
/* Smart Tags */
|
|
|
|
case 'BrtBeginSmartTagTypes': break;
|
|
|
|
case 'BrtSmartTagType': break;
|
|
|
|
case 'BrtEndSmartTagTypes': break;
|
|
|
|
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtFRTBegin': pass = true; break;
|
2014-05-29 22:30:03 +00:00
|
|
|
case 'BrtFRTArchID$': break;
|
2014-07-28 13:22:32 +00:00
|
|
|
case 'BrtWorkBookPr15': break;
|
2014-01-28 16:38:02 +00:00
|
|
|
case 'BrtFRTEnd': pass = false; break;
|
|
|
|
case 'BrtEndBook': break;
|
2014-07-28 13:22:32 +00:00
|
|
|
default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
|
2014-01-28 16:38:02 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2014-06-29 18:29:45 +00:00
|
|
|
parse_wb_defaults(wb);
|
2014-01-28 16:38:02 +00:00
|
|
|
|
|
|
|
return wb;
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
2014-05-16 00:33:34 +00:00
|
|
|
|
2014-05-29 22:30:03 +00:00
|
|
|
/* [MS-XLSB] 2.1.7.60 Workbook */
|
|
|
|
function write_BUNDLESHS(ba, wb, opts) {
|
|
|
|
write_record(ba, "BrtBeginBundleShs");
|
2014-06-29 18:29:45 +00:00
|
|
|
for(var idx = 0; idx != wb.SheetNames.length; ++idx) {
|
|
|
|
var d = { hsState: 0, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };
|
2014-05-29 22:30:03 +00:00
|
|
|
write_record(ba, "BrtBundleSh", write_BrtBundleSh(d));
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|
2014-05-29 22:30:03 +00:00
|
|
|
write_record(ba, "BrtEndBundleShs");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [MS-XLSB] 2.4.643 BrtFileVersion */
|
|
|
|
function write_BrtFileVersion(data, o) {
|
|
|
|
if(!o) o = new_buf(127);
|
|
|
|
for(var i = 0; i != 4; ++i) o.write_shift(4, 0);
|
|
|
|
write_XLWideString("SheetJS", o);
|
|
|
|
write_XLWideString(XLSX.version, o);
|
|
|
|
write_XLWideString(XLSX.version, o);
|
|
|
|
write_XLWideString("7262", o);
|
|
|
|
o.length = o.l;
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [MS-XLSB] 2.1.7.60 Workbook */
|
|
|
|
function write_BOOKVIEWS(ba, wb, opts) {
|
|
|
|
write_record(ba, "BrtBeginBookViews");
|
|
|
|
/* 1*(BrtBookView *FRT) */
|
|
|
|
write_record(ba, "BrtEndBookViews");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [MS-XLSB] 2.4.302 BrtCalcProp */
|
|
|
|
function write_BrtCalcProp(data, o) {
|
|
|
|
if(!o) o = new_buf(26);
|
|
|
|
o.write_shift(4,0); /* force recalc */
|
|
|
|
o.write_shift(4,1);
|
|
|
|
o.write_shift(4,0);
|
|
|
|
write_Xnum(0, o);
|
|
|
|
o.write_shift(-4, 1023);
|
|
|
|
o.write_shift(1, 0x33);
|
|
|
|
o.write_shift(1, 0x00);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
function write_BrtFileRecover(data, o) {
|
|
|
|
if(!o) o = new_buf(1);
|
|
|
|
o.write_shift(1,0);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* [MS-XLSB] 2.1.7.60 Workbook */
|
2014-06-29 18:29:45 +00:00
|
|
|
function write_wb_bin(wb, opts) {
|
2014-05-29 22:30:03 +00:00
|
|
|
var ba = buf_array();
|
|
|
|
write_record(ba, "BrtBeginBook");
|
|
|
|
write_record(ba, "BrtFileVersion", write_BrtFileVersion());
|
|
|
|
/* [[BrtFileSharingIso] BrtFileSharing] */
|
|
|
|
write_record(ba, "BrtWbProp", write_BrtWbProp());
|
|
|
|
/* [ACABSPATH] */
|
|
|
|
/* [[BrtBookProtectionIso] BrtBookProtection] */
|
|
|
|
write_BOOKVIEWS(ba, wb, opts);
|
|
|
|
write_BUNDLESHS(ba, wb, opts);
|
|
|
|
/* [FNGROUP] */
|
|
|
|
/* [EXTERNALS] */
|
|
|
|
/* *BrtName */
|
|
|
|
write_record(ba, "BrtCalcProp", write_BrtCalcProp());
|
|
|
|
/* [BrtOleSize] */
|
|
|
|
/* *(BrtUserBookView *FRT) */
|
|
|
|
/* [PIVOTCACHEIDS] */
|
|
|
|
/* [BrtWbFactoid] */
|
|
|
|
/* [SMARTTAGTYPES] */
|
|
|
|
/* [BrtWebOpt] */
|
|
|
|
write_record(ba, "BrtFileRecover", write_BrtFileRecover());
|
|
|
|
/* [WEBPUBITEMS] */
|
|
|
|
/* [CRERRS] */
|
|
|
|
/* FRTWORKBOOK */
|
|
|
|
write_record(ba, "BrtEndBook");
|
2014-05-16 00:33:34 +00:00
|
|
|
|
2014-05-29 22:30:03 +00:00
|
|
|
return ba.end();
|
2014-06-29 18:29:45 +00:00
|
|
|
}
|