10

我目前正在使用 Google 表单来允许人们提交存储在 Google Docs 电子表格中的信息。我想知道是否可以定期自动备份电子表格。例如,每个星期五,电子表格将导出为 CSV,并通过电子邮件发送给我或存储在服务器上受密码保护的目录中。

感谢阅读,任何想法表示赞赏!

4

3 回答 3

10

这是一个解决方案:

  • 自动创建 Google 电子表格的备份(每天/每周等)
  • 作为 Google Drive 中给定文件夹中的 Excel 文件 (XLSX)
  • 然后您可以将其配置为自动同步到您的计算机

第1步

在您的 Google Drive 中为备份文件创建一个文件夹(例如“我的 Drive > Docs > Backups”)。在浏览器中打开它,并记下 URL 中的“文件夹 ID ”。例如,来自以下 URL 的文件夹 ID 将是1234abcdefgh_98765ijklmnopqrs_0XY

https://drive.google.com/drive/u/0/folders/1234abcdefgh_98765ijklmnopqrs_0XY?ths=true

第2步

打开您要自动备份的 Google 电子表格。从顶部菜单中,选择“工具”>“脚本编辑器”。在打开的新窗口中,将默认代码替换为以下代码,并确保:

// function to backup the current Spreadsheet as an Excel file (XLSX) in a given folder
// -- requires "Advanced Drive Service" which must be enabled in "Resources" > "Advanced Google services..." > "Drive API" > toggle "ON"
function backupSheet() {
  // UPDATE THE FOLDER ID for e.g. "My Drive > Docs > Backups"
  var backupFolder = DriveApp.getFolderById("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId();
  var file = Drive.Files.get(spreadsheetId);
  var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];

  // UPDATE THE SHEET-NAME TO BE EXPORTED - e.g. sheetName = "Malawi Ops"
  // -- LEAVE IT BLANK TO EXPORT THE ENTIRE SPREADSHEET - i.e. sheetName = ""
  var sheetName = "";
  if (sheetName.length) {
    var sheet = spreadsheet.getSheetByName(sheetName);
    var sheetId = sheet.getSheetId();
    url += "&gid=" + sheetId;
  }

  var token = ScriptApp.getOAuthToken();
  var options = { headers: { Authorization: "Bearer " + token } };
  var response = UrlFetchApp.fetch(url, options);
  var doc = response.getBlob();
  var backupDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH-mm-ss");
  var backupName = spreadsheet.getName() + ".backup " + backupDate + ".xlsx";
  var tempFile = DriveApp.createFile(doc).setName(backupName);
  tempFile.makeCopy(backupName, backupFolder);
  tempFile.setTrashed(true);
}

如果您想测试脚本,请单击代码上方的“运行”图标。这将在您配置的备份文件夹中创建电子表格的备份 Excel 文件(基于前面提到的文件夹 ID)。

第 3 步

保存您的脚本(从顶部菜单中选择“文件”>“保存”),然后单击代码上方的“触发器”图标(时钟形图标)。在打开的新窗口中,单击“ + 添加触发器”(在右下角)。您应该会看到一个标题为“为 backupSheet 添加触发器”的叠加层,您可以在其中计划执行自动备份。例如,如果您希望它每周一运行,您应该配置这些设置:

  • 选择要运行的函数:backupSheet
  • 选择应该运行的部署:Head
  • 选择事件源:时间驱动
  • 选择基于时间的触发器类型:周定时器
  • 选择星期几:每周一

完成配置后保存触发器。Excel 备份现在将自动在您的 Google Drive 中的所需文件夹中创建。

第4步

最后,在您的计算机上安装来自 Google 的备份和同步(如果您还没有),并将其配置为从您的 Google Drive 帐户同步备份文件夹 - 在“首选项”>“Google Drive”>启用“将我的驱动器同步到此计算机”,并确保备份文件夹位于正在同步的文件夹中。

该应用程序现在将自动下载您的 Google 电子表格的 Excel 备份,供您离线使用!

于 2019-02-16T16:03:26.770 回答
4

Google Docs 是在线编辑和协作处理文档的理想工具。虽然 Google Docs 不提供自动备份功能,但与 Google Docs 同时使用 Dropbox 存储的人有解决方案。

解决方案是cloudHQ (10$+/pm) 服务,它提供Google Docs 和 Dropbox 之间的实时同步。例如,当用户正在编辑一些 Google Docs 网络文档时,该文档会在 Dropbox 中自动修改。这意味着,cloudHQ 会自动将文件从 Google Docs 复制到 Dropbox。

我想建议以下链接到cloudHQ Quick TourCloudHQ还提供 Google Chrome 扩展。使用cloudHQ Chrome 浏览器扩展,您可以直接从 Google Docs 界面同步或复制 Dropbox 或 Basecamp 帐户中的任何内容与 Google Docs。扩展程序可在 Google Chrome 网上应用店中使用。

如果有人能给我一些关于云服务之间数据同步的提示或意见,我将不胜感激。

于 2012-03-13T13:23:43.877 回答
4

不涉及付费订阅的两种解决方案:1) 编写一个脚本或简短的应用程序(选择您的语言),使用Google Drive API将 Google 表格导出为 CSV。为什么是 Drive API?Sheets API用于面向电子表格的功能,即数据格式化、列调整大小、创建图表、单元格验证等,而 Drive API 用于面向文件的功能,即导入/导出。

如果您使用 Python,这里有一个完整的示例,您可以在服务器上作为 cron 作业运行,或者如果在Google App Engine上托管应用程序。如果不这样做,您可以将其用作伪代码并选择Google APIs Client Libraries支持的任何语言。这是该示例中的核心代码(假设最新的工作表名为“库存”):

FILENAME = 'inventory'
SRC_MIMETYPE = 'application/vnd.google-apps.spreadsheet'
DST_MIMETYPE = 'text/csv'

files = DRIVE.files().list(
    q='name="%s" and mimeType="%s"' % (FILENAME, SRC_MIMETYPE),
    orderBy='modifiedTime desc,name').execute().get('files', [])

if files:
    fn = '%s.csv' % os.path.splitext(files[0]['name'].replace(' ', '_'))[0]
    print('Exporting "%s" as "%s"... ' % (files[0]['name'], fn), end='')
    data = DRIVE.files().export(fileId=files[0]['id'], mimeType=DST_MIMETYPE).execute()
    if data:
        with open(fn, 'wb') as f:
            f.write(data)
        print('DONE')

如果您的工作表很大,您可能必须将其分块导出 - 请参阅此页面以了解如何执行操作。您还可以使用 Gmail API 将文件内容通过电子邮件发送给自己。如果您通常是 Google API 的新手,我为您准备了一个(有些过时但)用户友好的介绍视频。(之后有 2 个视频也可能有用。)

2) 另一种解决方案是针对那些对使用 API “过敏”的人,该替代方案是Google Apps Script,浏览器之外的 Javascript。与 Node 一样,它在服务器端运行,但在 Google 的服务器上。使用 Apps 脚本,您可以使用DriveApp高级 Drive 服务访问您的工作表,然后使用MailAppGmailApp将其通过电子邮件发送给您自己,或使用UrlFetch服务将其发送到您选择的某个服务器。要以正常间隔运行它,您需要创建一个脚本作为时间驱动的可安装触发器。在任何一种情况下,您都不需要自己托管+执行您的应用程序。

附言。最新的Drive API 版本v3,但如果您从 Apps 脚本访问 Drive,它使用v2(尚未弃用)。

于 2017-02-28T01:52:38.833 回答