Skip to content

Commit ecfa614

Browse files
committed
parse icloud.com numbers exports
1 parent ee8b37b commit ecfa614

File tree

11 files changed

+372
-214
lines changed

11 files changed

+372
-214
lines changed

bits/85_parsezip.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ function parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
7979
if(!safegetzipfile(zip, '[Content_Types].xml')) {
8080
if(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');
8181
if(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');
82+
var index_zip = CFB.find(zip, 'Index.zip');
83+
if(index_zip) {
84+
opts = dup(opts);
85+
delete opts.type;
86+
if(typeof index_zip.content == "string") opts.type = "binary";
87+
return readSync(index_zip.content, opts);
88+
}
8289
throw new Error('Unsupported ZIP file');
8390
}
8491

test.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2320,6 +2320,11 @@ describe('numbers', function() {
23202320
assert.equal(get_cell(ws2, "A1").v, 1);
23212321
assert.equal(get_cell(ws2, "ALL2").v, 2);
23222322
});
2323+
it('should support icloud.com files', function() {
2324+
var wb = X.read(fs.readFileSync(dir + 'Attendance.numbers'), {type:TYPE, WTF:true});
2325+
var ws = wb.Sheets["Attendance"];
2326+
assert.equal(get_cell(ws, "A1").v, "Date");
2327+
});
23232328
});
23242329

23252330
describe('dbf', function() {
@@ -2679,7 +2684,7 @@ describe('corner cases', function() {
26792684
var wb = X.read(fs.readFileSync(w), {type:TYPE});
26802685
var ws = wb.Sheets[wb.SheetNames[0]];
26812686
var B1 = get_cell(ws, "B1"), B2 = get_cell(ws, "B2");
2682-
var lio = w.match(/\.[^\.]*$/).index, stem = w.slice(0, lio).toLowerCase(), ext = w.slice(lio + 1).toLowerCase()
2687+
var lio = w.match(/\.[^\.]*$/).index, stem = w.slice(0, lio).toLowerCase(), ext = w.slice(lio + 1).toLowerCase();
26832688
switch(ext) {
26842689
case 'fm3': break;
26852690

test.mjs

Lines changed: 32 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,6 +2226,11 @@ Deno.test('numbers', async function(t) {
22262226
assert.equal(get_cell(ws2, "A1").v, 1);
22272227
assert.equal(get_cell(ws2, "ALL2").v, 2);
22282228
});
2229+
await t.step('should support icloud.com files', async function(t) {
2230+
var wb = X.read(fs.readFileSync(dir + 'Attendance.numbers'), {type:TYPE, WTF:true});
2231+
var ws = wb.Sheets["Attendance"];
2232+
assert.equal(get_cell(ws, "A1").v, "Date");
2233+
});
22292234
});
22302235

22312236
Deno.test('dbf', async function(t) {

test_files

0 commit comments

Comments
 (0)