web-dev-qa-db-ja.com

Google Sheet APIからcsvをエクスポートするにはどうすればよいですか?

RestAPIクライアントが既存のGoogleスプレッドシートをcsvファイルにエクスポートできるようにするAPIへの参照が見つかりません。

https://developers.google.com/sheets/

それらをエクスポートする方法があるはずだと思います。

9
user1447414

Drive APIを使用して、今日これを行うことができます https://developers.google.com/drive/v3/web/manage-downloads#downloading_google_documents を参照してください。ただし、最初の1つに制限されます。ドキュメントのシート。 Sheets APIは、現在CSVとしてエクスポートを公開していませんが、将来的に提供する可能性があります。

5
Sam Berlin

まず、誰でもドキュメントにアクセスできるようにする必要があります。次に、urlを取得します。このurlから、大小の文字と数字で構成される長いidを抽出する必要があります。次に、このスクリプトを使用します。

#!/bin/bash

long_id="id_assigned_to_your_document"
g_id="number_assigned_to_card_in_google_sheet"

wget --output-document=temp.csv "https://docs.google.com/spreadsheets/d/$long_id/export?gid=$g_id&format=csv&id=$long_id"

ドキュメントでカードを1枚だけ使用する場合、その番号は次のとおりです。g_id="0"

おそらく発生する問題は、取得したファイルのstrange spacesに関連しています。この2番目のスクリプトを使用して処理します

#!/bin/bash
#Delete all lines beginning with a # from a file
#http://stackoverflow.com/questions/8206280/delete-all-lines-beginning-with-a-from-a-file
sed '/^#/ d' temp.csv | 
# reomve spaces
# http://stackoverflow.com/questions/9953448/how-to-remove-all-white-spaces-from-a-given-text-file
tr -d "[:blank:]" |
# regexp "1,2" into 1.2
# http://www.funtoo.org/Sed_by_Example,_Part_2
sed 's/\"\([−]\?[0-9]*\),\([0-9]*\)\"/\1.\2/g' > out.csv

更新

サムが述べたように、APIはより良い解決策です。現在、住所に関する優れたドキュメントがあります。

https://developers.google.com/sheets/quickstart/php

CSV構造の出力を生成する例を示します。

3
Daniel

PHPに簡単にアクセスできない、またはPHPに精通していない場合は、これが非常に必要最低限​​のGoogle Apps Script Webアプリです。デプロイして発信者のアクセス許可を受け入れると、適切なスコープのアクセストークンまたはAPIキーを持つクライアントが既存のGoogleスプレッドシートをエクスポートできるようになりますcsvファイルに。 GoogleスプレッドシートのスプレッドシートIDとシート名(およびオプションのダウンロードファイル名)をクエリパラメータとして受け取り、対応する理論上RFC4180準拠のCSVファイルを返します。

Apps Scriptプロジェクトをウェブアプリとしてデプロイする方法の詳細については、こちらをご覧ください: https://developers.google.com/apps-script/guides/web#deploying_a_script_as_a_web_app

「現在のWebアプリのURL」(スクリプトエディターからWebアプリとして公開するときに提供される)にアクセスし、同意画面に同意するだけで、ブラウザーで簡単にデプロイしてテストできます。サンプルURLにデプロイしました(アクセスユーザーとして実行するように構成され、未確認/怖い同意)。

トリッキーな部分は(いつものように)OAuthトークンまたはAPIキーを設定することですが、すでにGoogle Sheets V4 APIを呼び出している場合は、おそらくすでにダイヤルインされています。 CURLを使用してREST api)として動作することを確認しましたが、OAuthトークンを取得するために使用した手法には、気が散ることと率直に言って混乱するのは本当に簡単なので、ここに含めるのは少し怖いです。まだ取得する方法がない場合は、別のSO質問の場合は、おそらく良いトピックです。

関連する(そして大きな!)警告の1つ:同意と検証が純粋なRestクライアントとどのように相互作用するか(つまり、最初にブラウザーでこれにアクセスしない場合にどのように機能するか...)、および/または、このスクリプトをSheetsAPIを使用する他のコードと同じGCPプロジェクトに含める必要があるかどうか。興味がある場合、および/または箱から出してすぐに機能しない場合は、お知らせください。喜んで深く掘り下げてフォローアップします。

// Example URL, assuming:
// "Current web app URL": https://script.google.com/a/tillerhq.com/macros/s/AKfycbyZlWAW6bpCpnFoPjbdjznDomFRbTNluG4siCBMgOy2qU2AGoA/exec
// spreadsheetId: 1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E
// sheet name: Sheet1
// (optional) filename: mycsv.csv
//
// https://script.google.com/a/tillerhq.com/macros/s/AKfycbyZlWAW6bpCpnFoPjbdjznDomFRbTNluG4siCBMgOy2qU2AGoA/exec?spreadsheetid=1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E&sheetname=Sheet1&filename=mycsv.csv?spreadsheetid=1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E&sheetname=Sheet1&filename=mycsv.csv
//


var REQUIRED_PARAMS = [
  'spreadsheetid', // example: "1xNDWJXOekpBBV2hPseQwCRR8Qs4LcLOcSLDadVqDA0E"
  'sheetname'      // Case-sensitive; example: "Sheet1"
];

// Returns an RFC 4180 compliant CSV for the specified sheet in the specified spreadsheet
function doGet(e) {

  REQUIRED_PARAMS.forEach(function(requiredParam) {
    if (!e.parameters[requiredParam]) throw new Error('Missing required parameter ' + requiredParam);
  });

  var spreadsheet = SpreadsheetApp.openById(e.parameters.spreadsheetid);
  var sheet = spreadsheet.getSheetByName(e.parameters.sheetname);
  if (!sheet) throw new Error("Could not find sheet " + e.parameters.sheetname + " in spreadsheet " + e.parameters.spreadsheetid);

  var filename = e.parameters.filename || (spreadsheet.getName() + "_" + e.parameters.sheetname + ".csv");


  var numRows = sheet.getLastRow();
  var numColumns = sheet.getLastColumn();

  var values = sheet.getSheetValues(1, 1, numRows, numColumns);

  function quote(s) {

    s = s.toString();

    if ((s.indexOf("\r") == -1)
       && (s.indexOf("\n") == -1)
       && (s.indexOf(",") == -1)
       && (s.indexOf("\"") == -1)) return s;

    // Fields containing line breaks (CRLF)*, double quotes, and commas should be enclosed in double-quotes;
    // anything other than that we already returned, so if we get here -- escape it and quote it.

    // *That's what the text of the RFC says, but the ABNF (...and Excel) treat EITHER CR or LF as requiring quotes.

    // Replace any double quote with a double double quote, and wrap the whole thing in quotes
    return "\"" + s.replace(/"/g, '""') + "\"";
  };

  var csv = values.map(function(row) {
    return row.map(quote).join();
  }).join("\r\n") + "\r\n";


  return ContentService
  .createTextOutput(csv)
  .setMimeType(ContentService.MimeType.CSV)
  .downloadAsFile(filename);
}
1
Timothy Johns

次のURLは、シートごとのGoogleスプレッドシートのCSVを示しています。シートは、一般の人、リンクを知っている人(非公開)がアクセスできる必要があります。

提供する必要のあるパラメーターは次のとおりです。

  • シートID(つまり、GoogleスプレッドシートのURLのID https://docs.google.com/spreadsheets/d/{{ID}}/edit
  • シート名(つまり、ユーザーが指定したシートの名前)
https://docs.google.com/spreadsheets/d/{{ID}}/gviz/tq?tqx=out:csv&sheet={{sheet_name}}

そのURLを使用すると、GETリクエストを開始してCSVを取得するだけです。または、ブラウザに貼り付けてください。

0
Overbryd