forked from sheetjs/sheetjs
		
	- removed CFB test (fixes #654 h/t @wolfgang42) - book_append_sheet optional name (fixes #652 h/t @jomel) - strict mode compliance (h/t @simon-p-r @loongdefect @appersonj) - flow fixes (h/t @jameskraus for help with Date#getYear) - fixed minifier to generate ExtendScript-compatible code
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 18.2.28 (CT_WorkbookProtection) Defaults */
 | |
| var WBPropsDef = [
 | |
| 	['allowRefreshQuery', '0'],
 | |
| 	['autoCompressPictures', '1'],
 | |
| 	['backupFile', '0'],
 | |
| 	['checkCompatibility', '0'],
 | |
| 	['codeName', ''],
 | |
| 	['date1904', '0'],
 | |
| 	['dateCompatibility', '1'],
 | |
| 	//['defaultThemeVersion', '0'],
 | |
| 	['filterPrivacy', '0'],
 | |
| 	['hidePivotFieldList', '0'],
 | |
| 	['promptedSolutions', '0'],
 | |
| 	['publishItems', '0'],
 | |
| 	['refreshAllConnections', false],
 | |
| 	['saveExternalLinkValues', '1'],
 | |
| 	['showBorderUnselectedTables', '1'],
 | |
| 	['showInkAnnotation', '1'],
 | |
| 	['showObjects', 'all'],
 | |
| 	['showPivotChartFilter', '0']
 | |
| 	//['updateLinks', 'userSet']
 | |
| ];
 | |
| 
 | |
| /* 18.2.30 (CT_BookView) Defaults */
 | |
| var WBViewDef = [
 | |
| 	['activeTab', '0'],
 | |
| 	['autoFilterDateGrouping', '1'],
 | |
| 	['firstSheet', '0'],
 | |
| 	['minimized', '0'],
 | |
| 	['showHorizontalScroll', '1'],
 | |
| 	['showSheetTabs', '1'],
 | |
| 	['showVerticalScroll', '1'],
 | |
| 	['tabRatio', '600'],
 | |
| 	['visibility', 'visible']
 | |
| 	//window{Height,Width}, {x,y}Window
 | |
| ];
 | |
| 
 | |
| /* 18.2.19 (CT_Sheet) Defaults */
 | |
| var SheetDef = [
 | |
| 	//['state', 'visible']
 | |
| ];
 | |
| 
 | |
| /* 18.2.2  (CT_CalcPr) Defaults */
 | |
| var CalcPrDef = [
 | |
| 	['calcCompleted', 'true'],
 | |
| 	['calcMode', 'auto'],
 | |
| 	['calcOnSave', 'true'],
 | |
| 	['concurrentCalc', 'true'],
 | |
| 	['fullCalcOnLoad', 'false'],
 | |
| 	['fullPrecision', 'true'],
 | |
| 	['iterate', 'false'],
 | |
| 	['iterateCount', '100'],
 | |
| 	['iterateDelta', '0.001'],
 | |
| 	['refMode', 'A1']
 | |
| ];
 | |
| 
 | |
| /* 18.2.3 (CT_CustomWorkbookView) Defaults */
 | |
| var CustomWBViewDef = [
 | |
| 	['autoUpdate', 'false'],
 | |
| 	['changesSavedWin', 'false'],
 | |
| 	['includeHiddenRowCol', 'true'],
 | |
| 	['includePrintSettings', 'true'],
 | |
| 	['maximized', 'false'],
 | |
| 	['minimized', 'false'],
 | |
| 	['onlySync', 'false'],
 | |
| 	['personalView', 'false'],
 | |
| 	['showComments', 'commIndicator'],
 | |
| 	['showFormulaBar', 'true'],
 | |
| 	['showHorizontalScroll', 'true'],
 | |
| 	['showObjects', 'all'],
 | |
| 	['showSheetTabs', 'true'],
 | |
| 	['showStatusbar', 'true'],
 | |
| 	['showVerticalScroll', 'true'],
 | |
| 	['tabRatio', '600'],
 | |
| 	['xWindow', '0'],
 | |
| 	['yWindow', '0']
 | |
| ];
 | |
| 
 | |
| function push_defaults_array(target, defaults) {
 | |
| 	for(var j = 0; j != target.length; ++j) { var w = target[j];
 | |
| 		for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
 | |
| 			if(w[z[0]] == null) w[z[0]] = z[1];
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| function push_defaults(target, defaults) {
 | |
| 	for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
 | |
| 		if(target[z[0]] == null) target[z[0]] = z[1];
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function parse_wb_defaults(wb) {
 | |
| 	push_defaults(wb.WBProps, WBPropsDef);
 | |
| 	push_defaults(wb.CalcPr, CalcPrDef);
 | |
| 
 | |
| 	push_defaults_array(wb.WBView, WBViewDef);
 | |
| 	push_defaults_array(wb.Sheets, SheetDef);
 | |
| 
 | |
| 	_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
 | |
| }
 | |
| 
 | |
| var badchars = "][*?\/\\".split("");
 | |
| function check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {
 | |
| 	if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); }
 | |
| 	var _good = true;
 | |
| 	badchars.forEach(function(c) {
 | |
| 		if(n.indexOf(c) == -1) return;
 | |
| 		if(!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
 | |
| 		_good = false;
 | |
| 	});
 | |
| 	return _good;
 | |
| }
 | |
| function check_wb_names(N) {
 | |
| 	N.forEach(function(n,i) {
 | |
| 		check_ws_name(n);
 | |
| 		for(var j = 0; j < i; ++j) if(n == N[j]) throw new Error("Duplicate Sheet Name: " + n);
 | |
| 	});
 | |
| }
 | |
| function check_wb(wb) {
 | |
| 	if(!wb || !wb.SheetNames || !wb.Sheets) throw new Error("Invalid Workbook");
 | |
| 	check_wb_names(wb.SheetNames);
 | |
| 	/* TODO: validate workbook */
 | |
| }
 |