57

これが明白な質問である場合は申し訳ありませんが、私はまだ API にかなり慣れていません。Python ドライブ API ライブラリを使用しており、Google スプレッドシートを csv としてダウンロードしようとしています。
files.get を使用すると、downloadUrl がなく、エクスポート リンク フィールドに「text/csv」キーがないファイルが吐き出されました。
それが不可能な場合は、回避策を見つけることができますが、手動で行うことは可能であるため (file->download_as->csv)、そうであることを願っています。

Google ドキュメント リスト API を使用する必要がありますか?

ありがとう、マット

4

7 に答える 7

48

更新:スプレッドシート v4 API で動作する別の回答を投稿しました。

古い答え:

gid=parameterAlain からの回答は正しいですが、エクスポートするワークシートを指定するように設定する必要もあります。

たとえば、「application/pdf」エクスポート リンクが次のような場合:

docs.google.com/feeds/download/spreadsheets/Export?key=<FILE_ID>&exportFormat=pdf

これを次のように変更して、最初のワークシートをダウンロードできます。

docs.google.com/feeds/download/spreadsheets/Export?key<FILE_ID>&exportFormat=csv&gid=0

APIを介して特定のワークシートのgidを取得する信頼できる方法がなく、ゼロベースのインデックスではないため、少し問題があります。ワークシートを削除すると、その gid は再利用されません。ただし、ブラウザーの URL で gid を確認できるため、ワークシート情報が一定である場合は、そこから取得できます。http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=1813http://code.google.com/a/google.com/pをご覧くださいその問題の詳細については、 /apps-api-issues/issues/detail?id=3240をご覧ください。

于 2012-09-20T07:26:45.577 に答える
10

exportLinks コレクションは、スプレッドシートの最初のワークシートのみをエクスポートするため、CSV 形式を公開しません。最初のワークシートを CSV として取得することが目的の動作である場合は、リンクを手動で作成し、?exportFormat=クエリ パラメータを に設定できます?exportFormat=csv

于 2012-07-23T21:28:39.053 に答える
7

これが私のために働くアランの提案の実装です:

downloadUrl = entry.get('exportLinks')['application/pdf']
# Strip "=pdf" and replace with "=csv"
downloadUrl = downloadUrl[:-4] + "=csv"

resp, content = drive_service._http.request(downloadUrl)
于 2012-08-17T18:10:06.050 に答える
5

OPが必要としていたものかどうかはわかりませんが、新しいGoogle Sheetsバージョンでは、スプレッドシートのcsvバージョンをホットリンクするのが少し難しくなったようです.

csvスプレッドシート内のすべてのシートを個々のファイルにエクスポートする Google アプリ スクリプトに興味がある場合は(各シートを個別にダウンロードするのではなく)、次のようにします。

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var csvMenuEntries = [{name: "export as csv files", functionName: "saveAsCSV"}];
  ss.addMenu("csv", csvMenuEntries);
};

function saveAsCSV() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  // create a folder from the name of the spreadsheet
  var folder = DocsList.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
  for (var i = 0 ; i < sheets.length ; i++) {
    var sheet = sheets[i];
    // append ".csv" extension to the sheet name
    fileName = sheet.getName() + ".csv";
    // convert all available sheet data to csv format
    var csvFile = convertRangeToCsvFile_(fileName, sheet);
    // create a file in the Docs List with the given name and the csv data
    folder.createFile(fileName, csvFile);
  }
  Browser.msgBox('Files are waiting in a folder named ' + folder.getName());
}

function convertRangeToCsvFile_(csvFileName, sheet) {
  // get available data range in the spreadsheet
  var activeRange = sheet.getDataRange();
  try {
    var data = activeRange.getValues();
    var csvFile = undefined;

    // loop through the data in the range and build a string with the csv data
    if (data.length > 1) {
      var csv = "";
      for (var row = 0; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
          if (data[row][col].toString().indexOf(",") != -1) {
            data[row][col] = "\"" + data[row][col] + "\"";
          }
        }

        // join each row's columns
        // add a carriage return to end of each row, except for the last one
        if (row < data.length-1) {
          csv += data[row].join(",") + "\r\n";
        }
        else {
          csv += data[row];
        }
      }
      csvFile = csv;
    }
    return csvFile;
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}

: このスクリプトでは、Google Apps アカウントでのみ使用できる DocsList.createFile() メソッドを使用します。

さらに説明が必要な場合は、ここにアクセスしてください: http://drzon.net/export-all-google-sheets-to-csv/

于 2014-04-05T19:38:24.293 に答える
3

2015 年 4 月現在、DocsList は廃止され、DriveApp に置き換えられていることに注意してください。DriveApp メソッドの多くは DocsList と同じです。そのため、多くの場合、DocsList を DriveApp に置き換えるだけで済みます。そのため、DocsList.createFile() を DriveApp.createFile() に置き換えます。

私のコードで DocsList を DriveApp に更新する方法

于 2015-04-26T11:12:58.403 に答える