@@ -180,6 +180,7 @@ function dbf_to_aoa(buf, opts)/*:AOA*/ {
180
180
}
181
181
}
182
182
if ( ft != 0x02 ) if ( d . l < d . length && d [ d . l ++ ] != 0x1A ) throw new Error ( "DBF EOF Marker missing " + ( d . l - 1 ) + " of " + d . length + " " + d [ d . l - 1 ] . toString ( 16 ) ) ;
183
+ if ( opts && opts . sheetRows ) out = out . slice ( 0 , opts . sheetRows ) ;
183
184
return out ;
184
185
}
185
186
@@ -206,7 +207,8 @@ function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
206
207
for ( i = 0 ; i < headers . length ; ++ i ) {
207
208
if ( i == null ) continue ;
208
209
++ hcnt ;
209
- if ( typeof headers [ i ] !== 'string' ) throw new Error ( "DBF Invalid column name" ) ;
210
+ if ( typeof headers [ i ] === 'number' ) headers [ i ] = headers [ i ] . toString ( 10 ) ;
211
+ if ( typeof headers [ i ] !== 'string' ) throw new Error ( "DBF Invalid column name " + headers [ i ] + " |" + ( typeof headers [ i ] ) + "|" ) ;
210
212
if ( headers . indexOf ( headers [ i ] ) !== i ) for ( j = 0 ; j < 1024 ; ++ j )
211
213
if ( headers . indexOf ( headers [ i ] + "_" + j ) == - 1 ) { headers [ i ] += "_" + j ; break ; }
212
214
}
@@ -394,6 +396,7 @@ var SYLK = (function() {
394
396
}
395
397
if ( rowinfo . length > 0 ) sht [ '!rows' ] = rowinfo ;
396
398
if ( colinfo . length > 0 ) sht [ '!cols' ] = colinfo ;
399
+ if ( opts && opts . sheetRows ) arr = arr . slice ( 0 , opts . sheetRows ) ;
397
400
return [ arr , sht ] ;
398
401
}
399
402
@@ -484,7 +487,7 @@ var DIF = (function() {
484
487
}
485
488
throw new Error ( "Unrecognized type " + opts . type ) ;
486
489
}
487
- function dif_to_aoa_str ( str /*:string*/ /*:: , opts*/ ) /*:AOA*/ {
490
+ function dif_to_aoa_str ( str /*:string*/ , opts ) /*:AOA*/ {
488
491
var records = str . split ( '\n' ) , R = - 1 , C = - 1 , ri = 0 , arr /*:AOA*/ = [ ] ;
489
492
for ( ; ri !== records . length ; ++ ri ) {
490
493
if ( records [ ri ] . trim ( ) === 'BOT' ) { arr [ ++ R ] = [ ] ; C = 0 ; continue ; }
@@ -512,6 +515,7 @@ var DIF = (function() {
512
515
}
513
516
if ( data === 'EOD' ) break ;
514
517
}
518
+ if ( opts && opts . sheetRows ) arr = arr . slice ( 0 , opts . sheetRows ) ;
515
519
return arr ;
516
520
}
517
521
@@ -585,7 +589,7 @@ var ETH = (function() {
585
589
function decode ( s /*:string*/ ) /*:string*/ { return s . replace ( / \\ b / g, "\\" ) . replace ( / \\ c / g, ":" ) . replace ( / \\ n / g, "\n" ) ; }
586
590
function encode ( s /*:string*/ ) /*:string*/ { return s . replace ( / \\ / g, "\\b" ) . replace ( / : / g, "\\c" ) . replace ( / \n / g, "\\n" ) ; }
587
591
588
- function eth_to_aoa ( str /*:string*/ /*:: , opts*/ ) /*:AOA*/ {
592
+ function eth_to_aoa ( str /*:string*/ , opts ) /*:AOA*/ {
589
593
var records = str . split ( '\n' ) , R = - 1 , C = - 1 , ri = 0 , arr /*:AOA*/ = [ ] ;
590
594
for ( ; ri !== records . length ; ++ ri ) {
591
595
var record = records [ ri ] . trim ( ) . split ( ":" ) ;
@@ -606,6 +610,7 @@ var ETH = (function() {
606
610
if ( record [ 2 ] == 'vtf' ) arr [ R ] [ C ] = [ arr [ R ] [ C ] , _f ] ;
607
611
}
608
612
}
613
+ if ( opts && opts . sheetRows ) arr = arr . slice ( 0 , opts . sheetRows ) ;
609
614
return arr ;
610
615
}
611
616
@@ -713,6 +718,7 @@ var PRN = (function() {
713
718
for ( C = 1 ; C <= ( lines [ R ] . length - start ) / 10 + 1 ; ++ C )
714
719
set_text_arr ( lines [ R ] . slice ( start + ( C - 1 ) * 10 , start + C * 10 ) . trim ( ) , arr , R , C , o ) ;
715
720
}
721
+ if ( o . sheetRows ) arr = arr . slice ( 0 , o . sheetRows ) ;
716
722
return arr ;
717
723
}
718
724
@@ -799,11 +805,11 @@ var PRN = (function() {
799
805
start = end + 1 ;
800
806
if ( range . e . c < C ) range . e . c = C ;
801
807
if ( range . e . r < R ) range . e . r = R ;
802
- if ( cc == sepcc ) ++ C ; else { C = 0 ; ++ R ; }
808
+ if ( cc == sepcc ) ++ C ; else { C = 0 ; ++ R ; if ( o . sheetRows && o . sheetRows <= R ) return true ; }
803
809
}
804
- for ( ; end < str . length ; ++ end ) switch ( ( cc = str . charCodeAt ( end ) ) ) {
810
+ outer: for ( ; end < str . length ; ++ end ) switch ( ( cc = str . charCodeAt ( end ) ) ) {
805
811
case 0x22 : instr = ! instr ; break ;
806
- case sepcc : case 0x0a : case 0x0d : if ( ! instr ) finish_cell ( ) ; break ;
812
+ case sepcc : case 0x0a : case 0x0d : if ( ! instr && finish_cell ( ) ) break outer ; break ;
807
813
default : break ;
808
814
}
809
815
if ( end - start > 0 ) finish_cell ( ) ;
0 commit comments