字节笔记本

2026年2月22日

flutter_export_to_excel:Flutter 高性能 Excel 导出示例

本文介绍 flutter_export_to_excel,一个 Flutter Excel 导出示例项目。该项目展示了如何在 3 秒内将 10000 行数据导出到 Excel 文件,使用 excel 包实现高性能数据导出功能。

项目简介

flutter_export_to_excel 是一个开源的 Flutter 示例项目,由 Igor Dmitrov 开发。该项目演示了如何使用 excel 包在 Flutter 应用中高效导出大量数据到 Excel 文件。截至目前,该项目在 GitHub 上获得 4 stars,主要使用 Dart 语言编写。

核心特性

  • 高性能导出:3 秒内导出 10000 行数据到 Excel
  • 简单易用:简洁的 API 设计,易于集成到现有项目
  • 跨平台支持:支持 Android、iOS 和 Web 平台
  • 性能监控:内置执行时间统计功能

技术栈

  • Flutter - 跨平台 UI 框架
  • excel - Dart Excel 操作库
  • Dart - 编程语言

核心代码解析

以下是 home.dart 文件的核心实现:

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

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  static const int rows = 10000;
  Duration? executionTime;

  void exportToExcel() {
    final stopwatch = Stopwatch()..start();
    final excel = Excel.createExcel();
    final Sheet sheet = excel[excel.getDefaultSheet()!];

    for (var row = 0; row < rows; row++) {
      sheet
          .cell(CellIndex.indexByColumnRow(columnIndex: 0, rowIndex: row))
          .value = 'FLUTTER';
      sheet
          .cell(CellIndex.indexByColumnRow(columnIndex: 1, rowIndex: row))
          .value = 'is';
      sheet
          .cell(CellIndex.indexByColumnRow(columnIndex: 2, rowIndex: row))
          .value = "Google's";
      sheet
          .cell(CellIndex.indexByColumnRow(columnIndex: 4, rowIndex: row))
          .value = "UI";
      sheet
          .cell(CellIndex.indexByColumnRow(columnIndex: 5, rowIndex: row))
          .value = "toolkit";
    }

    excel.save(fileName: "MyData.xlsx");

    setState(() {
      executionTime = stopwatch.elapsed;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Center(
            child: Text(
              '$rows rows to Excel',
              style: TextStyle(fontSize: 40),
            ),
          ),
          Center(
            child: ElevatedButton(
              child: Text('Export to Excel'),
              onPressed: exportToExcel,
            ),
          ),
          if (executionTime != null)
            Center(
              child: Text(executionTime.toString()),
            )
        ],
      ),
    );
  }
}

代码说明

1. 数据写入

使用 CellIndex.indexByColumnRow() 方法定位单元格,通过循环批量写入数据:

dart
for (var row = 0; row < rows; row++) {
  sheet
      .cell(CellIndex.indexByColumnRow(columnIndex: 0, rowIndex: row))
      .value = '数据';
}

2. 性能统计

使用 Stopwatch 测量导出执行时间:

dart
final stopwatch = Stopwatch()..start();
// ... 导出逻辑
executionTime = stopwatch.elapsed;

3. 文件保存

调用 excel.save() 方法保存文件:

dart
excel.save(fileName: "MyData.xlsx");

依赖配置

pubspec.yaml 中添加依赖:

yaml
dependencies:
  flutter:
    sdk: flutter
  excel: ^2.0.0

使用场景

  • 数据报表导出
  • 批量数据备份
  • 财务数据导出
  • 统计分析报告

项目链接

分享: