如何为CSV文件创建多个工作表 附单工作表生成实现代码
问题解答
首先明确:CSV 是纯文本逗号分隔值格式,本身*不支持多工作表(sheet)*特性,多工作表是 XLS/XLSX 这类 Office 表格格式独有的功能。
方案1:改用XLSX格式实现真多工作表(推荐)
如果你需要生成带多个工作表的文件供Excel打开,直接改用XLSX格式输出即可,Dart生态下可以用excel包实现,示例代码如下:
// 先在pubspec.yaml添加依赖:excel: ^2.1.0(请使用官方最新版本) import 'package:excel/excel.dart'; void main() { // 初始化Excel对象 var excel = Excel.createExcel(); // 第一个工作表:可直接使用默认生成的Sheet1,也可以重命名 Sheet sheet1 = excel['税费表']; // 写入你原有的税费数据 List<dynamic> associateList = [ {"taxes": "100"}, ]; // 写入表头 sheet1.appendRow(["Taxes"]); // 写入数据行 for (var item in associateList) { sheet1.appendRow([item["taxes"]]); } // 新增第二个自定义工作表 Sheet sheet2 = excel['其他数据表']; // 写入第二个工作表的内容,示例如下 sheet2.appendRow(["商品名称", "售价"]); sheet2.appendRow(["示例商品A", "299"]); // 导出为XLSX文件字节流,后续写入后缀为.xlsx的文件即可 var fileBytes = excel.save(); }
方案2:纯CSV格式模拟多表(仅视觉区分,不是真工作表)
如果你必须输出CSV格式,可以在两个表的数据之间插入多个空行+自定义表名标识,实现视觉上的内容区分,这种方式打开后两个表的数据仍在同一个工作表里,只是分段显示:
List<List<dynamic>> rows = []; // 写入第一个表内容 List<dynamic> associateList = [ {"taxes": "100"}, ]; rows.add(["=== 表1:税费表 ==="]); rows.add(["Taxes"]); for (int i = 0; i < associateList.length; i++) { rows.add([associateList[i]["taxes"]]); } // 插入3个空行分隔两个表 rows.addAll([[], [], []]); // 写入第二个表内容 rows.add(["=== 表2:其他数据 ==="]); rows.add(["字段1", "字段2"]); rows.add(["测试值1", "测试值2"]); // 转换为CSV格式 String csv = const ListToCsvConverter().convert(rows);
内容的提问来源于stack exchange,提问作者Dani
相关产品推荐
相关产品推荐

