@@ -28,7 +28,6 @@ import { FormulaVertex } from './DependencyGraph/FormulaCellVertex'
2828import { RawAndParsedValue } from './DependencyGraph/ValueCellVertex'
2929import { AddColumnsTransformer } from './dependencyTransformers/AddColumnsTransformer'
3030import { AddRowsTransformer } from './dependencyTransformers/AddRowsTransformer'
31- import { AddSheetTransformer } from './dependencyTransformers/AddSheetTransformer'
3231import { CleanOutOfScopeDependenciesTransformer } from './dependencyTransformers/CleanOutOfScopeDependenciesTransformer'
3332import { MoveCellsTransformer } from './dependencyTransformers/MoveCellsTransformer'
3433import { RemoveColumnsTransformer } from './dependencyTransformers/RemoveColumnsTransformer'
@@ -52,7 +51,7 @@ import {
5251 NamedExpressions
5352} from './NamedExpressions'
5453import { NamedExpressionDependency , ParserWithCaching , ParsingErrorType , RelativeDependency } from './parser'
55- import { ParsingError } from './parser/Ast'
54+ import { AstNodeType , ParsingError } from './parser/Ast'
5655import { ParsingResult } from './parser/ParserWithCaching'
5756import { findBoundaries , Sheet } from './Sheet'
5857import { ColumnsSpan , RowsSpan } from './Span'
@@ -251,38 +250,27 @@ export class Operations {
251250 const sheet : Sheet = [ ]
252251 this . dependencyGraph . addressMapping . autoAddSheet ( sheetId , findBoundaries ( sheet ) )
253252 const addedSheetName = this . sheetMapping . fetchDisplayName ( sheetId )
253+ const quotedSheetName = `'${ addedSheetName . replace ( / ' / g, "''" ) } '`
254254
255- // Rebuild formulas that reference the newly added sheet
256- let version = 0
255+ // TODO: move this code to dependencyGraph.addSheet()
257256 this . stats . measure ( StatType . TRANSFORM_ASTS , ( ) => {
258- const transformation = new AddSheetTransformer ( sheetId , addedSheetName )
259- transformation . performEagerTransformations ( this . dependencyGraph , this . parser )
260-
261- // TODO: move this logic to the transformer
262- // Rebuild non-array formulas that were transformed
263- for ( const vertex of this . dependencyGraph . graph . getNodes ( ) ) {
264- if ( vertex instanceof FormulaCellVertex ) {
265- const originalAst = vertex . getFormula ( this . lazilyTransformingAstService )
266- const address = vertex . getAddress ( this . lazilyTransformingAstService )
267- const [ transformedAst ] = transformation . transformSingleAst ( originalAst , address )
268-
269- // Check if the AST actually changed
270- const originalHash = this . parser . computeHashFromAst ( originalAst )
271- const transformedHash = this . parser . computeHashFromAst ( transformedAst )
272-
273- if ( originalHash !== transformedHash ) {
274- // The formula was transformed (ERROR_WITH_RAW_INPUT -> valid reference)
275- // We need to rebuild it with proper dependencies using setFormulaToCellFromCache
276- this . parser . rememberNewAst ( transformedAst )
277- this . setFormulaToCellFromCache ( transformedHash , address )
278- }
257+ for ( const node of this . dependencyGraph . formulaNodes ( ) ) {
258+ const ast = node . getFormula ( this . dependencyGraph . lazilyTransformingAstService )
259+ if ( ast . type === AstNodeType . ERROR_WITH_RAW_INPUT && this . containsSheetName ( ast . rawInput , addedSheetName , quotedSheetName ) ) {
260+ const address = node . getAddress ( this . dependencyGraph . lazilyTransformingAstService )
261+ this . setCellContent ( address , `=${ ast . rawInput } ` ) // or maybe take just the inner part of this function body
279262 }
280263 }
281-
282- version = this . lazilyTransformingAstService . addTransformation ( transformation )
283264 } )
284265
285- return { addedSheetName, version }
266+ return { addedSheetName, version : 0 } // TODO: calculate version
267+ }
268+
269+ private containsSheetName ( rawInput : string , unquotedSheetNameLowercase : string , quotedSheetNameLowercase : string ) : boolean {
270+ const lowerInput = rawInput . toLowerCase ( )
271+
272+ return lowerInput . includes ( `${ unquotedSheetNameLowercase } !` )
273+ || lowerInput . includes ( `${ quotedSheetNameLowercase } !` )
286274 }
287275
288276 public renameSheet ( sheetId : number , newName : string ) {
0 commit comments