Skip to content

Commit

Permalink
fix(sheet-formula): fix error message on missing formula (#1885)
Browse files Browse the repository at this point in the history
  • Loading branch information
DR-Univer committed Apr 13, 2024
1 parent c7e26a0 commit 0ab866e
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 5 deletions.
Expand Up @@ -176,5 +176,25 @@ describe('Test indirect', () => {

expect((result as BaseValueObject).getValue()).toStrictEqual(4);
});

it('Reference column', async () => {
const lexerNode = lexer.treeBuilder('=sum(A:A)');

const astNode = astTreeBuilder.parse(lexerNode as LexerNode);

const result = interpreter.execute(astNode as BaseAstNode);

expect((result as BaseValueObject).getValue()).toStrictEqual(5);
});

it('Not exist formula', async () => {
const lexerNode = lexer.treeBuilder('=notExistFormula(A:A)');

const astNode = astTreeBuilder.parse(lexerNode as LexerNode);

const result = interpreter.execute(astNode as BaseAstNode);

expect((result as BaseValueObject).getValue()).toStrictEqual(ErrorType.NAME);
});
});
});
2 changes: 1 addition & 1 deletion packages/engine-formula/src/engine/analysis/parser.ts
Expand Up @@ -232,7 +232,7 @@ export class AstTreeBuilder extends Disposable {
currentAstNode = this._checkAstNode(lexerNode);
if (currentAstNode == null) {
// console.log('error2', currentAstNode, lexerNode);
return ErrorNode.create(ErrorType.ERROR);
return ErrorNode.create(ErrorType.NAME);
}

// currentAstNode.setParent(parent);
Expand Down
14 changes: 10 additions & 4 deletions packages/engine-formula/src/engine/ast-node/reference-node.ts
Expand Up @@ -137,10 +137,12 @@ export class ReferenceNodeFactory extends BaseAstNodeFactory {
let node: Nullable<ReferenceNode>;
if (new RegExp(REFERENCE_SINGLE_RANGE_REGEX).test(tokenTrim)) {
node = new ReferenceNode(this._injector, tokenTrim, new CellReferenceObject(tokenTrim), isPrepareMerge);
} else if (isLexerNode && new RegExp(REFERENCE_REGEX_SINGLE_ROW).test(tokenTrim)) {
node = new ReferenceNode(this._injector, tokenTrim, new RowReferenceObject(tokenTrim), isPrepareMerge);
} else if (isLexerNode && new RegExp(REFERENCE_REGEX_SINGLE_COLUMN).test(tokenTrim)) {
node = new ReferenceNode(this._injector, tokenTrim, new ColumnReferenceObject(tokenTrim), isPrepareMerge);
} else if (isLexerNode && this._checkParentIsUnionOperator(param as LexerNode)) {
if (new RegExp(REFERENCE_REGEX_SINGLE_ROW).test(tokenTrim)) {
node = new ReferenceNode(this._injector, tokenTrim, new RowReferenceObject(tokenTrim), isPrepareMerge);
} else if (new RegExp(REFERENCE_REGEX_SINGLE_COLUMN).test(tokenTrim)) {
node = new ReferenceNode(this._injector, tokenTrim, new ColumnReferenceObject(tokenTrim), isPrepareMerge);
}
} else {
const unitId = this._formulaRuntimeService.currentUnitId;
// parserDataLoader.get
Expand Down Expand Up @@ -173,4 +175,8 @@ export class ReferenceNodeFactory extends BaseAstNodeFactory {
return node;
}
}

private _checkParentIsUnionOperator(param: LexerNode) {
return param.getParent()?.getParent()?.getToken().trim() === matchToken.COLON;
}
}

0 comments on commit 0ab866e

Please sign in to comment.