Flutter电子表格计算插件visicalc_engine的使用

Flutter电子表格计算插件visicalc_engine的使用

此插件实现了在 Dart 库中克隆的 VisiCalc 电子表格引擎。该库通过解析单元格字符串(Map<A1,String>)并考虑对其他单元格的引用来计算结果。

特性

  • 支持由 Dan Bricklin 和 Bob Frankston 解释的 VisiCalc 的计算和引用语言,详见参考卡

获取开始

以下是一些简单的使用示例:

import 'package:a1/a1.dart';
import 'package:visicalc_engine/visicalc_engine.dart';

void main(List<String> arguments) {
  // 创建一个电子表格
  final sheet = {
    'A1'.a1: '/FR-12.2',
    'A2'.a1: '(a5+45)',
    'A3'.a1: '/F*13',
    'A4'.a1: '+A2+A5-A6',
    'A5'.a1: '-A3/2+2',
    'A6'.a1: '/F$0.23*2',
    'B1'.a1: '+A1+A3*3',
    'B2'.a1: '(A1+A3)*3',
    'B3'.a1: '12.23e-12',
    'B4'.a1: '.23e12',
    'B5'.a1: '/FRb4',
    'B6'.a1: '+b2',
    'B7'.a1: '@sum(a1...b6)',
    'D13'.a1: '+b2',
  };

  // 初始化工作表
  final worksheet = Engine.fromMap(sheet, parseErrorThrows: true);
  print(worksheet);

  // 修改单元格
  var b5 = worksheet["B5".a1];
  print('B5 formula was ${b5?.formulaType?.asFormula} = $b5');
  print('Now setting B5 to formula a1');
  worksheet['B5'.a1] = '+a1';

  b5 = worksheet["B5".a1];
  print('Now B5 formula is ${b5?.formulaType?.asFormula} = $b5');
  print(worksheet);
  print('Output to a .vc file\n: ${worksheet.toFileContents()}');

  // 解析 VisiCalc .vc 文件格式的例子
  final fileContents = '''\
>A1:/FL"TRUE\r
>A2:+B5*10\r
>A3:+B3+1\r
>A4:"tes\r
>A5:[@SUM](/user/SUM)(B2...B5)\r
>B1:/FR"label\r
>B2:123\r
>B3:[@PI](/user/PI)\r
>B4:+B3\r
>B5:.23*2\r
\u0000''';
  print('Parsing an example of a VisiCalc .vc file format');
  final engine = Engine.fromFileContents(fileContents);
  print(engine);
}

执行上述代码后,输出结果如下:

         A fx           |          A           |       B fx           |          B           |       C fx           |          C           |       D fx           |          D           | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1  -12.2                |                -12.2 | +A1+A3*3             | 26.8                 |                      |                      |                      |                      | 
 2  (A5+45)              | 40.5                 | (A1+A3)*3            | 2.4                  |                      |                      |                      |                      | 
 3  13                   | ********             | 1.223e-11            | 1.223e-11            |                      |                      |                      |                      | 
 4  +A2+A5-A6            | 35.54                | 230000000000         | 230000000000         |                      |                      |                      |                      | 
 5  -A3/2+2              | -4.5                 | B4                   |         230000000000 |                      |                      |                      |                      | 
 6  0.23*2               | 0.46                 | +B2                  | 2.4                  |                      |                      |                      |                      | 
 7                       |                      | [@SUM](/user/SUM)(A1...B6)        | 460000000104.4000244 |                      |                      |                      |                      | 
 8                       |                      |                      |                      |                      |                      |                      |                      | 
 9                       |                      |                      |                      |                      |                      |                      |                      | 
10                       |                      |                      |                      |                      |                      |                      |                      | 
11                       |                      |                      |                      |                      |                      |                      |                      | 
12                       |                      |                      |                      |                      |                      |                      |                      | 
13                       |                      |                      |                      |                      |                      | +B2                  | 2.4                  | 

B5 formula was B4 = 230000000000
Now setting B5 to formula a1
Now B5 formula is +A1 = -12.2
          A fx           |          A           |       B fx           |          B           |       C fx           |          C           |       D fx           |          D           | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1  -12.2                |                -12.2 | +A1+A3*3             | 26.8                 |                      |                      |                      |                      | 
 2  (A5+45)              | 40.5                 | (A1+A3)*3            | 2.4                  |                      |                      |                      |                      | 
 3  13                   | ********             | 1.223e-11            | 1.223e-11            |                      |                      |                      |                      | 
 4  +A2+A5-A6            | 35.54                | 230000000000         | 230000000000         |                      |                      |                      |                      | 
 5  -A3/2+2              | -4.5                 | +A1                  | -12.2                |                      |                      |                      |                      | 
 6  0.23*2               | 0.46                 | +B2                  | 2.4                  |                      |                      |                      |                      | 
 7                       |                      | [@SUM](/user/SUM)(A1...B6)        | 230000000092.1999816 |                      |                      |                      |                      | 
 8                       |                      |                      |                      |                      |                      |                      |                      | 
 9                       |                      |                      |                      |                      |                      |                      |                      | 
10                       |                      |                      |                      |                      |                      |                      |                      | 
11                       |                      |                      |                      |                      |                      |                      |                      | 
12                       |                      |                      |                      |                      |                      |                      |                      | 
13                       |                      |                      |                      |                      |                      | +B2                  | 2.4                  | 

Output to a .vc file
: >D13:+B2
>B7:[@SUM](/user/SUM)(A1...B6)
>B6:+B2
>A6:/F$0.23*2
>B5:+A1
>A5:-A3/2+2
>B4:230000000000
>A4:+A2+A5-A6
>B3:1.223e-11
>A3:/F*13
>B2:(A1+A3)*3
>A2:(A5+45)
>B1:+A1+A3*3
>A1:/FR-12.2

Parsing an example of a VisiCalc .vc file format
          A fx           |          A           |       B fx           |          B           | 
-----------------------------------------------------------------------------------------------
 1  "TRUE                | TRUE                 | "label               |                label | 
 2  +B5*10               | 4.6                  | 123                  | 123                  | 
 3  +B3+1                | 4.1415926536         | [@PI](/user/PI)                  | 3.1415926536         | 
 4  "tes                 | tes                  | +B3                  | 3.1415926536         | 
 5  [@SUM](/user/SUM)(B2...B5)        | 129.7431853072       | 0.23*2               | 0.46                 | 

更多关于Flutter电子表格计算插件visicalc_engine的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电子表格计算插件visicalc_engine的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用visicalc_engine插件来进行电子表格计算的示例代码。这个插件允许你在Flutter应用中执行电子表格计算。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加visicalc_engine依赖:

dependencies:
  flutter:
    sdk: flutter
  visicalc_engine: ^最新版本号  # 请替换为实际发布的最新版本号

2. 导入插件

在你的Dart文件中导入visicalc_engine

import 'package:visicalc_engine/visicalc_engine.dart';

3. 初始化并使用VisicalcEngine

以下是一个简单的示例,展示如何创建一个电子表格并执行一些基本的计算:

import 'package:flutter/material.dart';
import 'package:visicalc_engine/visicalc_engine.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Visicalc Engine Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Visicalc Engine Demo'),
        ),
        body: Center(
          child: VisicalcDemo(),
        ),
      ),
    );
  }
}

class VisicalcDemo extends StatefulWidget {
  @override
  _VisicalcDemoState createState() => _VisicalcDemoState();
}

class _VisicalcDemoState extends State<VisicalcDemo> {
  late VisicalcEngine _engine;
  late String _result;

  @override
  void initState() {
    super.initState();
    _engine = VisicalcEngine();
    _performCalculations();
  }

  void _performCalculations() {
    // 设置初始单元格值
    _engine.setCellValue("A1", "5");
    _engine.setCellValue("B1", "3");

    // 执行公式计算
    _engine.setCellValue("C1", "=A1+B1");

    // 获取计算结果
    String? result = _engine.getCellValue("C1");
    setState(() {
      _result = result ?? "Error";
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text("Result of A1 + B1:"),
        Text(
          _result,
          style: TextStyle(fontSize: 24),
        ),
      ],
    );
  }
}

4. 运行应用

确保你已经正确配置了Flutter开发环境,然后运行你的应用:

flutter run

解释

  • 添加依赖:在pubspec.yaml中添加visicalc_engine依赖。
  • 导入插件:在Dart文件中导入visicalc_engine包。
  • 初始化引擎:在initState方法中初始化VisicalcEngine实例。
  • 设置单元格值:使用setCellValue方法设置初始单元格值。
  • 执行公式:使用setCellValue方法设置包含公式的单元格。
  • 获取结果:使用getCellValue方法获取计算结果并更新UI。

这个示例展示了如何使用visicalc_engine插件在Flutter应用中执行基本的电子表格计算。根据你的需求,你可以扩展这个示例来处理更复杂的电子表格计算。

回到顶部