質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

解決済

GoogleスプレッドシートAPI【Java→Scala】への変換

igaramu
igaramu

総合スコア12

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

1回答

0リアクション

0クリップ

167閲覧

投稿2022/08/06 13:56

前提

趣味で開発しています。
Scalaを使ってGoogleスプレッドシートAPI使いたいです。

以下のサイトを参考に進行したのですが、エラーが出て進行できません。
(半年前は同じ内容で成功していたはずなのですが・・・、
今回改めて改良しようと再開したらエラーになりました。)

参考:https://labs.septeni.co.jp/entry/2017/11/20/093000
公式Doc:https://developers.google.com/sheets/api/quickstart/java

実現したいこと

スプレッドシートにListの内容を書き込みたい。

発生している問題・エラーメッセージ

shell

Exception in thread "main" java.lang.IllegalArgumentException: Can not set java.util.List field com.google.api.services.sheets.v4.model.ValueRange.values to scala.collection.convert.JavaCollectionWrappers$IterableWrapper at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) at java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)

該当のソースコード

エラーコードから、new ValueRangeにsetできない=valuesのListが原因だと思っております。

したがって、以前は成功していたことから、
API認証は完了し、スプレッドシートへのアクセスは完了している前提で、
以下のコードのみ掲示いたします。

scala

def write(): Unit = { val service = getSheetsService //書き込む対象のセルの範囲 val targetCell = "F1:F5" val sheet = "シート1" //rangeにはシート名と書き込むセルを指定 val range = s"${sheet}!${targetCell}" //JavaのList[List[Object]]に変換する必要がある val values = List( List("人口密度(人/k㎡)").asJava, List("4,400").asJava, List("9,500").asJava, List("12,100").asJava, List("15,300").asJava ).asJava val body = new ValueRange val requestBody = body.set("values", values) // ここが原因? val request = service.spreadsheets.values .update(spreadsheetId, range, requestBody) .setValueInputOption("USER_ENTERED") request.execute }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

igaramu

2022/08/08 04:39

自己解決しました。 以下のように`asJava`無しで普通に通りました。 ``` val values = Array( "人口密度(人/k㎡)", "4,400", "9,500", "12,100", "15,300" ) ```

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。