Flutter Excel处理插件syncfusion_flutter_xlsio的使用

Flutter Excel处理插件syncfusion_flutter_xlsio的使用

Syncfusion Flutter XlsIO 是一个功能丰富且高性能的非UI Excel库,它允许您为Flutter应用程序添加强大的Excel功能。本文将介绍如何使用此插件来创建和操作Excel文档。

安装

首先,在您的pubspec.yaml文件中添加以下依赖项:

dependencies:
  syncfusion_flutter_xlsio: ^latest_version

然后运行flutter pub get来安装插件。

导入包

在您的Dart文件中导入必要的包:

import 'package:syncfusion_flutter_xlsio/xlsio.dart';

如果您需要在Excel文档中创建图表,则还需要导入以下包:

import 'package:syncfusion_officechart/officechart.dart';

创建简单的Excel文档

下面是一个完整的示例,演示如何创建并保存一个简单的Excel文档:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_xlsio/xlsio.dart' hide Column;
import 'helper/save_file_mobile.dart'
    if (dart.library.html) 'helper/save_file_web.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Create Excel Document')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              await generateExcel();
            },
            child: const Text('Generate Excel'),
          ),
        ),
      ),
    );
  }

  Future<void> generateExcel() async {
    // 创建一个新的Excel文档。
    final Workbook workbook = Workbook();
    final Worksheet sheet = workbook.worksheets[0];

    // 设置单元格值
    sheet.getRangeByName('A1').setText('Hello World');
    sheet.getRangeByName('B1').setNumber(12345);
    sheet.getRangeByName('C1').setDateTime(DateTime.now());

    // 保存文档
    final List<int> bytes = workbook.saveAsStream();
    File('SimpleExcel.xlsx').writeAsBytes(bytes);
    workbook.dispose();

    // 保存并打开文件(根据平台不同,实现可能有所差异)
    await saveAndLaunchFile(bytes, 'SimpleExcel.xlsx');
  }
}

添加文本、数字和日期时间值

您可以使用以下代码向Excel工作表中添加文本、数字和日期时间值:

final Worksheet sheet = workbook.worksheets[0];
sheet.getRangeByName('A1').setText('Hello World'); // 文本
sheet.getRangeByName('A2').setNumber(44); // 数字
sheet.getRangeByName('A3').setDateTime(DateTime(2020, 12, 12, 1, 10, 20)); // 日期时间

添加公式

您可以使用以下代码向Excel工作表单元格中添加公式:

sheet.enableSheetCalculations(); // 启用计算
sheet.getRangeByName('A1').setNumber(22);
sheet.getRangeByName('A2').setNumber(44);
sheet.getRangeByName('A3').setFormula('=A1+A2');

应用格式化

全局样式

定义并应用全局样式到Excel工作表单元格:

Style globalStyle = workbook.styles.add('style');
globalStyle.backColor = '#37D8E9'; // 背景颜色
globalStyle.fontName = 'Times New Roman'; // 字体名称
globalStyle.fontSize = 20; // 字体大小
sheet.getRangeByName('A1').cellStyle = globalStyle;

内置样式

应用内置样式到Excel工作表单元格:

sheet.getRangeByName('A1').builtInStyle = BuiltInStyles.linkedCell;

添加图片

支持PNG和JPEG格式的图片:

final List<int> imageBytes = File('image.png').readAsBytesSync();
final Picture picture = sheet.picutes.addStream(1, 1, imageBytes);

添加图表

创建图表并将其添加到Excel工作表:

// 设置单元格值
sheet.getRangeByName('A1').setText('John');
sheet.getRangeByName('A2').setText('Amy');
sheet.getRangeByName('A3').setText('Jack');
sheet.getRangeByName('A4').setText('Tiya');
sheet.getRangeByName('B1').setNumber(10);
sheet.getRangeByName('B2').setNumber(12);
sheet.getRangeByName('B3').setNumber(20);
sheet.getRangeByName('B4').setNumber(21);

// 创建图表集合实例
final ChartCollection charts = ChartCollection(sheet);
final Chart chart = charts.add();
chart.chartType = ExcelChartType.column;
chart.dataRange = sheet.getRangeByName('A1:B4');
sheet.charts = charts;

添加超链接

为网站创建超链接:

final Hyperlink hyperlink = sheet.hyperlinks.add(
    sheet.getRangeByName('A1'), HyperlinkType.url, 'https://www.syncfusion.com');
hyperlink.screenTip = 'To know more about Syncfusion products, go through this link.';
hyperlink.textToDisplay = 'Syncfusion';

操作行和列

自动调整大小

自动调整单个单元格的大小:

sheet.autoFitRow(1); // 自动调整第1行的高度
sheet.autoFitColumn(2); // 自动调整第2列的宽度

插入或删除行和列

插入行和列:

sheet.insertRow(1, 1, ExcelInsertOptions.formatAsAfter); // 在第1行后插入一行
sheet.insertColumn(2, 1, ExcelInsertOptions.formatAsBefore); // 在第2列前插入一列

删除行和列:

sheet.deleteRow(1, 1); // 删除第1行
sheet.deleteColumn(2, 1); // 删除第2列

保护工作簿和工作表

保护工作簿元素

workbook.protect(true, true, 'password'); // 使用密码保护工作簿

保护工作表

sheet.protect('Password', ExcelSheetProtectionOption()..all = true); // 使用密码保护工作表

导入数据

从列表导入数据到Excel工作表:

final List<Object> list = ['Total Income', 20000, 'On Date', DateTime(2021, 1, 1)];
sheet.importList(list, 1, 1, true);

应用条件格式

应用条件格式到单元格或范围:

final ConditionalFormats conditions = sheet.getRangeByName('A2').conditionalFormats;
final ConditionalFormat condition = conditions.addCondition();
condition.formatType = ExcelCFType.cellValue;
condition.operator = ExcelComparisonOperator.between;
condition.firstFormula = '10';
condition.secondFormula = '20';
condition.backColor = '#00FFCC';
condition.fontColorRgb = Color.fromARGB(255, 200, 20, 100);
condition.isBold = true;
condition.isItalic = true;
condition.numberFormat = '0.0';
condition.underline = true;
condition.topBorderStyle = LineStyle.thick;
condition.topBorderColorRgb = Color.fromARGB(255, 200, 1, 200);
condition.bottomBorderStyle = LineStyle.medium;
condition.bottomBorderColor = '#FF0000';
condition.rightBorderStyle = LineStyle.double;
condition.rightBorderColorRgb = Color.fromARGB(250, 24, 160, 200);
condition.leftBorderStyle = LineStyle.thin;
condition.leftBorderColor = '#AAFFAA';

以上是关于syncfusion_flutter_xlsio的基本使用指南,更多详细信息可以参考官方文档。


更多关于Flutter Excel处理插件syncfusion_flutter_xlsio的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Excel处理插件syncfusion_flutter_xlsio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中处理Excel文件时,syncfusion_flutter_xlsio是一个非常强大的插件。它允许你读取、创建和编辑Excel文件(.xls和.xlsx格式)。以下是如何在Flutter项目中使用syncfusion_flutter_xlsio的示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  syncfusion_flutter_xlsio: ^x.y.z  # 请替换为最新版本号

2. 导入包

在你的Dart文件中导入syncfusion_flutter_xlsio包:

import 'package:syncfusion_flutter_xlsio/xlsio.dart';

3. 创建一个简单的Excel文件

以下是一个创建并保存Excel文件的示例:

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_xlsio/xlsio.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Excel Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _createExcelFile,
            child: Text('Create Excel File'),
          ),
        ),
      ),
    );
  }

  Future<void> _createExcelFile() async {
    // 获取应用的文档目录
    final directory = await getApplicationDocumentsDirectory();
    final filePath = '${directory.path}/example.xlsx';

    // 创建一个新的Workbook
    final workbook = Workbook();
    final worksheet = workbook.worksheets[0];

    // 向工作表中添加数据
    worksheet.cells[0, 0].text = 'Hello';
    worksheet.cells[0, 1].text = 'World';

    // 保存Workbook到文件
    final Uint8List bytes = await workbook.saveAsStream();
    final file = File(filePath);
    await file.writeAsBytes(bytes);

    // 显示成功消息
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Excel file created successfully')),
    );
  }
}

4. 读取Excel文件

以下是一个读取Excel文件的示例:

Future<void> _readExcelFile() async {
    // 获取应用的文档目录
    final directory = await getApplicationDocumentsDirectory();
    final filePath = '${directory.path}/example.xlsx';

    // 打开Workbook
    final Uint8List bytes = await File(filePath).readAsBytes();
    final workbook = await Workbook.fromBytes(bytes);
    final worksheet = workbook.worksheets[0];

    // 读取数据
    final cellText = worksheet.cells[0, 0].text;
    print('Cell A1: $cellText');

    // 显示读取的数据
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text("Read from Excel: $cellText")),
    );
}

你可以将_readExcelFile方法添加到你的按钮点击事件中,以读取并显示Excel文件中的数据。

注意事项

  1. 许可证syncfusion_flutter_xlsio是一个商业插件,使用时需要遵守其许可证协议。
  2. 权限:在Android和iOS上,你可能需要添加适当的权限来访问文件系统。

通过以上代码,你可以在Flutter应用中创建和读取Excel文件。根据你的需求,你还可以进一步探索syncfusion_flutter_xlsio的其他功能,如格式化单元格、添加图表等。

回到顶部