Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 87 additions & 21 deletions content/guides/sheets/features/core/formula.ja-JP.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,16 @@ enum CalculationMode {
}
```

> 数式セルが予期しない値を保持している場合、`initialFormulaComputing` を `FORCED` に設定して全数式を強制再計算するか、初期化前にセル値をクリアしてください
> 数式セルが予期しない値を保持している場合、`initialFormulaComputing` を `FORCED` に設定して全数式を強制再計算するか、初期化前にセルの `v` 値をクリアしてください

## サポートされる数式関数

<FormulaList lang="en-US" />

## Facade API

完全な Facade API については、[FFormula](https://reference.univer.ai/classes/FFormula) を参照してください。

### インポート

<Callout type="info" title="プラグインモード注意">
Expand All @@ -89,52 +91,71 @@ import '@univerjs/engine-formula/facade'
import '@univerjs/sheets-formula/facade'
```

### 計算の実行
### 数式計算の実行

```typescript
const formula = univerAPI.getFormula()
formula.executeCalculation()
const formulaEngine = univerAPI.getFormula()
formulaEngine.executeCalculation()
```

### 計算の停止
### 数式計算の停止

```typescript
const formula = univerAPI.getFormula()
formula.stopCalculation()
const formulaEngine = univerAPI.getFormula()
formulaEngine.stopCalculation()
```

### 計算開始イベント
### 数式計算の開始

```typescript
const formula = univerAPI.getFormula()
formula.calculationStart((forceCalculate) => {
// 数式計算の開始イベントをリッスン
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationStart((forceCalculate) => {
console.log(forceCalculate)
})
```

### 計算進行イベント
### 数式計算の進行

```typescript
const formula = univerAPI.getFormula()
formula.calculationProcessing((stageInfo) => {
// 数式計算の進行イベントをリッスン
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationProcessing((stageInfo) => {
console.log(stageInfo)
})
```

### 計算終了イベント
### 数式計算の終了

```typescript
const formula = univerAPI.getFormula()
formula.calculationEnd((functionsExecutedState) => {
// 数式計算の終了イベントをリッスン
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationEnd((functionsExecutedState) => {
console.log(functionsExecutedState)
})

// 数式計算の終了を待機
await formulaEngine.onCalculationEnd()
```

### 数式計算結果の適用

```typescript
// 数式計算結果の適用イベントをリッスン
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationResultApplied((result) => {
console.log(result)
})

// 数式計算結果の適用完了を待機
await formulaEngine.onCalculationResultApplied()
```

### 初期計算モードの設定
### 初期化データ時の数式計算モードの設定

```typescript
const formula = univerAPI.getFormula()
formula.setInitialFormulaComputing(CalculationMode.FORCED)
const formulaEngine = univerAPI.getFormula()
formulaEngine.setInitialFormulaComputing(CalculationMode.FORCED)
```

この API が `Starting` ライフサイクル以降に呼ばれた場合、次に Univer Sheet が生成されるタイミングで反映されます。
Expand All @@ -144,12 +165,57 @@ formula.setInitialFormulaComputing(CalculationMode.FORCED)
```typescript
univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => {
if (stage === LifecycleStages.Starting) {
const formula = univerAPI.getFormula()
formula.setInitialFormulaComputing(CalculationMode.FORCED)
const formulaEngine = univerAPI.getFormula()
formulaEngine.setInitialFormulaComputing(CalculationMode.FORCED)
}
})
```

### 反復回数の設定

数式に循環参照が存在する場合、この API を使用して数式計算時の最大反復回数を設定できます。デフォルト値は 1 です。

```typescript
const formulaEngine = univerAPI.getFormula()
formulaEngine.setMaxIteration(10)
```

### 数式文字列の計算結果の取得

数式文字列の一括非同期実行と計算結果の取得:

```typescript
const formulaEngine = univerAPI.getFormula()
const formulas = {
Book1: {
Sheet1: {
2: {
3: [
// 完全な数式:
'=SUM(A1:A10) + SQRT(D7)',

// 分解されたサブ数式(それぞれ独立して評価可能):
'SUM(A1:A10)', // サブ数式1
'SQRT(D7)', // サブ数式2
'A1:A10', // 範囲参照
'D7', // 単一セル参照
],
},
4: {
5: [
'=A2 + B2 + SQRT(C5)',
'A2',
'B2',
'SQRT(C5)',
],
},
},
},
}
const result = await formulaEngine.executeFormulas(formulas)
console.log(result)
```

## カスタム数式

Univer はカスタム数式をサポートしています。実装方法は [Custom Formulas](/guides/recipes/tutorials/custom-formula) を参照してください。
Expand Down
108 changes: 87 additions & 21 deletions content/guides/sheets/features/core/formula.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,16 @@ enum CalculationMode {
}
```

> If the cell containing the formula has an unexpected value, you can set `initialFormulaComputing` to `FORCED` to force the calculation of all formulas. Alternatively, you can clear the cell's value before initialization.
> If the cell containing the formula has an unexpected value, you can set `initialFormulaComputing` to `FORCED` to force the calculation of all formulas. Alternatively, you can clear the cell's `v` value before initialization.

## Supported Formula Functions

<FormulaList lang="en-US" />

## Facade API

For more details, please refer to the [FFormula Facade API](https://reference.univer.ai/classes/FFormula).

### Importing

<Callout type="info" title="Plugin mode note">
Expand All @@ -89,52 +91,71 @@ import '@univerjs/engine-formula/facade'
import '@univerjs/sheets-formula/facade'
```

### Execute Calculation
### Execute Formula Calculation

```typescript
const formula = univerAPI.getFormula()
formula.executeCalculation()
const formulaEngine = univerAPI.getFormula()
formulaEngine.executeCalculation()
```

### Stop Calculation
### Stop Formula Calculation

```typescript
const formula = univerAPI.getFormula()
formula.stopCalculation()
const formulaEngine = univerAPI.getFormula()
formulaEngine.stopCalculation()
```

### Calculation Start Event
### Formula Calculation Start

```typescript
const formula = univerAPI.getFormula()
formula.calculationStart((forceCalculate) => {
// Listening to formula calculation start event
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationStart((forceCalculate) => {
console.log(forceCalculate)
})
```

### Calculation Processing Event
### Formula Calculation Processing

```typescript
const formula = univerAPI.getFormula()
formula.calculationProcessing((stageInfo) => {
// Listening to formula calculation processing event
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationProcessing((stageInfo) => {
console.log(stageInfo)
})
```

### Calculation End Event
### Formula Calculation End

```typescript
const formula = univerAPI.getFormula()
formula.calculationEnd((functionsExecutedState) => {
// Listening to formula calculation end event
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationEnd((functionsExecutedState) => {
console.log(functionsExecutedState)
})

// Wait for formula calculation to end
await formulaEngine.onCalculationEnd()
```

### Formula Calculation Result Applied

```typescript
// Listening to formula calculation result applied event
const formulaEngine = univerAPI.getFormula()
formulaEngine.calculationResultApplied((result) => {
console.log(result)
})

// Wait for formula calculation result to be applied
await formulaEngine.onCalculationResultApplied()
```

### Set Initial Calculation Mode
### Set Formula Calculation Mode When Initializing Data

```typescript
const formula = univerAPI.getFormula()
formula.setInitialFormulaComputing(CalculationMode.FORCED)
const formulaEngine = univerAPI.getFormula()
formulaEngine.setInitialFormulaComputing(CalculationMode.FORCED)
```

If this API is called after the `Starting` lifecycle, it will take effect the next time a Univer Sheet is created.
Expand All @@ -144,12 +165,57 @@ If you want it to take effect during the current initialization of the Univer Sh
```typescript
univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => {
if (stage === LifecycleStages.Starting) {
const formula = univerAPI.getFormula()
formula.setInitialFormulaComputing(CalculationMode.FORCED)
const formulaEngine = univerAPI.getFormula()
formulaEngine.setInitialFormulaComputing(CalculationMode.FORCED)
}
})
```

### Set Max Iteration

When there are circular references in formulas, you can use this API to set the maximum number of iterations for formula calculations. The default value is 1.

```typescript
const formulaEngine = univerAPI.getFormula()
formulaEngine.setMaxIteration(10)
```

### Get Formula Strings Execution Result

Execute a batch of formulas asynchronously and receive calculation results:

```typescript
const formulaEngine = univerAPI.getFormula()
const formulas = {
Book1: {
Sheet1: {
2: {
3: [
// Full formula:
'=SUM(A1:A10) + SQRT(D7)',

// Decomposed sub-formulas (each one can be evaluated independently):
'SUM(A1:A10)', // sub-formula 1
'SQRT(D7)', // sub-formula 2
'A1:A10', // range reference
'D7', // single-cell reference
],
},
4: {
5: [
'=A2 + B2 + SQRT(C5)',
'A2',
'B2',
'SQRT(C5)',
],
},
},
},
}
const result = await formulaEngine.executeFormulas(formulas)
console.log(result)
```

## Custom Formulas

Univer supports custom formulas. Please refer to the [Custom Formulas](/guides/recipes/tutorials/custom-formula) section to learn how to implement them.
Expand Down
Loading
Loading