4

私はこれを忘れてしまった。私はJavaをGoogleのスプレッドシートに接続しようとしていますが、APIのドキュメントはデータを取得するのに完全ですが、正常に動作していますが、スプレッドシートに書き込む方法を理解できません。Googleスプレッドシート(​​Java付き)にデータを書き込む

は、(たとえば、シート1のA1セルに「ASDF」と入力します)Googleスプレッドシートに非常に単純なデータ入力を行う方法で(必要に応じて輸入し、すべてを)フル例を誰も提供していただけますか?

このようなチュートリアルがどこかに存在すると、私はそれを見つけることができませんでした。

はジョルト

+0

[最初の結果](https://developers.google.com/google-apps/spreadsheets/)セルを書き出す方法についての情報があるようです。 – CodeChimp

+0

API/Java DOCSを調べてください。あなたは – JavaHopper

+0

CodeChimpを理解することができます。あなたはレガシーコードにリンクしています。私は、現在の最新のバージョンの作業例に興味があります。ありがとうございました –

答えて

1

XmlHttpRequestの要求の使用を確認し、非常に多くの 、ありがとうございました。

実際にGoogleスプレッドシートに書き込むデモをご紹介します。次に、あなたの好みの言語であるJavaを使用して、ここで概念を適用します。

  1. 書き込みするGoogleスプレッドシートを開きます。それはoauth playgroundスプレッドシートID
  2. ゴーのgetとhttps://www.googleapis.com/auth/drive許可を選択してくださいGoogleスプレッドシートAPI V4に
  3. をナビゲートします。 APIの承認をクリックします。許可を許可します。
  4. ステップ2で、トークンのExchange認証コードボタンを押します。
  5. ステップ3で、リクエストURIにこれを貼り付けます!?

    https://sheets.googleapis.com/v4/spreadsheets/ {SpreadsheetID} /値/シート1 A1 valueInputOption = USER_ENTERED

HTTPメソッドPUTあります。

場所これはあなたの入力リクエストボディ

{ 
    "range":"Sheet1!A1", 
    "majorDimension": "ROWS", 
    "values": [ 
    ["Hello World"] 
    ], 
} 

クリック内の要求を送信します。回答が200 OKになる場合は、スプレッドシートのA1セルに "Hello World"と記入してください。 writing data in Sheets v4 hereについて詳しく読むことができます。

Javaでこれを行う方法は? JavaでのAJAXまたはXHRの実装について学んでください。 this tutorialをチェックしてください。

8

OK、それは最終的にそれを理解するのに数時間かかりました。その答えは、最初からAjaxリクエストを作成するより簡単です。他の人の時間と時間を節約するために、ここでは私のために働いた解決策があります。

前提条件:テーブルから読み込むには、Quickstart tutorial of the Google Sheets APIを使用しましたが、これはかなり複雑ですが、うまく機能しました。私は明白な理由のために

private static final List<String> SCOPES = 
     Arrays.asList(SheetsScopes.SPREADSHEETS); 

にライン

private static final List<String> SCOPES = 
     Arrays.asList(SheetsScopes.SPREADSHEETS_READONLY); 

を変更、

1かかわらず、いくつかのことを修正するために必要なチュートリアルの後

(私たちが書きたいとテーブルだけでなく、それを読んでください。

2、そこ

spreadsheets.values.update() 

と呼ばれる方法であると表示されますが、それがためにvalueInputOptionパラメータを必要とする私は、その作業を取得できませんでした:

つ以上のノート/.credentials/というフォルダ内ウルユーザディレクトリ検索の時間が十分であると証明されていないため、誰が設定できるのかを見つけることができませんでした。

だから、最終的に、私はここで

spreadsheets.values.batchUpdate() 

と呼ばれる方式になってしまった

は輸入品のためとして、私は同じを使用(私のために表のセルに"Hello World!"を書くのトリックをしたコードの完全な方法です上記のクイックスタートチュートリアル)に:

void WriteExample() throws IOException { 
    Sheets service = getSheetsService(); 
    List<Request> requests = new ArrayList<>(); 

     List<CellData> values = new ArrayList<>(); 


     values.add(new CellData() 
       .setUserEnteredValue(new ExtendedValue() 
         .setStringValue("Hello World!"))); 
     requests.add(new Request() 
       .setUpdateCells(new UpdateCellsRequest() 
         .setStart(new GridCoordinate() 
           .setSheetId(0) 
           .setRowIndex(0) 
           .setColumnIndex(0)) 
         .setRows(Arrays.asList(
           new RowData().setValues(values))) 
         .setFields("userEnteredValue,userEnteredFormat.backgroundColor"))); 

     BatchUpdateSpreadsheetRequest batchUpdateRequest = new BatchUpdateSpreadsheetRequest() 
       .setRequests(requests); 
     service.spreadsheets().batchUpdate(spreadsheetId, batchUpdateRequest) 
       .execute(); 
    } 

SheetIdは、あなたが書いているワークシートのIDである(それは常に一定spreadheetの最初のワークシートのために0である、あなたは他の人のためのURLからそれを得ることができます。それは後の部分です#gid=

書式設定や数式を使用するなど、さらに複雑になりたい場合は、この場合はJava example provided hereを使用できます。

ここ ジョルト

10

、それがお役に立てば幸いですが、書き込みを実行するために、クイックスタートチュートリアルコードの修正版です。

import com.google.api.client.auth.oauth2.Credential; 
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; 
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; 
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; 
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; 
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.client.util.store.FileDataStoreFactory; 
import com.google.api.services.sheets.v4.Sheets; 
import com.google.api.services.sheets.v4.SheetsScopes; 
import com.google.api.services.sheets.v4.model.ValueRange; 
import java.io.*; 
import java.util.*; 

public class SheetsIntegration { 

    private static HttpTransport transport; 
    private static JacksonFactory jsonFactory; 
    private static FileDataStoreFactory dataStoreFactory; 

私はこのラインでの警告の権限を取得し、それはあなたがよ、

private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/sheets.googleapis.com.json"); 

クイックスタートチュートリアルでは、クイックスタートチュートリアルごとの読み取り専用スコープ代わり

private static List<String> scopes = Arrays.asList(SheetsScopes.SPREADSHEETS); 

    public SheetsIntegration() { 
     try { 
      transport = GoogleNetHttpTransport.newTrustedTransport(); 
      dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); 
      jsonFactory = JacksonFactory.getDefaultInstance(); 

      service = getSheetsService(); 
     } catch (Exception e) { 
      // handle exception 
     } 
    } 

を使用して致命的ではありませんGoogleから証明書ファイルをダウンロードする必要があります。

public static Credential authorize() throws IOException { 
    // Load client secrets. 
    File cfile = new File("certs/cert.json"); 
    cfile.createNewFile(); 
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(new FileInputStream(cfile))); 

    // Build flow and trigger user authorization request. 
    GoogleAuthorizationCodeFlow flow = 
      new GoogleAuthorizationCodeFlow.Builder(
        transport, jsonFactory, clientSecrets, scopes) 
        .setDataStoreFactory(dataStoreFactory) 
        .setAccessType("offline") 
        .build(); 
    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); 
    return credential; 
} 

public static Sheets getSheetsService() throws IOException { 
    Credential credential = authorize(); 
    return new Sheets.Builder(transport, jsonFactory, credential) 
      .setApplicationName("INSERT_YOUR_APPLICATION_NAME") 
      .build(); 
} 

public void writeSomething(List<Data> myData) { 

    try { 
     String id = "INSERT_SHEET_ID"; 
     String writeRange = "INSERT_SHEET_NAME!A3:E"; 

     List<List<Object>> writeData = new ArrayList<>(); 
     for (Data someData: myData) { 
      List<Object> dataRow = new ArrayList<>(); 
      dataRow.add(someData.data1); 
      dataRow.add(someData.data2); 
      dataRow.add(someData.data3); 
      dataRow.add(someData.data4); 
      dataRow.add(someData.data5); 
      writeData.add(dataRow); 
     } 

     ValueRange vr = new ValueRange().setValues(writeData).setMajorDimension("ROWS"); 
     service.spreadsheets().values() 
       .update(id, writeRange, vr) 
       .setValueInputOption("RAW") 
       .execute(); 
    } catch (Exception e) { 
     // handle exception 
    } 
} 

もう一つの注目すべき - 私は私のプロジェクトにサーブレット-api.jarとを追加する必要がありました。

関連する問題