Flutter Excel文件处理插件excel的使用
Flutter Excel文件处理插件excel的使用
Excel 是一个用于在 Flutter 和 Dart 中读取、创建和更新 XLSX 文件的库。本文将详细介绍如何使用 excel
插件来处理 Excel 文件,并提供完整的示例代码。
依赖安装
首先,在你的 pubspec.yaml
文件中添加 excel
依赖:
dependencies:
flutter:
sdk: flutter
excel: ^4.0.0 # 请根据最新的版本进行调整
然后运行 flutter pub get
来安装依赖。
基本用法
读取 XLSX 文件
以下是如何从本地文件系统读取 XLSX 文件并打印其内容:
import 'dart:io';
import 'package:excel/excel.dart';
void readLocalExcelFile() {
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('Sheet Name: $table');
print('Max Columns: ${excel.tables[table]!.maxColumns}');
print('Max Rows: ${excel.tables[table]!.maxRows}');
for (var row in excel.tables[table]!.rows) {
for (var cell in row) {
final value = cell?.value;
if (value != null) {
print('Cell [${cell.rowIndex}/${cell.columnIndex}]: $value');
}
}
}
}
}
在 Flutter Web 中读取 XLSX 文件
在 Flutter Web 中,可以使用 file_picker
包来选择文件:
import 'package:file_picker/file_picker.dart';
import 'package:excel/excel.dart';
Future<void> readWebExcelFile() 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('Sheet Name: $table');
print('Max Columns: ${excel.tables[table]!.maxColumns}');
print('Max Rows: ${excel.tables[table]!.maxRows}');
for (var row in excel.tables[table]!.rows) {
print(row.map((e) => e?.value).toList());
}
}
}
}
创建新的 XLSX 文件
import 'package:excel/excel.dart';
void createNewExcelFile() {
var excel = Excel.createExcel();
var sheet = excel['Sheet1'];
// 添加一些数据
sheet.cell(CellIndex.indexByString('A1')).value = TextCellValue('Hello');
sheet.cell(CellIndex.indexByString('B1')).value = IntCellValue(123);
// 保存文件
List<int>? fileBytes = excel.save();
if (fileBytes != null) {
File('output_file.xlsx')
..createSync(recursive: true)
..writeAsBytesSync(fileBytes);
}
}
更新单元格样式
import 'package:excel/excel.dart';
void updateCellStyle() {
var excel = Excel.createExcel();
var sheet = excel['Sheet1'];
CellStyle cellStyle = CellStyle(
bold: true,
italic: true,
textWrapping: TextWrapping.WrapText,
fontFamily: getFontFamily(FontFamily.Comic_Sans_MS),
rotation: 0,
);
var cell = sheet.cell(CellIndex.indexByString("A1"));
cell.value = TextCellValue("Styled Text");
cell.cellStyle = cellStyle;
// 保存文件
List<int>? fileBytes = excel.save();
if (fileBytes != null) {
File('styled_output_file.xlsx')
..createSync(recursive: true)
..writeAsBytesSync(fileBytes);
}
}
合并单元格
import 'package:excel/excel.dart';
void mergeCellsExample() {
var excel = Excel.createExcel();
var sheet = excel['Sheet1'];
// 合并 A1 到 E4 的单元格
sheet.merge(
CellIndex.indexByString('A1'),
CellIndex.indexByString('E4'),
customValue: TextCellValue('Merged Content'),
);
// 保存文件
List<int>? fileBytes = excel.save();
if (fileBytes != null) {
File('merged_output_file.xlsx')
..createSync(recursive: true)
..writeAsBytesSync(fileBytes);
}
}
完整示例 Demo
以下是一个完整的示例程序,展示了如何创建一个新的 Excel 文件,添加数据,设置样式,合并单元格,并保存文件:
import 'dart:io';
import 'package:excel/excel.dart';
void main() async {
var excel = Excel.createExcel();
var sheet = excel['Sheet1'];
// 添加数据
sheet.cell(CellIndex.indexByString('A1')).value = TextCellValue('Name');
sheet.cell(CellIndex.indexByString('B1')).value = TextCellValue('Age');
sheet.cell(CellIndex.indexByString('A2')).value = TextCellValue('Alice');
sheet.cell(CellIndex.indexByString('B2')).value = IntCellValue(30);
sheet.cell(CellIndex.indexByString('A3')).value = TextCellValue('Bob');
sheet.cell(CellIndex.indexByString('B3')).value = IntCellValue(25);
// 设置样式
CellStyle headerStyle = CellStyle(
bold: true,
backgroundColorHex: '#FFCC00',
);
sheet.cell(CellIndex.indexByString('A1')).cellStyle = headerStyle;
sheet.cell(CellIndex.indexByString('B1')).cellStyle = headerStyle;
// 合并单元格
sheet.merge(
CellIndex.indexByString('A1'),
CellIndex.indexByString('B1'),
customValue: TextCellValue('User Information'),
);
// 保存文件
List<int>? fileBytes = excel.save();
if (fileBytes != null) {
File('complete_example.xlsx')
..createSync(recursive: true)
..writeAsBytesSync(fileBytes);
}
print('Excel file created successfully.');
}
通过上述示例,你可以轻松地在 Flutter 应用中处理 Excel 文件。希望这些示例能帮助你更好地理解和使用 excel
插件。
更多关于Flutter Excel文件处理插件excel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Excel文件处理插件excel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在处理Flutter应用中的Excel文件时,可以使用excel
库或更流行的syncfusion_flutter_xlsxio
库,后者提供了更强大和全面的功能。以下是一个使用syncfusion_flutter_xlsxio
库来处理Excel文件的代码示例。
首先,你需要在pubspec.yaml
文件中添加依赖项:
dependencies:
flutter:
sdk: flutter
syncfusion_flutter_xlsxio: ^x.y.z # 请将x.y.z替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个简单的示例,展示如何读取Excel文件并显示其中的内容:
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_xlsxio/xlsxio.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Excel Handling'),
),
body: ExcelHandler(),
),
);
}
}
class ExcelHandler extends StatefulWidget {
@override
_ExcelHandlerState createState() => _ExcelHandlerState();
}
class _ExcelHandlerState extends State<ExcelHandler> {
List<List<String>>? excelData;
@override
void initState() {
super.initState();
_readExcelFile();
}
Future<void> _readExcelFile() async {
try {
// 获取应用文档目录
Directory appDocDir = await getApplicationDocumentsDirectory();
String filePath = '${appDocDir.path}/sample.xlsx';
// 确保文件存在(这里假设你已经有了一个名为sample.xlsx的文件在应用中)
File file = File(filePath);
if (!file.existsSync()) {
throw Exception("File not found");
}
// 打开Excel文件
ExcelEngine excelEngine = ExcelEngine();
XlsxIO io = XlsxIO();
await io.open(filePath);
// 读取第一个工作表
IWorkbook workbook = await io.read();
IWorksheet worksheet = workbook.worksheets[0];
// 提取数据
List<List<String>> data = [];
int rowCount = worksheet.rowCount;
for (int row = 1; row <= rowCount; row++) {
List<String> rowData = [];
int colCount = worksheet.columnCount;
for (int col = 1; col <= colCount; col++) {
ICell cell = worksheet.getCell(row, col);
rowData.add(cell.text);
}
data.add(rowData);
}
// 更新状态
setState(() {
excelData = data;
});
// 关闭文件
await io.close();
} catch (e) {
print("Error reading Excel file: $e");
}
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: excelData != null
? ListView.builder(
itemCount: excelData!.length,
itemBuilder: (context, index) {
return Row(
children: excelData![index].map((cellData) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Text(cellData),
);
}).toList(),
);
})
: Center(child: Text("Loading...")),
);
}
}
在这个示例中:
- 使用
path_provider
库获取应用的文档目录。 - 假设你已经在应用的文档目录中有一个名为
sample.xlsx
的Excel文件。 - 使用
syncfusion_flutter_xlsxio
库打开并读取Excel文件。 - 读取第一个工作表的数据并将其存储在
excelData
列表中。 - 使用
ListView.builder
在UI中显示数据。
请确保将sample.xlsx
文件放置在你的应用文档目录中,或者根据需要修改文件路径和文件名。此外,syncfusion_flutter_xlsxio
库可能需要有效的许可证密钥才能用于生产环境,请参考Syncfusion的文档获取更多信息。