forked from sheetjs/sheetjs
		
	parse icloud.com numbers exports
This commit is contained in:
		
							parent
							
								
									ee8b37b3a6
								
							
						
					
					
						commit
						ecfa614dd8
					
				@ -79,6 +79,13 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	if(!safegetzipfile(zip, '[Content_Types].xml')) {
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
 | 
			
		||||
		var index_zip = CFB.find(zip, 'Index.zip');
 | 
			
		||||
		if(index_zip) {
 | 
			
		||||
			opts = dup(opts);
 | 
			
		||||
			delete opts.type;
 | 
			
		||||
			if(typeof index_zip.content == "string") opts.type = "binary";
 | 
			
		||||
			return readSync(index_zip.content, opts);
 | 
			
		||||
		}
 | 
			
		||||
		throw new Error('Unsupported ZIP file');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								test.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										7
									
								
								test.js
									
									
									
									
									
								
							@ -2320,6 +2320,11 @@ describe('numbers', function() {
 | 
			
		||||
		assert.equal(get_cell(ws2, "A1").v, 1);
 | 
			
		||||
		assert.equal(get_cell(ws2, "ALL2").v, 2);
 | 
			
		||||
	});
 | 
			
		||||
	it('should support icloud.com files', function() {
 | 
			
		||||
		var wb = X.read(fs.readFileSync(dir + 'Attendance.numbers'), {type:TYPE, WTF:true});
 | 
			
		||||
		var ws = wb.Sheets["Attendance"];
 | 
			
		||||
		assert.equal(get_cell(ws, "A1").v, "Date");
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('dbf', function() {
 | 
			
		||||
@ -2679,7 +2684,7 @@ describe('corner cases', function() {
 | 
			
		||||
			var wb = X.read(fs.readFileSync(w), {type:TYPE});
 | 
			
		||||
			var ws = wb.Sheets[wb.SheetNames[0]];
 | 
			
		||||
			var B1 = get_cell(ws, "B1"), B2 = get_cell(ws, "B2");
 | 
			
		||||
			var lio = w.match(/\.[^\.]*$/).index, stem = w.slice(0, lio).toLowerCase(), ext = w.slice(lio + 1).toLowerCase()
 | 
			
		||||
			var lio = w.match(/\.[^\.]*$/).index, stem = w.slice(0, lio).toLowerCase(), ext = w.slice(lio + 1).toLowerCase();
 | 
			
		||||
			switch(ext) {
 | 
			
		||||
				case 'fm3': break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										32
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							@ -1793,6 +1793,33 @@ describe('roundtrip features', function() {
 | 
			
		||||
		}
 | 
			
		||||
	});	});
 | 
			
		||||
 | 
			
		||||
	it('should preserve date system', function() {[
 | 
			
		||||
		"biff5", "ods", "slk", "xls", "xlsb", "xlsx", "xml"
 | 
			
		||||
	].forEach(function(ext) {
 | 
			
		||||
		// TODO: check actual date codes and actual date values
 | 
			
		||||
		var wb0 = X.read(fs.readFileSync("./test_files/1904/1900." + ext), {type: TYPE});
 | 
			
		||||
		assert.ok(!wb0.Workbook || !wb0.Workbook.WBProps || !wb0.Workbook.WBProps.date1904);
 | 
			
		||||
		var wb1 = X.read(X.write(wb0, {type: TYPE, bookType: ext}), {type: TYPE});
 | 
			
		||||
		assert.ok(!wb1.Workbook || !wb1.Workbook.WBProps || !wb1.Workbook.WBProps.date1904);
 | 
			
		||||
 | 
			
		||||
		var wb2 = X.utils.book_new(); X.utils.book_append_sheet(wb2, X.utils.aoa_to_sheet([[1]]), "Sheet1");
 | 
			
		||||
		wb2.Workbook = { WBProps: { date1904: false } };
 | 
			
		||||
		assert.ok(!wb2.Workbook || !wb2.Workbook.WBProps || !wb2.Workbook.WBProps.date1904);
 | 
			
		||||
		var wb3 = X.read(X.write(wb2, {type: TYPE, bookType: ext}), {type: TYPE});
 | 
			
		||||
		assert.ok(!wb3.Workbook || !wb3.Workbook.WBProps || !wb3.Workbook.WBProps.date1904);
 | 
			
		||||
 | 
			
		||||
		var wb4 = X.read(fs.readFileSync("./test_files/1904/1904." + ext), {type: TYPE});
 | 
			
		||||
		assert.ok(wb4.Workbook.WBProps.date1904);
 | 
			
		||||
		var wb5 = X.read(X.write(wb4, {type: TYPE, bookType: ext}), {type: TYPE});
 | 
			
		||||
		assert.ok(wb5.Workbook.WBProps.date1904); // xlsb, xml
 | 
			
		||||
 | 
			
		||||
		var wb6 = X.utils.book_new(); X.utils.book_append_sheet(wb6, X.utils.aoa_to_sheet([[1]]), "Sheet1");
 | 
			
		||||
		wb6.Workbook = { WBProps: { date1904: true } };
 | 
			
		||||
		assert.ok(wb6.Workbook.WBProps.date1904);
 | 
			
		||||
		var wb7 = X.read(X.write(wb6, {type: TYPE, bookType: ext}), {type: TYPE});
 | 
			
		||||
		assert.ok(wb7.Workbook.WBProps.date1904);
 | 
			
		||||
	}); });
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
//function password_file(x){return x.match(/^password.*\.xls$/); }
 | 
			
		||||
@ -2280,6 +2307,11 @@ describe('numbers', function() {
 | 
			
		||||
		assert.equal(get_cell(ws2, "A1").v, 1);
 | 
			
		||||
		assert.equal(get_cell(ws2, "ALL2").v, 2);
 | 
			
		||||
	});
 | 
			
		||||
	it('should support icloud.com files', function() {
 | 
			
		||||
		var wb = X.read(fs.readFileSync(dir + 'Attendance.numbers'), {type:TYPE, WTF:true});
 | 
			
		||||
		var ws = wb.Sheets["Attendance"];
 | 
			
		||||
		assert.equal(get_cell(ws, "A1").v, "Date");
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe('dbf', function() {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								test.ts
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										5
									
								
								test.ts
									
									
									
									
									
								
							@ -2226,6 +2226,11 @@ Deno.test('numbers', async function(t) {
 | 
			
		||||
		assert.equal(get_cell(ws2, "A1").v, 1);
 | 
			
		||||
		assert.equal(get_cell(ws2, "ALL2").v, 2);
 | 
			
		||||
	});
 | 
			
		||||
	await t.step('should support icloud.com files', async function(t) {
 | 
			
		||||
		var wb = X.read(fs.readFileSync(dir + 'Attendance.numbers'), {type:TYPE, WTF:true});
 | 
			
		||||
		var ws = wb.Sheets["Attendance"];
 | 
			
		||||
		assert.equal(get_cell(ws, "A1").v, "Date");
 | 
			
		||||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
Deno.test('dbf', async function(t) {
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
Subproject commit 9c45a1abb981222577b8d5a2faa6111c1e4750fa
 | 
			
		||||
Subproject commit 52a2a0cea17a078c9540ab5060fc08d26aac583d
 | 
			
		||||
							
								
								
									
										480
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										480
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								tests/fixtures.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								tests/fixtures.js
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,3 +1,17 @@
 | 
			
		||||
./test_files/1904/1900.biff5
 | 
			
		||||
./test_files/1904/1900.ods
 | 
			
		||||
./test_files/1904/1900.slk
 | 
			
		||||
./test_files/1904/1900.xls
 | 
			
		||||
./test_files/1904/1900.xlsb
 | 
			
		||||
./test_files/1904/1900.xlsx
 | 
			
		||||
./test_files/1904/1900.xml
 | 
			
		||||
./test_files/1904/1904.biff5
 | 
			
		||||
./test_files/1904/1904.ods
 | 
			
		||||
./test_files/1904/1904.slk
 | 
			
		||||
./test_files/1904/1904.xls
 | 
			
		||||
./test_files/1904/1904.xlsb
 | 
			
		||||
./test_files/1904/1904.xlsx
 | 
			
		||||
./test_files/1904/1904.xml
 | 
			
		||||
./test_files/artifacts/quattro/write_.csv
 | 
			
		||||
./test_files/artifacts/quattro/write_.dif
 | 
			
		||||
./test_files/artifacts/quattro/write_.slk
 | 
			
		||||
@ -22,6 +36,7 @@
 | 
			
		||||
./test_files/artifacts/wps/write.xls
 | 
			
		||||
./test_files/artifacts/wps/write.xlsx
 | 
			
		||||
./test_files/artifacts/wps/write.xml
 | 
			
		||||
./test_files/Attendance.numbers
 | 
			
		||||
./test_files/author_snowman.xls
 | 
			
		||||
./test_files/author_snowman.xls5
 | 
			
		||||
./test_files/author_snowman.xlsb
 | 
			
		||||
 | 
			
		||||
@ -24332,6 +24332,13 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	if(!safegetzipfile(zip, '[Content_Types].xml')) {
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
 | 
			
		||||
		var index_zip = CFB.find(zip, 'Index.zip');
 | 
			
		||||
		if(index_zip) {
 | 
			
		||||
			opts = dup(opts);
 | 
			
		||||
			delete opts.type;
 | 
			
		||||
			if(typeof index_zip.content == "string") opts.type = "binary";
 | 
			
		||||
			return readSync(index_zip.content, opts);
 | 
			
		||||
		}
 | 
			
		||||
		throw new Error('Unsupported ZIP file');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										7
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							@ -24222,6 +24222,13 @@ function parse_zip(zip, opts) {
 | 
			
		||||
	if(!safegetzipfile(zip, '[Content_Types].xml')) {
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
 | 
			
		||||
		var index_zip = CFB.find(zip, 'Index.zip');
 | 
			
		||||
		if(index_zip) {
 | 
			
		||||
			opts = dup(opts);
 | 
			
		||||
			delete opts.type;
 | 
			
		||||
			if(typeof index_zip.content == "string") opts.type = "binary";
 | 
			
		||||
			return readSync(index_zip.content, opts);
 | 
			
		||||
		}
 | 
			
		||||
		throw new Error('Unsupported ZIP file');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										7
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							@ -24327,6 +24327,13 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
	if(!safegetzipfile(zip, '[Content_Types].xml')) {
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
 | 
			
		||||
		if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
 | 
			
		||||
		var index_zip = CFB.find(zip, 'Index.zip');
 | 
			
		||||
		if(index_zip) {
 | 
			
		||||
			opts = dup(opts);
 | 
			
		||||
			delete opts.type;
 | 
			
		||||
			if(typeof index_zip.content == "string") opts.type = "binary";
 | 
			
		||||
			return readSync(index_zip.content, opts);
 | 
			
		||||
		}
 | 
			
		||||
		throw new Error('Unsupported ZIP file');
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user