@hewliyang/headless-spreadjs 0.0.1 → 0.0.3

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.
Files changed (85) hide show
  1. package/README.md +6 -4
  2. package/dist/cli/a1.d.ts +28 -0
  3. package/dist/cli/a1.d.ts.map +1 -0
  4. package/dist/cli/a1.js +66 -0
  5. package/dist/cli/a1.js.map +1 -0
  6. package/dist/cli/commands/clear.d.ts +2 -0
  7. package/dist/cli/commands/clear.d.ts.map +1 -0
  8. package/dist/cli/commands/clear.js +24 -0
  9. package/dist/cli/commands/clear.js.map +1 -0
  10. package/dist/cli/commands/copy.d.ts +2 -0
  11. package/dist/cli/commands/copy.d.ts.map +1 -0
  12. package/dist/cli/commands/copy.js +51 -0
  13. package/dist/cli/commands/copy.js.map +1 -0
  14. package/dist/cli/commands/create.d.ts +2 -0
  15. package/dist/cli/commands/create.d.ts.map +1 -0
  16. package/dist/cli/commands/create.js +7 -0
  17. package/dist/cli/commands/create.js.map +1 -0
  18. package/dist/cli/commands/csv.d.ts +2 -0
  19. package/dist/cli/commands/csv.d.ts.map +1 -0
  20. package/dist/cli/commands/csv.js +33 -0
  21. package/dist/cli/commands/csv.js.map +1 -0
  22. package/dist/cli/commands/eval.d.ts +2 -0
  23. package/dist/cli/commands/eval.d.ts.map +1 -0
  24. package/dist/cli/commands/eval.js +45 -0
  25. package/dist/cli/commands/eval.js.map +1 -0
  26. package/dist/cli/commands/get.d.ts +4 -0
  27. package/dist/cli/commands/get.d.ts.map +1 -0
  28. package/dist/cli/commands/get.js +55 -0
  29. package/dist/cli/commands/get.js.map +1 -0
  30. package/dist/cli/commands/info.d.ts +2 -0
  31. package/dist/cli/commands/info.d.ts.map +1 -0
  32. package/dist/cli/commands/info.js +34 -0
  33. package/dist/cli/commands/info.js.map +1 -0
  34. package/dist/cli/commands/objects.d.ts +2 -0
  35. package/dist/cli/commands/objects.d.ts.map +1 -0
  36. package/dist/cli/commands/objects.js +71 -0
  37. package/dist/cli/commands/objects.js.map +1 -0
  38. package/dist/cli/commands/resize.d.ts +7 -0
  39. package/dist/cli/commands/resize.d.ts.map +1 -0
  40. package/dist/cli/commands/resize.js +51 -0
  41. package/dist/cli/commands/resize.js.map +1 -0
  42. package/dist/cli/commands/rows-cols.d.ts +8 -0
  43. package/dist/cli/commands/rows-cols.d.ts.map +1 -0
  44. package/dist/cli/commands/rows-cols.js +77 -0
  45. package/dist/cli/commands/rows-cols.js.map +1 -0
  46. package/dist/cli/commands/search.d.ts +7 -0
  47. package/dist/cli/commands/search.d.ts.map +1 -0
  48. package/dist/cli/commands/search.js +67 -0
  49. package/dist/cli/commands/search.js.map +1 -0
  50. package/dist/cli/commands/set.d.ts +2 -0
  51. package/dist/cli/commands/set.d.ts.map +1 -0
  52. package/dist/cli/commands/set.js +67 -0
  53. package/dist/cli/commands/set.js.map +1 -0
  54. package/dist/cli/commands/sheet.d.ts +3 -0
  55. package/dist/cli/commands/sheet.d.ts.map +1 -0
  56. package/dist/cli/commands/sheet.js +62 -0
  57. package/dist/cli/commands/sheet.js.map +1 -0
  58. package/dist/cli/context.d.ts +15 -0
  59. package/dist/cli/context.d.ts.map +1 -0
  60. package/dist/cli/context.js +34 -0
  61. package/dist/cli/context.js.map +1 -0
  62. package/dist/cli/index.d.ts +3 -0
  63. package/dist/cli/index.d.ts.map +1 -0
  64. package/dist/cli/index.js +31 -0
  65. package/dist/cli/index.js.map +1 -0
  66. package/dist/cli/main.d.ts +2 -0
  67. package/dist/cli/main.d.ts.map +1 -0
  68. package/dist/cli/main.js +181 -0
  69. package/dist/cli/main.js.map +1 -0
  70. package/dist/cli/output.d.ts +10 -0
  71. package/dist/cli/output.d.ts.map +1 -0
  72. package/dist/cli/output.js +28 -0
  73. package/dist/cli/output.js.map +1 -0
  74. package/dist/cli/styles.d.ts +27 -0
  75. package/dist/cli/styles.d.ts.map +1 -0
  76. package/dist/cli/styles.js +105 -0
  77. package/dist/cli/styles.js.map +1 -0
  78. package/dist/shims.d.ts.map +1 -1
  79. package/dist/shims.js +52 -0
  80. package/dist/shims.js.map +1 -1
  81. package/package.json +20 -10
  82. package/dist/workbook.d.ts +0 -19
  83. package/dist/workbook.d.ts.map +0 -1
  84. package/dist/workbook.js +0 -177
  85. package/dist/workbook.js.map +0 -1
package/README.md CHANGED
@@ -10,18 +10,20 @@ Headless Excel workbook engine for Node.js — powered by [SpreadJS](https://dev
10
10
 
11
11
  ## System Dependencies
12
12
 
13
- On Linux, install Cairo/Pango (required by the `canvas` npm package):
13
+ Cairo/Pango are required by the `canvas` npm package:
14
14
 
15
15
  ```bash
16
+ # macOS
17
+ brew install pkg-config cairo pango libpng jpeg giflib librsvg
18
+
19
+ # Linux (Debian/Ubuntu)
16
20
  sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
17
21
  ```
18
22
 
19
- macOS: `brew install pkg-config cairo pango libpng jpeg giflib librsvg`
20
-
21
23
  ## Install
22
24
 
23
25
  ```bash
24
- pnpm add headless-spreadjs
26
+ npm install headless-spreadjs
25
27
  ```
26
28
 
27
29
  ## Usage
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A1-notation ↔ 0-indexed (row, col) conversion utilities.
3
+ */
4
+ export interface CellRef {
5
+ row: number;
6
+ col: number;
7
+ }
8
+ export interface RangeRef {
9
+ sheet?: string;
10
+ start: CellRef;
11
+ end: CellRef;
12
+ }
13
+ export declare function colToIndex(col: string): number;
14
+ export declare function indexToCol(index: number): string;
15
+ export declare function cellToA1(row: number, col: number): string;
16
+ export declare function parseCell(ref: string): CellRef;
17
+ /**
18
+ * Parse a reference like "Sheet1!A1:C10", "'My Sheet'!A1:C10", or "A1:C10".
19
+ */
20
+ export declare function parseRef(ref: string): RangeRef;
21
+ /**
22
+ * Get the dimensions of a range: { rows, cols }.
23
+ */
24
+ export declare function rangeDimensions(ref: RangeRef): {
25
+ rows: number;
26
+ cols: number;
27
+ };
28
+ //# sourceMappingURL=a1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a1.d.ts","sourceRoot":"","sources":["../../src/cli/a1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAuB9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAK7E"}
package/dist/cli/a1.js ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ * A1-notation ↔ 0-indexed (row, col) conversion utilities.
3
+ */
4
+ export function colToIndex(col) {
5
+ let index = 0;
6
+ for (const c of col.toUpperCase()) {
7
+ index = index * 26 + (c.charCodeAt(0) - 64);
8
+ }
9
+ return index - 1;
10
+ }
11
+ export function indexToCol(index) {
12
+ let col = "";
13
+ let n = index;
14
+ while (n >= 0) {
15
+ col = String.fromCharCode((n % 26) + 65) + col;
16
+ n = Math.floor(n / 26) - 1;
17
+ }
18
+ return col;
19
+ }
20
+ export function cellToA1(row, col) {
21
+ return `${indexToCol(col)}${row + 1}`;
22
+ }
23
+ export function parseCell(ref) {
24
+ const match = ref.match(/^\$?([A-Z]+)\$?(\d+)$/i);
25
+ if (!match)
26
+ throw new Error(`Invalid cell reference: ${ref}`);
27
+ return {
28
+ row: parseInt(match[2], 10) - 1,
29
+ col: colToIndex(match[1]),
30
+ };
31
+ }
32
+ /**
33
+ * Parse a reference like "Sheet1!A1:C10", "'My Sheet'!A1:C10", or "A1:C10".
34
+ */
35
+ export function parseRef(ref) {
36
+ let sheet;
37
+ let rangeStr = ref;
38
+ // Handle quoted sheet names: 'My Sheet'!A1:C10
39
+ const quotedMatch = ref.match(/^'([^']+)'!(.+)$/);
40
+ if (quotedMatch) {
41
+ sheet = quotedMatch[1];
42
+ rangeStr = quotedMatch[2];
43
+ }
44
+ else {
45
+ // Handle unquoted: Sheet1!A1:C10
46
+ const bangIdx = ref.indexOf("!");
47
+ if (bangIdx !== -1) {
48
+ sheet = ref.slice(0, bangIdx);
49
+ rangeStr = ref.slice(bangIdx + 1);
50
+ }
51
+ }
52
+ const parts = rangeStr.split(":");
53
+ const start = parseCell(parts[0]);
54
+ const end = parts.length > 1 ? parseCell(parts[1]) : { ...start };
55
+ return { sheet, start, end };
56
+ }
57
+ /**
58
+ * Get the dimensions of a range: { rows, cols }.
59
+ */
60
+ export function rangeDimensions(ref) {
61
+ return {
62
+ rows: ref.end.row - ref.start.row + 1,
63
+ cols: ref.end.col - ref.start.col + 1,
64
+ };
65
+ }
66
+ //# sourceMappingURL=a1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a1.js","sourceRoot":"","sources":["../../src/cli/a1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAClC,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACd,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAC/C,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,GAAW;IAC/C,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IAC9D,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QAC/B,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,KAAyB,CAAC;IAC9B,IAAI,QAAQ,GAAG,GAAG,CAAC;IAEnB,+CAA+C;IAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACvB,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,iCAAiC;QACjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;IAElE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAa;IAC3C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function clear(filePath: string, ref: string, clearType?: "values" | "styles" | "all"): Promise<void>;
2
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAIA,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,QAAQ,GAAG,QAAQ,GAAG,KAAgB,GAChD,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
@@ -0,0 +1,24 @@
1
+ import { parseRef, rangeDimensions } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { fail, ok } from "../output.js";
4
+ export async function clear(filePath, ref, clearType = "values") {
5
+ const parsed = parseRef(ref);
6
+ await withFile(filePath, ({ workbook, GC }) => {
7
+ const sheet = parsed.sheet
8
+ ? workbook.getSheetFromName(parsed.sheet)
9
+ : workbook.getActiveSheet();
10
+ if (!sheet) {
11
+ fail(`Sheet not found: ${parsed.sheet ?? "(active)"}`);
12
+ }
13
+ const { rows, cols } = rangeDimensions(parsed);
14
+ const range = new GC.Spread.Sheets.Range(parsed.start.row, parsed.start.col, rows, cols);
15
+ if (clearType === "values" || clearType === "all") {
16
+ sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
17
+ }
18
+ if (clearType === "styles" || clearType === "all") {
19
+ sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.style);
20
+ }
21
+ ok({ cleared: ref, type: clearType });
22
+ }, { save: true });
23
+ }
24
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,GAAW,EACX,YAAyC,QAAQ;IAEjD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACtC,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAClC,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CACnC,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function copy(filePath: string, srcRef: string, dstRef: string): Promise<void>;
2
+ //# sourceMappingURL=copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -0,0 +1,51 @@
1
+ import { parseRef, rangeDimensions } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { fail, ok } from "../output.js";
4
+ export async function copy(filePath, srcRef, dstRef) {
5
+ const src = parseRef(srcRef);
6
+ const dst = parseRef(dstRef);
7
+ await withFile(filePath, ({ file, workbook }) => {
8
+ const srcSheet = src.sheet
9
+ ? workbook.getSheetFromName(src.sheet)
10
+ : workbook.getActiveSheet();
11
+ const dstSheet = dst.sheet
12
+ ? workbook.getSheetFromName(dst.sheet)
13
+ : srcSheet;
14
+ if (!srcSheet)
15
+ fail(`Source sheet not found: ${src.sheet}`);
16
+ if (!dstSheet)
17
+ fail(`Destination sheet not found: ${dst.sheet}`);
18
+ const { rows: srcRows, cols: srcCols } = rangeDimensions(src);
19
+ const { rows: dstRows, cols: dstCols } = rangeDimensions(dst);
20
+ file.batch(() => {
21
+ for (let r = 0; r < dstRows; r++) {
22
+ for (let c = 0; c < dstCols; c++) {
23
+ const sr = src.start.row + (r % srcRows);
24
+ const sc = src.start.col + (c % srcCols);
25
+ const dr = dst.start.row + r;
26
+ const dc = dst.start.col + c;
27
+ const formula = srcSheet.getFormula(sr, sc);
28
+ if (formula) {
29
+ dstSheet.setFormula(dr, dc, formula);
30
+ }
31
+ else {
32
+ const value = srcSheet.getValue(sr, sc);
33
+ if (value !== null && value !== undefined) {
34
+ dstSheet.setValue(dr, dc, value);
35
+ }
36
+ }
37
+ const style = srcSheet.getStyle(sr, sc);
38
+ if (style) {
39
+ dstSheet.setStyle(dr, dc, style);
40
+ }
41
+ }
42
+ }
43
+ });
44
+ ok({
45
+ source: srcRef,
46
+ destination: dstRef,
47
+ cellsCopied: dstRows * dstCols,
48
+ });
49
+ }, { save: true });
50
+ }
51
+ //# sourceMappingURL=copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function create(filePath: string): Promise<void>;
2
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D"}
@@ -0,0 +1,7 @@
1
+ import { withNewFile } from "../context.js";
2
+ import { ok } from "../output.js";
3
+ export async function create(filePath) {
4
+ await withNewFile(filePath);
5
+ ok({ created: filePath });
6
+ }
7
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC3C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function csv(filePath: string, ref: string): Promise<void>;
2
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"AAIA,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCtE"}
@@ -0,0 +1,33 @@
1
+ import { parseRef, rangeDimensions } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { fail } from "../output.js";
4
+ export async function csv(filePath, ref) {
5
+ const parsed = parseRef(ref);
6
+ await withFile(filePath, ({ workbook }) => {
7
+ const sheet = parsed.sheet
8
+ ? workbook.getSheetFromName(parsed.sheet)
9
+ : workbook.getActiveSheet();
10
+ if (!sheet) {
11
+ fail(`Sheet not found: ${parsed.sheet ?? "(active)"}`);
12
+ }
13
+ const { rows, cols } = rangeDimensions(parsed);
14
+ const lines = [];
15
+ for (let r = 0; r < rows; r++) {
16
+ const row = [];
17
+ for (let c = 0; c < cols; c++) {
18
+ const value = sheet.getValue(parsed.start.row + r, parsed.start.col + c);
19
+ const str = value === null || value === undefined ? "" : String(value);
20
+ if (str.includes(",") || str.includes('"') || str.includes("\n")) {
21
+ row.push(`"${str.replace(/"/g, '""')}"`);
22
+ }
23
+ else {
24
+ row.push(str);
25
+ }
26
+ }
27
+ lines.push(row.join(","));
28
+ }
29
+ process.stdout.write(`${lines.join("\n")}\n`);
30
+ process.exit(0);
31
+ });
32
+ }
33
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,GAAW;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EACpB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CACrB,CAAC;gBACF,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function evalCode(filePath: string, codeArg: string | undefined): Promise<void>;
2
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkDf"}
@@ -0,0 +1,45 @@
1
+ import { withFile } from "../context.js";
2
+ import { fail, ok, readInput } from "../output.js";
3
+ export async function evalCode(filePath, codeArg) {
4
+ const code = await readInput(codeArg);
5
+ await withFile(filePath, async ({ file, workbook, GC }) => {
6
+ const sheet = workbook.getActiveSheet();
7
+ // Capture console.log output
8
+ const logs = [];
9
+ const origLog = console.log;
10
+ const origWarn = console.warn;
11
+ const origError = console.error;
12
+ console.log = (...args) => logs.push(args.map(String).join(" "));
13
+ console.warn = (...args) => logs.push(`[warn] ${args.map(String).join(" ")}`);
14
+ console.error = (...args) => logs.push(`[error] ${args.map(String).join(" ")}`);
15
+ try {
16
+ const AsyncFunction = Object.getPrototypeOf(async () => { }).constructor;
17
+ const fn = new AsyncFunction("workbook", "sheet", "GC", "file", code);
18
+ const result = await fn(workbook, sheet, GC, file);
19
+ const output = {};
20
+ if (result !== undefined) {
21
+ output.result = result;
22
+ }
23
+ if (logs.length > 0) {
24
+ output.logs = logs;
25
+ }
26
+ if (Object.keys(output).length === 0) {
27
+ output.result = null;
28
+ }
29
+ ok(output);
30
+ }
31
+ catch (err) {
32
+ // Restore console before failing
33
+ console.log = origLog;
34
+ console.warn = origWarn;
35
+ console.error = origError;
36
+ fail(err instanceof Error ? err.message : String(err));
37
+ }
38
+ finally {
39
+ console.log = origLog;
40
+ console.warn = origWarn;
41
+ console.error = origError;
42
+ }
43
+ }, { save: true });
44
+ }
45
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,OAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,QAAQ,CACZ,QAAQ,EACR,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAExC,6BAA6B;QAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;QAChC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CACpC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CACrC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEnD,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,EAAE,CAAC,MAAM,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iCAAiC;YACjC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function get(filePath: string, ref: string, options: {
2
+ styles?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAKA,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiEf"}
@@ -0,0 +1,55 @@
1
+ import { cellToA1, parseRef, rangeDimensions } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { fail, ok } from "../output.js";
4
+ import { serializeStyle } from "../styles.js";
5
+ export async function get(filePath, ref, options) {
6
+ const parsed = parseRef(ref);
7
+ await withFile(filePath, ({ workbook }) => {
8
+ const sheet = parsed.sheet
9
+ ? workbook.getSheetFromName(parsed.sheet)
10
+ : workbook.getActiveSheet();
11
+ if (!sheet) {
12
+ fail(`Sheet not found: ${parsed.sheet ?? "(active)"}`);
13
+ }
14
+ const { rows, cols } = rangeDimensions(parsed);
15
+ const cells = {};
16
+ let cellCount = 0;
17
+ for (let r = 0; r < rows; r++) {
18
+ for (let c = 0; c < cols; c++) {
19
+ const row = parsed.start.row + r;
20
+ const col = parsed.start.col + c;
21
+ const value = sheet.getValue(row, col);
22
+ const formula = sheet.getFormula(row, col);
23
+ const hasValue = value !== null && value !== undefined && value !== "";
24
+ const hasFormula = !!formula;
25
+ if (!hasValue && !hasFormula)
26
+ continue;
27
+ const a1 = cellToA1(row, col);
28
+ const cell = {
29
+ value: value ?? null,
30
+ };
31
+ if (hasFormula) {
32
+ cell.formula = formula;
33
+ }
34
+ if (options.styles !== false) {
35
+ const style = sheet.getStyle(row, col);
36
+ if (style) {
37
+ const serialized = serializeStyle(style);
38
+ if (serialized) {
39
+ cell.styles = serialized;
40
+ }
41
+ }
42
+ }
43
+ cells[a1] = cell;
44
+ cellCount++;
45
+ }
46
+ }
47
+ ok({
48
+ sheet: sheet.name(),
49
+ range: ref,
50
+ cellCount,
51
+ cells,
52
+ });
53
+ });
54
+ }
55
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function info(filePath: string): Promise<void>;
2
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1D"}
@@ -0,0 +1,34 @@
1
+ import { cellToA1 } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { ok } from "../output.js";
4
+ export async function info(filePath) {
5
+ await withFile(filePath, ({ workbook, GC }) => {
6
+ const sheetCount = workbook.getSheetCount();
7
+ const activeIndex = workbook.getActiveSheetIndex();
8
+ const sheets = [];
9
+ for (let i = 0; i < sheetCount; i++) {
10
+ const sheet = workbook.getSheet(i);
11
+ let usedRange = null;
12
+ try {
13
+ const range = sheet.getUsedRange(GC.Spread.Sheets.UsedRangeType.data |
14
+ GC.Spread.Sheets.UsedRangeType.formula);
15
+ if (range && range.rowCount > 0 && range.colCount > 0) {
16
+ const startA1 = cellToA1(range.row, range.col);
17
+ const endA1 = cellToA1(range.row + range.rowCount - 1, range.col + range.colCount - 1);
18
+ usedRange = `${startA1}:${endA1}`;
19
+ }
20
+ }
21
+ catch {
22
+ // getUsedRange may fail on empty sheets
23
+ }
24
+ sheets.push({
25
+ index: i,
26
+ name: sheet.name(),
27
+ usedRange,
28
+ active: i === activeIndex,
29
+ });
30
+ }
31
+ ok({ sheets });
32
+ });
33
+ }
34
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAgB;IACzC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACnD,MAAM,MAAM,GAKN,EAAE,CAAC;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,SAAS,GAAkB,IAAI,CAAC;YAEpC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAC9B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;oBACjC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CACzC,CAAC;gBACF,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC/C,MAAM,KAAK,GAAG,QAAQ,CACpB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAC9B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAC/B,CAAC;oBACF,SAAS,GAAG,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBAClB,SAAS;gBACT,MAAM,EAAE,CAAC,KAAK,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function objects(filePath: string, sheetFilter?: string): Promise<void>;
2
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAqEf"}
@@ -0,0 +1,71 @@
1
+ import { withFile } from "../context.js";
2
+ import { ok } from "../output.js";
3
+ export async function objects(filePath, sheetFilter) {
4
+ await withFile(filePath, ({ workbook }) => {
5
+ const result = [];
6
+ for (let i = 0; i < workbook.getSheetCount(); i++) {
7
+ const sheet = workbook.getSheet(i);
8
+ const sheetName = sheet.name();
9
+ if (sheetFilter && sheetName !== sheetFilter)
10
+ continue;
11
+ // Charts
12
+ try {
13
+ const charts = sheet.charts?.all?.() ?? [];
14
+ for (const chart of charts) {
15
+ result.push({
16
+ sheet: sheetName,
17
+ type: "chart",
18
+ name: chart.name(),
19
+ });
20
+ }
21
+ }
22
+ catch {
23
+ // charts extension may not be loaded
24
+ }
25
+ // Tables
26
+ try {
27
+ const tables = sheet.tables?.all?.() ?? [];
28
+ for (const table of tables) {
29
+ result.push({
30
+ sheet: sheetName,
31
+ type: "table",
32
+ name: String(table.name()),
33
+ });
34
+ }
35
+ }
36
+ catch {
37
+ // tables may not be available
38
+ }
39
+ // Pivot tables
40
+ try {
41
+ const pivots = sheet.pivotTables?.all?.() ?? [];
42
+ for (const pivot of pivots) {
43
+ result.push({
44
+ sheet: sheetName,
45
+ type: "pivotTable",
46
+ name: String(pivot.name()),
47
+ });
48
+ }
49
+ }
50
+ catch {
51
+ // pivot extension may not be loaded
52
+ }
53
+ // Slicers
54
+ try {
55
+ const slicers = sheet.slicers?.all?.() ?? [];
56
+ for (const slicer of slicers) {
57
+ result.push({
58
+ sheet: sheetName,
59
+ type: "slicer",
60
+ name: String(slicer.name()),
61
+ });
62
+ }
63
+ }
64
+ catch {
65
+ // slicers extension may not be loaded
66
+ }
67
+ }
68
+ ok({ objects: result });
69
+ });
70
+ }
71
+ //# sourceMappingURL=objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,QAAgB,EAChB,WAAoB;IAEpB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,WAAW,IAAI,SAAS,KAAK,WAAW;gBAAE,SAAS;YAEvD,SAAS;YACT,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YAED,SAAS;YACT,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YAED,eAAe;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YAED,UAAU;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;QAED,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function resize(filePath: string, sheetName: string | undefined, options: {
2
+ columns?: string;
3
+ rows?: string;
4
+ width?: number;
5
+ height?: number;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=resize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -0,0 +1,51 @@
1
+ import { colToIndex } from "../a1.js";
2
+ import { withFile } from "../context.js";
3
+ import { fail, ok } from "../output.js";
4
+ export async function resize(filePath, sheetName, options) {
5
+ if (!options.width && !options.height) {
6
+ fail("Specify --width and/or --height.");
7
+ }
8
+ await withFile(filePath, ({ workbook }) => {
9
+ const sheet = sheetName
10
+ ? workbook.getSheetFromName(sheetName)
11
+ : workbook.getActiveSheet();
12
+ if (!sheet)
13
+ fail(`Sheet not found: ${sheetName ?? "(active)"}`);
14
+ if (options.width !== undefined) {
15
+ if (options.columns) {
16
+ const [startStr, endStr] = options.columns.split(":");
17
+ const startCol = colToIndex(startStr);
18
+ const endCol = endStr ? colToIndex(endStr) : startCol;
19
+ for (let c = startCol; c <= endCol; c++) {
20
+ sheet.setColumnWidth(c, options.width);
21
+ }
22
+ }
23
+ else {
24
+ // All columns
25
+ const colCount = sheet.getColumnCount();
26
+ for (let c = 0; c < colCount; c++) {
27
+ sheet.setColumnWidth(c, options.width);
28
+ }
29
+ }
30
+ }
31
+ if (options.height !== undefined) {
32
+ if (options.rows) {
33
+ const [startStr, endStr] = options.rows.split(":");
34
+ const startRow = parseInt(startStr, 10) - 1;
35
+ const endRow = endStr ? parseInt(endStr, 10) - 1 : startRow;
36
+ for (let r = startRow; r <= endRow; r++) {
37
+ sheet.setRowHeight(r, options.height);
38
+ }
39
+ }
40
+ else {
41
+ // All rows
42
+ const rowCount = sheet.getRowCount();
43
+ for (let r = 0; r < rowCount; r++) {
44
+ sheet.setRowHeight(r, options.height);
45
+ }
46
+ }
47
+ }
48
+ ok({ resized: true });
49
+ }, { save: true });
50
+ }
51
+ //# sourceMappingURL=resize.js.map