Из supabase в Excel

Дата: 2025-02-23
From Вахтанг

Для чего

Код нужен для получения данных из Supabase и формирования этих данных в формат для excel.

В return value ничего не надо указывать, скачивание происходит автоматически.
Код нужно немного доработать под ваш формат.

Код

Код-для-загрузки-excel - 20250223.txt

// Automatic FlutterFlow imports
import '/backend/schema/structs/index.dart';
import '/backend/supabase/supabase.dart';
import '/actions/actions.dart' as action_blocks;
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/actions/index.dart'; // Imports other custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom action code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

import 'package:excel/excel.dart';
import 'package:universal_html/html.dart' as html;

Future downloadExcelCA(List<TransactionsRow> supabaseData) async {
  try {
    final excel = Excel.createExcel();
    final sheet = excel['Sheet1'];

    // 1. Добавляем заголовки для excel 
    sheet.appendRow([
      'Название 1 столбца',
      'Название 2 столбца',
      'И тд'
    ]);

    // 2. Добавляем данные напрямую через поля класса. Тут нужно указать названия ваших столбцов как в таблице supabase
    for (var row in supabaseData) {
      sheet.appendRow([
        row.id?.toString() ?? '', // ID
        row.data?.toString() ?? '', // Дата 
        row.summa?.toString() ?? '', // Сумма
        row.tip ?? '', // Тип
        row.komissia?.toString() ?? '', // Комиссия
        
        row.komment ?? '' // Комментарий
      ]);
    }

    // 3. Скачивание
    final bytes = excel.encode()!;
    final blob = html.Blob([bytes],
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    final url = html.Url.createObjectUrlFromBlob(blob);
    html.AnchorElement(href: url)
      ..download = 'transactions_${DateTime.now().millisecondsSinceEpoch}.xlsx'
      ..click();
    html.Url.revokeObjectUrl(url);
  } catch (e) {
    print('Ошибка: $e');
  }
}