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