Flutter for windows 列表数据导出Excel功能

655 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天

使用官方的excel插件,支持全终端,Android,iOS,Linux,Windows,MacOS

image.png

dependencies:
  excel: ^1.1.5

直接上代码

///导出Excel
void upExcel(BuildContext context) {
  var excel = Excel.createExcel();//创建Excel
  var zimu = ['A', 'B', "C", 'D', 'E', 'F'];///这里是添加数据有几行对应的ABCD就有几个
  Sheet sheetObject = excel['Sheet1'];///Excel 的子表名称
  CellStyle cellStyle =
      CellStyle(fontFamily: getFontFamily(FontFamily.Calibri));///Excel行的style,字体,颜色,北京颜色都可以设置
  // cellStyle.underline = Underline.Single; // or Underline.Double
  for (int i = 0; i < zimu.length; i++) {//插入Excel的代码循环插入列的数据
    switch (zimu[i]) {
      case 'A':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('A${i + 2}'));//这里为什么要写i+2呢,因为i=0;第一行是标题,我想从第二行插入所以是i+2
          cell.value = i + 1; // dynamic values support provided//这里为什么是i+1因为序号从1开始
          cell.cellStyle = cellStyle;
        }
        break;
      case 'B':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('B${i + 2}'));
          cell.value =
              _dataSources[i]['id']; // dynamic values support provided;
          cell.cellStyle = cellStyle;
        }
        break;
      case 'C':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('C${i + 2}'));
          cell.value =
              _dataSources[i]['title']; // dynamic values support provided;
          cell.cellStyle = cellStyle;
        }
        break;
      case 'D':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('D${i + 2}'));
          //自动换行 textWrapping:TextWrapping.WrapText,
          CellStyle cellStyle1 = CellStyle(
            backgroundColorHex: "#1AFF1A",//背景颜色单独的列
            fontFamily: getFontFamily(FontFamily.Calibri),
          );
          cell.value = _dataSources[i]
              ['sub_title']; // dynamic values support provided;
          cell.cellStyle = cellStyle1;
        }
        break;
      case 'E':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('E${i + 2}'));
          cell.value = _dataSources[i]
              ['create_time']; // dynamic values support provided;
          cell.cellStyle = cellStyle;
        }
        break;
      case 'F':
        for (int i = 0; i < _dataSources.length; i++) {
          var cell = sheetObject.cell(CellIndex.indexByString('F${i + 2}'));
          cell.value = _dataSources[i]
              ['created_at']; // dynamic values support provided;
          cell.cellStyle = cellStyle;
        }
        break;
    }
  }
  //插入表头标题
  List<String> dataList = [
    "序号",
    'id',
    "标题",
    "内容",
    "上传时间",
    "更新时间",
  ];
  sheetObject.insertRowIterables(dataList, 0);//在第几行插入
  ///保存Excel
  excel.encode().then((onValue) {
    try {
      File(join("/Users/jack/Desktop/Path_to_destination/工作日志.xlsx"))///保存Excel的路径
        ..createSync(recursive: true)
        ..writeAsBytesSync(onValue);
    } catch (e) {
      print(e.toString());
    }
  });
}

最后获取到的Excel的样式是;

image.png