juxscript 1.1.203 → 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 +7 -0
- package/lib/components/dataframe.ts +9 -0
- package/lib/storage/TabularDriver.d.ts +3 -0
- package/lib/storage/TabularDriver.d.ts.map +1 -1
- package/lib/storage/TabularDriver.js +49 -53
- package/lib/storage/TabularDriver.ts +47 -52
- 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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"}
|
|
@@ -568,6 +568,11 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
568
568
|
sheetChunkSize: this._sheetChunkSize
|
|
569
569
|
});
|
|
570
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
|
+
}
|
|
571
576
|
await this._driver.store(this._rawFileData.file.name, sheets[sheetNames[0]], { source: this._rawFileData.file.name });
|
|
572
577
|
if (sheetNames.length > 1) {
|
|
573
578
|
this._renderMultiSheet(sheets, this._rawFileData.file.name);
|
|
@@ -579,6 +584,7 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
579
584
|
}
|
|
580
585
|
catch (err) {
|
|
581
586
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
587
|
+
this.state.loading = false;
|
|
582
588
|
}
|
|
583
589
|
}
|
|
584
590
|
}
|
|
@@ -760,6 +766,7 @@ export class DataFrameComponent extends BaseComponent {
|
|
|
760
766
|
}
|
|
761
767
|
catch (err) {
|
|
762
768
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
769
|
+
this.state.loading = false;
|
|
763
770
|
}
|
|
764
771
|
}
|
|
765
772
|
}
|
|
@@ -691,6 +691,13 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
691
691
|
});
|
|
692
692
|
|
|
693
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
|
+
|
|
694
701
|
await this._driver.store(this._rawFileData!.file.name, sheets[sheetNames[0]], { source: this._rawFileData!.file.name });
|
|
695
702
|
|
|
696
703
|
if (sheetNames.length > 1) {
|
|
@@ -702,6 +709,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
702
709
|
this._reshapeModal!.closeModal();
|
|
703
710
|
} catch (err: any) {
|
|
704
711
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
712
|
+
this.state.loading = false;
|
|
705
713
|
}
|
|
706
714
|
}
|
|
707
715
|
}
|
|
@@ -905,6 +913,7 @@ export class DataFrameComponent extends BaseComponent<DataFrameState> {
|
|
|
905
913
|
this._reshapeModal!.closeModal();
|
|
906
914
|
} catch (err: any) {
|
|
907
915
|
this._updateStatus(`Error: ${err.message}`, 'error');
|
|
916
|
+
this.state.loading = false;
|
|
908
917
|
}
|
|
909
918
|
}
|
|
910
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":"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;;;;;;OAMG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAkJtG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,SAAS;IAYjB,KAAK,IAAI,IAAI;CAMhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAEhF"}
|
|
@@ -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;
|
|
@@ -528,80 +531,73 @@ export class TabularDriver {
|
|
|
528
531
|
processedSheets++;
|
|
529
532
|
continue;
|
|
530
533
|
}
|
|
531
|
-
//
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
raw
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
rawData[i] = new Array(maxCols).fill(null);
|
|
549
|
-
}
|
|
550
|
-
else {
|
|
551
|
-
while (rawData[i].length < maxCols) {
|
|
552
|
-
rawData[i].push(null);
|
|
553
|
-
}
|
|
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];
|
|
538
|
+
if (!cell)
|
|
539
|
+
return null;
|
|
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;
|
|
546
|
+
};
|
|
547
|
+
const readRow = (r) => {
|
|
548
|
+
const vals = [];
|
|
549
|
+
for (let c = startCol; c <= endCol; c++) {
|
|
550
|
+
vals.push(readCellValue(r, c));
|
|
554
551
|
}
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
552
|
+
return vals;
|
|
553
|
+
};
|
|
554
|
+
// Map headerRow (0-based user index) to actual sheet row
|
|
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}`);
|
|
558
|
+
if (headerSheetRow > endRow) {
|
|
559
|
+
console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
|
|
559
560
|
processedSheets++;
|
|
560
561
|
continue;
|
|
561
562
|
}
|
|
562
|
-
//
|
|
563
|
-
|
|
564
|
-
console.log(`[TabularDriver]
|
|
565
|
-
//
|
|
566
|
-
const
|
|
567
|
-
const headers = [];
|
|
568
|
-
for (let j = 0; j < maxCols; j++) {
|
|
569
|
-
const h = headerRowData[j];
|
|
563
|
+
// Read header values directly from cells
|
|
564
|
+
const headerValues = readRow(headerSheetRow);
|
|
565
|
+
console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
|
|
566
|
+
// Build headers array
|
|
567
|
+
const headers = headerValues.map((h, i) => {
|
|
570
568
|
if (h === null || h === undefined || String(h).trim() === '') {
|
|
571
|
-
|
|
572
|
-
}
|
|
573
|
-
else {
|
|
574
|
-
headers.push(String(h).trim());
|
|
569
|
+
return `__EMPTY${i > 0 ? '_' + i : ''}`;
|
|
575
570
|
}
|
|
576
|
-
|
|
577
|
-
|
|
571
|
+
return String(h).trim();
|
|
572
|
+
});
|
|
573
|
+
// Count valid headers
|
|
578
574
|
const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
|
|
579
|
-
console.log(`[TabularDriver] Headers:`, headers);
|
|
580
|
-
console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
|
|
575
|
+
console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
|
|
581
576
|
if (validHeaders.length === 0) {
|
|
582
|
-
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
|
+
}
|
|
583
582
|
processedSheets++;
|
|
584
583
|
continue;
|
|
585
584
|
}
|
|
586
|
-
// Build rows
|
|
585
|
+
// Build data rows: everything after the header row
|
|
587
586
|
const rows = [];
|
|
588
|
-
for (let
|
|
589
|
-
const rowData =
|
|
587
|
+
for (let r = headerSheetRow + 1; r <= endRow; r++) {
|
|
588
|
+
const rowData = readRow(r);
|
|
590
589
|
// Skip completely empty rows
|
|
591
|
-
|
|
592
|
-
continue;
|
|
593
|
-
const hasContent = rowData.some((cell) => cell !== null && cell !== undefined && String(cell).trim() !== '');
|
|
590
|
+
const hasContent = rowData.some(cell => cell !== null && cell !== undefined && String(cell).trim() !== '');
|
|
594
591
|
if (!hasContent)
|
|
595
592
|
continue;
|
|
596
593
|
const row = {};
|
|
597
594
|
for (let j = 0; j < headers.length; j++) {
|
|
598
|
-
row[headers[j]] =
|
|
595
|
+
row[headers[j]] = rowData[j];
|
|
599
596
|
}
|
|
600
597
|
rows.push(row);
|
|
601
598
|
}
|
|
602
|
-
console.log(`[TabularDriver] Built ${rows.length} data rows`);
|
|
599
|
+
console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
|
|
603
600
|
if (rows.length > 0) {
|
|
604
|
-
console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
|
|
605
601
|
console.log(`[TabularDriver] First row:`, rows[0]);
|
|
606
602
|
}
|
|
607
603
|
if (rows.length > 0) {
|
|
@@ -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;
|
|
@@ -656,91 +659,83 @@ export class TabularDriver {
|
|
|
656
659
|
continue;
|
|
657
660
|
}
|
|
658
661
|
|
|
659
|
-
//
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
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];
|
|
666
|
+
if (!cell) return null;
|
|
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;
|
|
671
|
+
};
|
|
667
672
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
673
|
+
const readRow = (r: number): any[] => {
|
|
674
|
+
const vals: any[] = [];
|
|
675
|
+
for (let c = startCol; c <= endCol; c++) {
|
|
676
|
+
vals.push(readCellValue(r, c));
|
|
677
|
+
}
|
|
678
|
+
return vals;
|
|
679
|
+
};
|
|
672
680
|
|
|
673
|
-
//
|
|
674
|
-
const
|
|
681
|
+
// Map headerRow (0-based user index) to actual sheet row
|
|
682
|
+
const headerSheetRow = startRow + headerRow;
|
|
675
683
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
if (!rawData[i]) {
|
|
679
|
-
rawData[i] = new Array(maxCols).fill(null);
|
|
680
|
-
} else {
|
|
681
|
-
while (rawData[i].length < maxCols) {
|
|
682
|
-
rawData[i].push(null);
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
}
|
|
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
686
|
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
console.warn(`[TabularDriver] headerRow ${headerRow} exceeds data length ${rawData.length}`);
|
|
687
|
+
if (headerSheetRow > endRow) {
|
|
688
|
+
console.warn(`[TabularDriver] headerRow ${headerRow} (sheet row ${headerSheetRow}) exceeds endRow ${endRow}`);
|
|
690
689
|
processedSheets++;
|
|
691
690
|
continue;
|
|
692
691
|
}
|
|
693
692
|
|
|
694
|
-
//
|
|
695
|
-
|
|
696
|
-
console.log(`[TabularDriver]
|
|
693
|
+
// Read header values directly from cells
|
|
694
|
+
const headerValues = readRow(headerSheetRow);
|
|
695
|
+
console.log(`[TabularDriver] Raw header values at sheet row ${headerSheetRow}:`, headerValues);
|
|
697
696
|
|
|
698
|
-
//
|
|
699
|
-
const
|
|
700
|
-
const headers: string[] = [];
|
|
701
|
-
for (let j = 0; j < maxCols; j++) {
|
|
702
|
-
const h = headerRowData[j];
|
|
697
|
+
// Build headers array
|
|
698
|
+
const headers: string[] = headerValues.map((h: any, i: number) => {
|
|
703
699
|
if (h === null || h === undefined || String(h).trim() === '') {
|
|
704
|
-
|
|
705
|
-
} else {
|
|
706
|
-
headers.push(String(h).trim());
|
|
700
|
+
return `__EMPTY${i > 0 ? '_' + i : ''}`;
|
|
707
701
|
}
|
|
708
|
-
|
|
702
|
+
return String(h).trim();
|
|
703
|
+
});
|
|
709
704
|
|
|
710
|
-
// Count valid
|
|
705
|
+
// Count valid headers
|
|
711
706
|
const validHeaders = headers.filter(h => !h.startsWith('__EMPTY'));
|
|
712
|
-
console.log(`[TabularDriver] Headers:`, headers);
|
|
713
|
-
console.log(`[TabularDriver] Valid headers: ${validHeaders.length}/${headers.length}`);
|
|
707
|
+
console.log(`[TabularDriver] Headers (${validHeaders.length} valid / ${headers.length} total):`, headers);
|
|
714
708
|
|
|
715
709
|
if (validHeaders.length === 0) {
|
|
716
|
-
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
|
+
}
|
|
717
715
|
processedSheets++;
|
|
718
716
|
continue;
|
|
719
717
|
}
|
|
720
718
|
|
|
721
|
-
// Build rows
|
|
719
|
+
// Build data rows: everything after the header row
|
|
722
720
|
const rows: Record<string, any>[] = [];
|
|
723
|
-
for (let
|
|
724
|
-
const rowData =
|
|
721
|
+
for (let r = headerSheetRow + 1; r <= endRow; r++) {
|
|
722
|
+
const rowData = readRow(r);
|
|
725
723
|
|
|
726
724
|
// Skip completely empty rows
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
const hasContent = rowData.some((cell: any) =>
|
|
725
|
+
const hasContent = rowData.some(cell =>
|
|
730
726
|
cell !== null && cell !== undefined && String(cell).trim() !== ''
|
|
731
727
|
);
|
|
732
728
|
if (!hasContent) continue;
|
|
733
729
|
|
|
734
730
|
const row: Record<string, any> = {};
|
|
735
731
|
for (let j = 0; j < headers.length; j++) {
|
|
736
|
-
row[headers[j]] =
|
|
732
|
+
row[headers[j]] = rowData[j];
|
|
737
733
|
}
|
|
738
734
|
rows.push(row);
|
|
739
735
|
}
|
|
740
736
|
|
|
741
|
-
console.log(`[TabularDriver] Built ${rows.length} data rows`);
|
|
737
|
+
console.log(`[TabularDriver] Built ${rows.length} data rows for sheet "${sheetName}"`);
|
|
742
738
|
if (rows.length > 0) {
|
|
743
|
-
console.log(`[TabularDriver] First row keys:`, Object.keys(rows[0]));
|
|
744
739
|
console.log(`[TabularDriver] First row:`, rows[0]);
|
|
745
740
|
}
|
|
746
741
|
|