Sheet1!$D$1 rather than Sheet1!D1 There reason is that if we extend a formula that has those will behave in surprising ways.
82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import type { Area, Cell } from "./types";
|
|
|
|
import { type SelectedView, columnNameFromNumber } from "@ironcalc/wasm";
|
|
|
|
/**
|
|
* Returns true if the keypress should start editing
|
|
*/
|
|
export function isEditingKey(key: string): boolean {
|
|
if (key.length !== 1) {
|
|
return false;
|
|
}
|
|
const code = key.codePointAt(0) ?? 0;
|
|
if (code > 0 && code < 255) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
export type NavigationKey =
|
|
| "ArrowRight"
|
|
| "ArrowLeft"
|
|
| "ArrowDown"
|
|
| "ArrowUp"
|
|
| "Home"
|
|
| "End";
|
|
|
|
export const isNavigationKey = (key: string): key is NavigationKey =>
|
|
["ArrowRight", "ArrowLeft", "ArrowDown", "ArrowUp", "Home", "End"].includes(
|
|
key
|
|
);
|
|
|
|
export const getCellAddress = (selectedArea: Area, selectedCell: Cell) => {
|
|
const isSingleCell =
|
|
selectedArea.rowStart === selectedArea.rowEnd &&
|
|
selectedArea.columnEnd === selectedArea.columnStart;
|
|
|
|
return isSingleCell
|
|
? `${columnNameFromNumber(selectedCell.column)}${selectedCell.row}`
|
|
: `${columnNameFromNumber(selectedArea.columnStart)}${
|
|
selectedArea.rowStart
|
|
}:${columnNameFromNumber(selectedArea.columnEnd)}${selectedArea.rowEnd}`;
|
|
};
|
|
|
|
export function rangeToStr(
|
|
range: {
|
|
sheet: number;
|
|
rowStart: number;
|
|
rowEnd: number;
|
|
columnStart: number;
|
|
columnEnd: number;
|
|
},
|
|
referenceSheet: number,
|
|
referenceName: string
|
|
): string {
|
|
const { sheet, rowStart, rowEnd, columnStart, columnEnd } = range;
|
|
const sheetName = sheet === referenceSheet ? "" : `'${referenceName}'!`;
|
|
if (rowStart === rowEnd && columnStart === columnEnd) {
|
|
return `${sheetName}${columnNameFromNumber(columnStart)}${rowStart}`;
|
|
}
|
|
return `${sheetName}${columnNameFromNumber(
|
|
columnStart
|
|
)}${rowStart}:${columnNameFromNumber(columnEnd)}${rowEnd}`;
|
|
}
|
|
|
|
|
|
// Returns the full range of the selected view as a string in absolute form
|
|
// e.g. 'Sheet1!$A$1:$B$2' or 'Sheet1!$A$1'
|
|
export function getFullRangeToString(
|
|
selectedView: SelectedView,
|
|
worksheetNames: string[]
|
|
): string {
|
|
const [rowStart, columnStart, rowEnd, columnEnd] = selectedView.range;
|
|
const sheetName = `${worksheetNames[selectedView.sheet]}`;
|
|
|
|
if (rowStart === rowEnd && columnStart === columnEnd) {
|
|
return `${sheetName}!$${columnNameFromNumber(columnStart)}$${rowStart}`;
|
|
}
|
|
return `${sheetName}!$${columnNameFromNumber(
|
|
columnStart
|
|
)}$${rowStart}:$${columnNameFromNumber(columnEnd)}$${rowEnd}`;
|
|
}
|