juxscript 1.1.202 → 1.1.204
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/dataframe.d.ts.map +1 -1
- package/lib/components/dataframe.js +24 -3
- package/lib/components/dataframe.ts +26 -3
- package/lib/storage/TabularDriver.d.ts +3 -0
- package/lib/storage/TabularDriver.d.ts.map +1 -1
- package/lib/storage/TabularDriver.js +36 -19
- package/lib/storage/TabularDriver.ts +37 -19
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dataframe.d.ts","sourceRoot":"","sources":["dataframe.ts"],"names":[],"mappings":"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"}
|
|
@@ -372,9 +372,23 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
372
372
|
this.state.sourceName = sourceName;
|
|
373
373
|
this.state.rowCount = df.height;
|
|
374
374
|
this.state.colCount = df.width;
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
375
|
+
// Only strip __EMPTY columns that are ENTIRELY null/empty
|
|
376
|
+
const cols = df.columns;
|
|
377
|
+
const rows = df.toRows();
|
|
378
|
+
const emptyColumns = cols.filter(c => {
|
|
379
|
+
if (!c.startsWith('__EMPTY'))
|
|
380
|
+
return false;
|
|
381
|
+
// Check if ALL values in this column are null/empty
|
|
382
|
+
return rows.every(row => {
|
|
383
|
+
const val = row[c];
|
|
384
|
+
return val === null || val === undefined || String(val).trim() === '';
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
if (emptyColumns.length > 0) {
|
|
388
|
+
const keepCols = cols.filter(c => !emptyColumns.includes(c));
|
|
389
|
+
if (keepCols.length > 0) {
|
|
390
|
+
this._df = df.select(...keepCols);
|
|
391
|
+
}
|
|
378
392
|
}
|
|
379
393
|
if (this._table && this._df) {
|
|
380
394
|
const columnDefs = this._df.columns.map(col => ({ key: col, label: col }));
|
|
@@ -554,6 +568,11 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
554
568
|
sheetChunkSize: this._sheetChunkSize
|
|
555
569
|
});
|
|
556
570
|
const sheetNames = Object.keys(sheets);
|
|
571
|
+
if (sheetNames.length === 0) {
|
|
572
|
+
this._updateStatus(`No data found with header at row ${headerRow}. Try a different row.`, 'error');
|
|
573
|
+
this.state.loading = false;
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
557
576
|
await this._driver.store(this._rawFileData.file.name, sheets[sheetNames[0]], { source: this._rawFileData.file.name });
|
|
558
577
|
if (sheetNames.length > 1) {
|
|
559
578
|
this._renderMultiSheet(sheets, this._rawFileData.file.name);
|
|
@@ -565,6 +584,7 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
565
584
|
}
|
|
566
585
|
catch (err) {
|
|
567
586
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
587
|
+
this.state.loading = false;
|
|
568
588
|
}
|
|
569
589
|
}
|
|
570
590
|
}
|
|
@@ -746,6 +766,7 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
746
766
|
}
|
|
747
767
|
catch (err) {
|
|
748
768
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
769
|
+
this.state.loading = false;
|
|
749
770
|
}
|
|
750
771
|
}
|
|
751
772
|
}
|
|
@@ -463,9 +463,23 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
463
463
|
this.state.rowCount = df.height;
|
|
464
464
|
this.state.colCount = df.width;
|
|
465
465
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
466
|
+
// Only strip __EMPTY columns that are ENTIRELY null/empty
|
|
467
|
+
const cols = df.columns;
|
|
468
|
+
const rows = df.toRows();
|
|
469
|
+
const emptyColumns = cols.filter(c => {
|
|
470
|
+
if (!c.startsWith('__EMPTY')) return false;
|
|
471
|
+
// Check if ALL values in this column are null/empty
|
|
472
|
+
return rows.every(row => {
|
|
473
|
+
const val = row[c];
|
|
474
|
+
return val === null || val === undefined || String(val).trim() === '';
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
if (emptyColumns.length > 0) {
|
|
479
|
+
const keepCols = cols.filter(c => !emptyColumns.includes(c));
|
|
480
|
+
if (keepCols.length > 0) {
|
|
481
|
+
this._df = df.select(...keepCols);
|
|
482
|
+
}
|
|
469
483
|
}
|
|
470
484
|
|
|
471
485
|
if (this._table && this._df) {
|
|
@@ -677,6 +691,13 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
677
691
|
});
|
|
678
692
|
|
|
679
693
|
const sheetNames = Object.keys(sheets);
|
|
694
|
+
|
|
695
|
+
if (sheetNames.length === 0) {
|
|
696
|
+
this._updateStatus(`No data found with header at row ${headerRow}. Try a different row.`, 'error');
|
|
697
|
+
this.state.loading = false;
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
|
|
680
701
|
await this._driver.store(this._rawFileData!.file.name, sheets[sheetNames[0]], { source: this._rawFileData!.file.name });
|
|
681
702
|
|
|
682
703
|
if (sheetNames.length > 1) {
|
|
@@ -688,6 +709,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
688
709
|
this._reshapeModal!.closeModal();
|
|
689
710
|
} catch (err: any) {
|
|
690
711
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
712
|
+
this.state.loading = false;
|
|
691
713
|
}
|
|
692
714
|
}
|
|
693
715
|
}
|
|
@@ -891,6 +913,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
891
913
|
this._reshapeModal!.closeModal();
|
|
892
914
|
} catch (err: any) {
|
|
893
915
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
916
|
+
this.state.loading = false;
|
|
894
917
|
}
|
|
895
918
|
}
|
|
896
919
|
}
|
|
@@ -90,6 +90,9 @@ export declare class TabularDriver {
|
|
|
90
90
|
/**
|
|
91
91
|
* ✅ FIXED: Stream Excel file with optional headerRow override
|
|
92
92
|
* headerRow is 0-based: 0 = first row, 1 = second row, etc.
|
|
93
|
+
*
|
|
94
|
+
* Uses direct cell access instead of sheet_to_json to avoid
|
|
95
|
+
* issues with blank row handling and sparse arrays.
|
|
93
96
|
*/
|
|
94
97
|
streamFileMultiSheet(file: File, options?: ParseOptions): Promise<Record<string, DataFrame>>;
|
|
95
98
|
private _splitLines;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,GAAG,CAA4B;gBAE3B,MAAM,GAAE,MAAsB,EAAE,SAAS,GAAE,MAAiB;IAKlE,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IA4BlC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS;IA6D7D;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAoG5E;;OAEG;YACW,UAAU;IAuExB;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBlD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBzF;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAwBjD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA4BzD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAqBlH;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IA0ExE
|
|
1
|
+
{"version":3,"file":"TabularDriver.d.ts","sourceRoot":"","sources":["TabularDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -489,6 +489,9 @@ export class TabularDriver {
|
|
|
489
489
|
/**
|
|
490
490
|
* ✅ FIXED: Stream Excel file with optional headerRow override
|
|
491
491
|
* headerRow is 0-based: 0 = first row, 1 = second row, etc.
|
|
492
|
+
*
|
|
493
|
+
* Uses direct cell access instead of sheet_to_json to avoid
|
|
494
|
+
* issues with blank row handling and sparse arrays.
|
|
492
495
|
*/
|
|
493
496
|
async streamFileMultiSheet(file, options = {}) {
|
|
494
497
|
const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
|
|
@@ -520,41 +523,46 @@ export class TabularDriver {
|
|
|
520
523
|
continue;
|
|
521
524
|
}
|
|
522
525
|
const range = XLSX.utils.decode_range(ref);
|
|
523
|
-
const startRow = range.s.r;
|
|
524
|
-
const endRow = range.e.r;
|
|
525
|
-
const startCol = range.s.c;
|
|
526
|
-
const endCol = range.e.c;
|
|
527
|
-
const numCols = endCol - startCol + 1;
|
|
526
|
+
const startRow = range.s.r;
|
|
527
|
+
const endRow = range.e.r;
|
|
528
|
+
const startCol = range.s.c;
|
|
529
|
+
const endCol = range.e.c;
|
|
528
530
|
if (endRow < startRow) {
|
|
529
531
|
processedSheets++;
|
|
530
532
|
continue;
|
|
531
533
|
}
|
|
532
|
-
//
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
const cell = worksheet[
|
|
534
|
+
// Direct cell reader - bypasses sheet_to_json completely
|
|
535
|
+
const readCellValue = (r, c) => {
|
|
536
|
+
const addr = XLSX.utils.encode_cell({ r, c });
|
|
537
|
+
const cell = worksheet[addr];
|
|
536
538
|
if (!cell)
|
|
537
539
|
return null;
|
|
538
|
-
//
|
|
539
|
-
|
|
540
|
+
// Prefer formatted string (w) for display, fall back to raw value (v)
|
|
541
|
+
if (cell.w !== undefined)
|
|
542
|
+
return cell.w;
|
|
543
|
+
if (cell.v !== undefined)
|
|
544
|
+
return cell.v;
|
|
545
|
+
return null;
|
|
540
546
|
};
|
|
541
|
-
// Helper: read an entire row as an array
|
|
542
547
|
const readRow = (r) => {
|
|
543
548
|
const vals = [];
|
|
544
549
|
for (let c = startCol; c <= endCol; c++) {
|
|
545
|
-
vals.push(
|
|
550
|
+
vals.push(readCellValue(r, c));
|
|
546
551
|
}
|
|
547
552
|
return vals;
|
|
548
553
|
};
|
|
549
|
-
//
|
|
554
|
+
// Map headerRow (0-based user index) to actual sheet row
|
|
550
555
|
const headerSheetRow = startRow + headerRow;
|
|
556
|
+
console.log(`[TabularDriver] Sheet "${sheetName}": range=${ref}, startRow=${startRow}, endRow=${endRow}, startCol=${startCol}, endCol=${endCol}`);
|
|
557
|
+
console.log(`[TabularDriver] headerRow=${headerRow}, headerSheetRow=${headerSheetRow}`);
|
|
551
558
|
if (headerSheetRow > endRow) {
|
|
552
|
-
console.warn(`[TabularDriver] headerRow ${headerRow}
|
|
559
|
+
console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
|
|
553
560
|
processedSheets++;
|
|
554
561
|
continue;
|
|
555
562
|
}
|
|
556
|
-
// Read header
|
|
563
|
+
// Read header values directly from cells
|
|
557
564
|
const headerValues = readRow(headerSheetRow);
|
|
565
|
+
console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
|
|
558
566
|
// Build headers array
|
|
559
567
|
const headers = headerValues.map((h, i) => {
|
|
560
568
|
if (h === null || h === undefined || String(h).trim() === '') {
|
|
@@ -562,10 +570,15 @@ export class TabularDriver {
|
|
|
562
570
|
}
|
|
563
571
|
return String(h).trim();
|
|
564
572
|
});
|
|
565
|
-
//
|
|
573
|
+
// Count valid headers
|
|
566
574
|
const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
|
|
575
|
+
console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
|
|
567
576
|
if (validHeaders.length === 0) {
|
|
568
|
-
console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
|
|
577
|
+
console.warn(`[TabularDriver] No valid headers found at row ${headerRow} (sheet row ${headerSheetRow}) in sheet "${sheetName}"`);
|
|
578
|
+
// Log surrounding rows for debugging
|
|
579
|
+
for (let debugR = Math.max(startRow, headerSheetRow - 2); debugR <= Math.min(endRow, headerSheetRow + 2); debugR++) {
|
|
580
|
+
console.log(`[TabularDriver] row ${debugR}:`, readRow(debugR));
|
|
581
|
+
}
|
|
569
582
|
processedSheets++;
|
|
570
583
|
continue;
|
|
571
584
|
}
|
|
@@ -579,10 +592,14 @@ export class TabularDriver {
|
|
|
579
592
|
continue;
|
|
580
593
|
const row = {};
|
|
581
594
|
for (let j = 0; j < headers.length; j++) {
|
|
582
|
-
row[headers[j]] = rowData[j]
|
|
595
|
+
row[headers[j]] = rowData[j];
|
|
583
596
|
}
|
|
584
597
|
rows.push(row);
|
|
585
598
|
}
|
|
599
|
+
console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
|
|
600
|
+
if (rows.length > 0) {
|
|
601
|
+
console.log(`[TabularDriver] First row:`, rows[0]);
|
|
602
|
+
}
|
|
586
603
|
if (rows.length > 0) {
|
|
587
604
|
sheets[sheetName] = new DataFrame(rows);
|
|
588
605
|
}
|
|
@@ -609,6 +609,9 @@ export class TabularDriver {
|
|
|
609
609
|
/**
|
|
610
610
|
* ✅ FIXED: Stream Excel file with optional headerRow override
|
|
611
611
|
* headerRow is 0-based: 0 = first row, 1 = second row, etc.
|
|
612
|
+
*
|
|
613
|
+
* Uses direct cell access instead of sheet_to_json to avoid
|
|
614
|
+
* issues with blank row handling and sparse arrays.
|
|
612
615
|
*/
|
|
613
616
|
async streamFileMultiSheet(file: File, options: ParseOptions = {}): Promise<Record<string, DataFrame>> {
|
|
614
617
|
const { maxSheetSize = 100000, sheetChunkSize = 10000, onProgress, headerRow = 0 } = options;
|
|
@@ -646,46 +649,50 @@ export class TabularDriver {
|
|
|
646
649
|
}
|
|
647
650
|
|
|
648
651
|
const range = XLSX.utils.decode_range(ref);
|
|
649
|
-
const startRow = range.s.r;
|
|
650
|
-
const endRow = range.e.r;
|
|
651
|
-
const startCol = range.s.c;
|
|
652
|
-
const endCol = range.e.c;
|
|
653
|
-
const numCols = endCol - startCol + 1;
|
|
652
|
+
const startRow = range.s.r;
|
|
653
|
+
const endRow = range.e.r;
|
|
654
|
+
const startCol = range.s.c;
|
|
655
|
+
const endCol = range.e.c;
|
|
654
656
|
|
|
655
657
|
if (endRow < startRow) {
|
|
656
658
|
processedSheets++;
|
|
657
659
|
continue;
|
|
658
660
|
}
|
|
659
661
|
|
|
660
|
-
//
|
|
661
|
-
const
|
|
662
|
-
const
|
|
663
|
-
const cell = worksheet[
|
|
662
|
+
// Direct cell reader - bypasses sheet_to_json completely
|
|
663
|
+
const readCellValue = (r: number, c: number): any => {
|
|
664
|
+
const addr = XLSX.utils.encode_cell({ r, c });
|
|
665
|
+
const cell = worksheet[addr];
|
|
664
666
|
if (!cell) return null;
|
|
665
|
-
//
|
|
666
|
-
|
|
667
|
+
// Prefer formatted string (w) for display, fall back to raw value (v)
|
|
668
|
+
if (cell.w !== undefined) return cell.w;
|
|
669
|
+
if (cell.v !== undefined) return cell.v;
|
|
670
|
+
return null;
|
|
667
671
|
};
|
|
668
672
|
|
|
669
|
-
// Helper: read an entire row as an array
|
|
670
673
|
const readRow = (r: number): any[] => {
|
|
671
674
|
const vals: any[] = [];
|
|
672
675
|
for (let c = startCol; c <= endCol; c++) {
|
|
673
|
-
vals.push(
|
|
676
|
+
vals.push(readCellValue(r, c));
|
|
674
677
|
}
|
|
675
678
|
return vals;
|
|
676
679
|
};
|
|
677
680
|
|
|
678
|
-
//
|
|
681
|
+
// Map headerRow (0-based user index) to actual sheet row
|
|
679
682
|
const headerSheetRow = startRow + headerRow;
|
|
680
683
|
|
|
684
|
+
console.log(`[TabularDriver] Sheet "${sheetName}": range=${ref}, startRow=${startRow}, endRow=${endRow}, startCol=${startCol}, endCol=${endCol}`);
|
|
685
|
+
console.log(`[TabularDriver] headerRow=${headerRow}, headerSheetRow=${headerSheetRow}`);
|
|
686
|
+
|
|
681
687
|
if (headerSheetRow > endRow) {
|
|
682
|
-
console.warn(`[TabularDriver] headerRow ${headerRow}
|
|
688
|
+
console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
|
|
683
689
|
processedSheets++;
|
|
684
690
|
continue;
|
|
685
691
|
}
|
|
686
692
|
|
|
687
|
-
// Read header
|
|
693
|
+
// Read header values directly from cells
|
|
688
694
|
const headerValues = readRow(headerSheetRow);
|
|
695
|
+
console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
|
|
689
696
|
|
|
690
697
|
// Build headers array
|
|
691
698
|
const headers: string[] = headerValues.map((h: any, i: number) => {
|
|
@@ -695,10 +702,16 @@ export class TabularDriver {
|
|
|
695
702
|
return String(h).trim();
|
|
696
703
|
});
|
|
697
704
|
|
|
698
|
-
//
|
|
705
|
+
// Count valid headers
|
|
699
706
|
const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
|
|
707
|
+
console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
|
|
708
|
+
|
|
700
709
|
if (validHeaders.length === 0) {
|
|
701
|
-
console.warn(`[TabularDriver] No valid headers found at row ${headerRow} in sheet "${sheetName}"`);
|
|
710
|
+
console.warn(`[TabularDriver] No valid headers found at row ${headerRow} (sheet row ${headerSheetRow}) in sheet "${sheetName}"`);
|
|
711
|
+
// Log surrounding rows for debugging
|
|
712
|
+
for (let debugR = Math.max(startRow, headerSheetRow - 2); debugR <= Math.min(endRow, headerSheetRow + 2); debugR++) {
|
|
713
|
+
console.log(`[TabularDriver] row ${debugR}:`, readRow(debugR));
|
|
714
|
+
}
|
|
702
715
|
processedSheets++;
|
|
703
716
|
continue;
|
|
704
717
|
}
|
|
@@ -716,11 +729,16 @@ export class TabularDriver {
|
|
|
716
729
|
|
|
717
730
|
const row: Record<string, any> = {};
|
|
718
731
|
for (let j = 0; j < headers.length; j++) {
|
|
719
|
-
row[headers[j]] = rowData[j]
|
|
732
|
+
row[headers[j]] = rowData[j];
|
|
720
733
|
}
|
|
721
734
|
rows.push(row);
|
|
722
735
|
}
|
|
723
736
|
|
|
737
|
+
console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
|
|
738
|
+
if (rows.length > 0) {
|
|
739
|
+
console.log(`[TabularDriver] First row:`, rows[0]);
|
|
740
|
+
}
|
|
741
|
+
|
|
724
742
|
if (rows.length > 0) {
|
|
725
743
|
sheets[sheetName] = new DataFrame(rows);
|
|
726
744
|
}
|