flutter 如何通过编程从GSheet中删除单元格?

axr492tv  于 2022-11-17  发布在  Flutter
关注(0)|答案(2)|浏览(113)

我在Flutter应用中使用了一个GSheet来记录用户点击按钮时的时间戳。时间戳存储在B列中。有没有办法(我听说过AppScript,但不确定)让我在一个API调用中检查整个Google工作表,检查时间戳(B列),并将比记录的时间戳早30天的行移动到另一个GSheet中?

qc6wkl3g

qc6wkl3g1#

你需要检查GoogleSheets API documentation,你必须适应googleapis包(因为显然谷歌懒得给出它如何与. dart一起工作的例子...)。如果没有人给你答案,我会尝试用一个工作例子来编辑它。
编辑:好的,显然有一个简单的和专门的方式与gsheet package
例子很清楚,如果有帮助的话告诉我。
用于使用Google Sheets API v4的库。在Dart中使用gsheet管理电子表格

教程

1/创建电子表格并保存其ID

然后保存其ID(在url中的d/之后和/编辑之前):

const _spreadsheetId = '1VRxkfV0BpQqwFAb5Orgj-DU7VNfbG78HaZMA-axONEA';

2 /创建Flutter应用

在pubspec.yaml的依赖项中添加gsheet

dependencies:
  gsheets: ^0.2.6
  flutter:
    sdk: flutter

然后是扑啦扑啦。
从库中复制粘贴示例:

import 'package:gsheets/gsheets.dart';

// your google auth credentials
const _credentials = r'''
{
  "type": "service_account",
  [...] // you will replace this part later on
}
''';
// your spreadsheet id
const _spreadsheetId = '1VRxkfV0BpQqwFAb5Orgj-DU7VNfbG78HaZMA-axONEA';

void main() async {
  // init GSheets
  final gsheets = GSheets(_credentials);
  // fetch spreadsheet by its id
  final ss = await gsheets.spreadsheet(_spreadsheetId);
  // get worksheet by its title
  var sheet = await ss.worksheetByTitle('example');
  // create worksheet if it does not exist yet
  sheet ??= await ss.addWorksheet('example');

  // update cell at 'B2' by inserting string 'new'
  await sheet.values.insertValue('new', column: 2, row: 2);
  // prints 'new'
  print(await sheet.values.value(column: 2, row: 2));
  // get cell at 'B2' as Cell object
  final cell = await sheet.cells.cell(column: 2, row: 2);
  // prints 'new'
  print(cell.value);
  // update cell at 'B2' by inserting 'new2'
  await cell.post('new2');
  // prints 'new2'
  print(cell.value);
  // also prints 'new2'
  print(await sheet.values.value(column: 2, row: 2));

  // insert list in row #1
  final firstRow = ['index', 'letter', 'number', 'label'];
  await sheet.values.insertRow(1, firstRow);
  // prints [index, letter, number, label]
  print(await sheet.values.row(1));

  // insert list in column 'A', starting from row #2
  final firstColumn = ['0', '1', '2', '3', '4'];
  await sheet.values.insertColumn(1, firstColumn, fromRow: 2);
  // prints [0, 1, 2, 3, 4, 5]
  print(await sheet.values.column(1, fromRow: 2));

  // insert list into column named 'letter'
  final secondColumn = ['a', 'b', 'c', 'd', 'e'];
  await sheet.values.insertColumnByKey('letter', secondColumn);
  // prints [a, b, c, d, e, f]
  print(await sheet.values.columnByKey('letter'));

  // insert map values into column 'C' mapping their keys to column 'A'
  // order of map entries does not matter
  final thirdColumn = {
    '0': '1',
    '1': '2',
    '2': '3',
    '3': '4',
    '4': '5',
  };
  await sheet.values.map.insertColumn(3, thirdColumn, mapTo: 1);
  // prints {index: number, 0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6}
  print(await sheet.values.map.column(3));

  // insert map values into column named 'label' mapping their keys to column
  // named 'letter'
  // order of map entries does not matter
  final fourthColumn = {
    'a': 'a1',
    'b': 'b2',
    'c': 'c3',
    'd': 'd4',
    'e': 'e5',
  };
  await sheet.values.map.insertColumnByKey(
    'label',
    fourthColumn,
    mapTo: 'letter',
  );
  // prints {a: a1, b: b2, c: c3, d: d4, e: e5, f: f6}
  print(await sheet.values.map.columnByKey('label', mapTo: 'letter'));

  // appends map values as new row at the end mapping their keys to row #1
  // order of map entries does not matter
  final secondRow = {
    'index': '5',
    'letter': 'f',
    'number': '6',
    'label': 'f6',
  };
  await sheet.values.map.appendRow(secondRow);
  // prints {index: 5, letter: f, number: 6, label: f6}
  print(await sheet.values.map.lastRow());

  // get first row as List of Cell objects
  final cellsRow = await sheet.cells.row(1);
  // update each cell's value by adding char '_' at the beginning
  cellsRow.forEach((cell) => cell.value = '_${cell.value}');
  // actually updating sheets cells
  await sheet.cells.insert(cellsRow);
  // prints [_index, _letter, _number, _label]
  print(await sheet.values.row(1));
}

3/创建服务帐户并生成密钥

转到https://console.cloud.google.com/iam-admin/serviceaccounts并单击“创建服务帐户”。选择您的项目或创建新项目。选择或创建项目后,您必须单击“创建新服务帐户”。

输入项目名称后,单击“下一步”,直到到达最后一步:添加键,它将保存一个json文件在你的cpu上。

4/将凭据添加到项目中

复制此json文件的内容,并用其内容替换项目中的{ }

5/通过服务帐户电子邮件共享Google表单

在服务帐户页面上,您会注意到您的服务帐户有一个电子邮件。复制它并转到您的电子表格,然后与服务帐户共享您的电子表格。

6/启用Google工作表和Google云端硬盘API

如果因为它是一个新项目而没有完成,您必须为您的项目启用这两个API,以便允许您的服务帐户访问它。转到https://console.cloud.google.com/apis/library并搜索Google Sheets APIGoogle Drive API并添加它们。
x1c4d 1x指令集

7/根据需要更改代码

要删除单元格内容,只需编写以下代码:

final cell = await sheet.cells.cell(column: 1, row: 1); // select A1
 await cell.post('');   // update cell at 'A1' by inserting ''

要测试它是否工作正常,请创建名为example的工作表,并在单元格A1中输入任何值,运行应用程序并检查其效果。

lkaoscv7

lkaoscv72#

下面是一个方法,它将deletesGoogle sheets中的工作表中返回一行,记住我已经将一个String id传递给该方法,作为工作表中第一列中该行的指示符

static Future deleteRowfromtheSheet(String id) async {

        if (_googleSheetname == null) return false;
    
        final index = await _googleSheetname!.values.rowIndexOf(id);
        if (index == -1) return false;
    
        return _googleSheetname!.deleteRow(index);
      }

}

相关问题