Flutter Excel文件处理插件flutter_excel的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter Excel文件处理插件 flutter_excel 的使用指南

简介

flutter_excel 是一个用于读取、创建和更新 XLSX 文件的 Flutter 和 Dart 库。它支持多种功能,如读取现有 Excel 文件、创建新 Excel 文件、更新单元格值等。

开始使用

1. 添加依赖

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_excel: any

2. 安装依赖

你可以通过命令行安装包:

  • 使用 pub

    $ pub get
    
  • 使用 Flutter

    $ flutter packages get
    

3. 导入库

在你的 Dart 代码中导入库:

import 'package:flutter_excel/excel.dart';

使用示例

读取现有的 Excel 文件

从本地文件系统读取

import 'dart:io';
import 'package:path/path.dart';
import 'package:flutter_excel/excel.dart';

void main() {
  var file = "Path_to_pre_existing_Excel_File/excel_file.xlsx";
  var bytes = File(file).readAsBytesSync();
  var excel = Excel.decodeBytes(bytes);

  for (var table in excel.tables.keys) {
    print(table); // sheet Name
    print(excel.tables[table].maxCols);
    print(excel.tables[table].maxRows);
    for (var row in excel.tables[table].rows) {
      print("$row");
    }
  }
}

在 Flutter Web 中读取

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

Future<void> pickAndReadExcelFile() async {
  FilePickerResult? pickedFile = await FilePicker.platform.pickFiles(
    type: FileType.custom,
    allowedExtensions: ['xlsx'],
    allowMultiple: false,
  );

  if (pickedFile != null) {
    var bytes = pickedFile.files.single.bytes;
    var excel = Excel.decodeBytes(bytes!);
    for (var table in excel.tables.keys) {
      print(table); // sheet Name
      print(excel.tables[table].maxCols);
      print(excel.tables[table].maxRows);
      for (var row in excel.tables[table].rows) {
        print("$row");
      }
    }
  }
}

从 Flutter 的 Asset 文件夹读取

import 'package:flutter/services.dart' show ByteData, rootBundle;
import 'package:flutter_excel/excel.dart';

Future<void> readExcelFromAsset() async {
  ByteData data = await rootBundle.load("assets/existing_excel_file.xlsx");
  var bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
  var excel = Excel.decodeBytes(bytes);

  for (var table in excel.tables.keys) {
    print(table); // sheet Name
    print(excel.tables[table].maxCols);
    print(excel.tables[table].maxRows);
    for (var row in excel.tables[table].rows) {
      print("$row");
    }
  }
}

创建新的 Excel 文件

import 'package:flutter_excel/excel.dart';

void createNewExcelFile() {
  var excel = Excel.createExcel(); // 自动创建一个名为 Sheet1 的空工作表
}

更新单元格值

import 'package:flutter_excel/excel.dart';

void updateCellExample() {
  var excel = Excel.createExcel();
  Sheet sheetObject = excel['SheetName'];

  CellStyle cellStyle = CellStyle(
    backgroundColorHex: "#1AFF1A",
    fontFamily: getFontFamily(FontFamily.Calibri),
  );
  cellStyle.underline = Underline.Single; // 或者 Underline.Double

  var cell = sheetObject.cell(CellIndex.indexByString("A1"));
  cell.value = 8; // 动态支持的数据类型
  cell.cellStyle = cellStyle;

  print("CellType: ${cell.cellType}");
}

保存 Excel 文件

在 Flutter Web 中保存

import 'package:flutter_excel/excel.dart';

void saveExcelOnWeb() {
  var fileBytes = excel.save(fileName: "My_Excel_File_Name.xlsx");
}

在 Android/iOS 中保存

import 'package:flutter_excel/excel.dart';
import 'package:path_provider/path_provider.dart';

Future<void> saveExcelOnMobile() async {
  var fileBytes = excel.save();
  var directory = await getApplicationDocumentsDirectory();

  File(join("$directory/output_file_name.xlsx"))
    ..createSync(recursive: true)
    ..writeAsBytesSync(fileBytes!);
}

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

1 回复

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


当然,关于flutter_excel插件在Flutter中处理Excel文件的使用,这里提供一个基本的代码案例来展示如何读取Excel文件。请注意,flutter_excel插件本身在Flutter社区中并不是一个广泛认可或官方维护的插件,因此其功能和可用性可能会有所不同。以下示例基于假设flutter_excel插件存在并具有读取Excel文件的基本功能。

首先,确保在pubspec.yaml文件中添加flutter_excel依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_excel: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get来安装依赖。

接下来是一个简单的示例代码,展示如何使用flutter_excel插件读取Excel文件:

import 'package:flutter/material.dart';
import 'package:flutter_excel/flutter_excel.dart';
import 'dart:io';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Excel Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<List<dynamic>> excelData = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Excel Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _pickExcelFile,
              child: Text('Pick Excel File'),
            ),
            SizedBox(height: 20),
            Expanded(
              child: ListView.builder(
                itemCount: excelData.length,
                itemBuilder: (context, index) {
                  return Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Row(
                      children: excelData[index].map((item) => Text(item.toString())).toList(),
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _pickExcelFile() async {
    FilePickerResult? result = await FilePicker.platform.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['xls', 'xlsx'],
    );

    if (result != null) {
      File file = File(result.files.single.path!);
      List<List<dynamic>> data = await Excel.decodeBytes(file.readAsBytesSync());
      setState(() {
        excelData = data;
      });
    }
  }
}

在这个示例中,我们使用了file_picker插件来选择文件,因为flutter_excel本身可能不提供文件选择功能。确保在pubspec.yaml文件中也添加file_picker依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_excel: ^最新版本号  # 请替换为实际可用的最新版本号
  file_picker: ^最新版本号  # 同样,请替换为实际可用的最新版本号

然后运行flutter pub get来安装新添加的依赖。

注意:由于flutter_excel插件并非官方或广泛认可的插件,上述代码可能需要根据实际插件的API进行调整。如果flutter_excel插件不支持直接从字节解码Excel文件,可能需要寻找其他库(如excelopen_xlsx)来处理Excel文件的解析,并结合文件选择器实现功能。

在实际开发中,如果flutter_excel插件不可用或功能不足,建议查阅Flutter社区和Pub.dev上的其他Excel处理插件,或者考虑使用原生平台代码(如Android的Apache POI或iOS的NumbersKit)通过平台通道与Flutter交互。

回到顶部