forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /// <reference path="src/types.ts"/>
 | ||
|  | 
 | ||
|  | RELS.XLMETA = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata"; | ||
|  | 
 | ||
|  | /* 12.3.10 Metadata Part */ | ||
|  | function parse_xlmeta_xml(data: string, name: string, opts?: ParseXLMetaOptions): XLMeta { | ||
|  | 	var out: XLMeta = { Types: [] }; | ||
|  | 	if(!data) return out; | ||
|  | 	var pass = false; | ||
|  | 
 | ||
|  | 	data.replace(tagregex, (x: string, idx: number) => { | ||
|  | 		var y: any = parsexmltag(x); | ||
|  | 		switch(strip_ns(y[0])) { | ||
|  | 			case '<?xml': break; | ||
|  | 
 | ||
|  | 			/* 18.9.8 */ | ||
|  | 			case '<metadata': case '</metadata>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.11 */ | ||
|  | 			case '<metadataTypes': case '</metadataTypes>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.10 */ | ||
|  | 			case '<metadataType': | ||
|  | 				out.Types.push({ name: y.name }); | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			/* 18.9.4 */ | ||
|  | 			case '<futureMetadata': break; | ||
|  | 			case '</futureMetadata>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.1 */ | ||
|  | 			case '<bk>': break; | ||
|  | 			case '</bk>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.15 */ | ||
|  | 			case '<rc': break; | ||
|  | 			case '</rc>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.3 */ | ||
|  | 			case '<cellMetadata': | ||
|  | 			case '</cellMetadata>': break; | ||
|  | 
 | ||
|  | 			/* 18.9.17 */ | ||
|  | 			case '<valueMetadata': break; | ||
|  | 			case '</valueMetadata>': break; | ||
|  | 
 | ||
|  | 			/* 18.2.10 extLst CT_ExtensionList ? */ | ||
|  | 			case '<extLst': case '<extLst>': case '</extLst>': case '<extLst/>': break; | ||
|  | 
 | ||
|  | 			/* 18.2.7  ext CT_Extension + */ | ||
|  | 			case '<ext': pass=true; break; //TODO: check with versions of excel
 | ||
|  | 			case '</ext>': pass=false; break; | ||
|  | 
 | ||
|  | 			default: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in metadata'); | ||
|  | 		} | ||
|  | 		return x; | ||
|  | 	}); | ||
|  | 	return out; | ||
|  | } | ||
|  | /* TODO: coordinate with cell writing, pass flags */ | ||
|  | function write_xlmeta_xml(): string { | ||
|  | 	var o = [XML_HEADER]; | ||
|  | 	o.push(`\
 | ||
|  | <metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray"> | ||
|  |   <metadataTypes count="1"> | ||
|  |     <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/> | ||
|  |   </metadataTypes> | ||
|  |   <futureMetadata name="XLDAPR" count="1"> | ||
|  |     <bk> | ||
|  |       <extLst> | ||
|  |         <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}"> | ||
|  |           <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/> | ||
|  |         </ext> | ||
|  |       </extLst> | ||
|  |     </bk> | ||
|  |   </futureMetadata> | ||
|  |   <cellMetadata count="1"> | ||
|  |     <bk> | ||
|  |       <rc t="1" v="0"/> | ||
|  |     </bk> | ||
|  |   </cellMetadata> | ||
|  | </metadata>`);
 | ||
|  | 
 | ||
|  | 	return o.join(""); | ||
|  | } |