5

Google スプレッドシートの行を操作するアプリケーションがあります。ListEntry.update() を呼び出すと、次のスタック トレースが表示されることがあります。

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.google.gdata.util.PreconditionFailedException: Precondition Failed
Mismatch: etags = ["E10QemAgYit7ImA-CEFaShYM"], version = [2ag9hk74om621l]
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:614)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
at com.google.gdata.client.Service.update(Service.java:1563)
at com.google.gdata.client.Service.update(Service.java:1530)
at com.google.gdata.client.GoogleService.update(GoogleService.java:597)
at com.google.gdata.data.BaseEntry.update(BaseEntry.java:639)
at feedProcessor.ProcessClientFeed.UpdateRow(ProcessClientFeed.java:466)
at feedProcessor.ProcessClientFeed.updateGoogleSpreadsheet(ProcessClientFeed.java:404)
at feedProcessor.ProcessClientFeed.processFeed(ProcessClientFeed.java:318)
at feedProcessor.ProcessClientFeed.main(ProcessClientFeed.java:61)
... 5 more
4

2 に答える 2

4

関連するドキュメントは次のとおりです。

https://developers.google.com/gdata/javadoc/com/google/gdata/data/spreadsheet/ListEntry

https://developers.google.com/gdata/javadoc/com/google/gdata/data/BaseEntry#update()

これらのドキュメントによると、 update() 関数は PreconditionFailedException をスローすることさえできないため、ここではドキュメントは本質的に役に立ちません。この問題をテストしたところ、セッションで同じ行に対して update() 関数を複数回呼び出そうとすると、この例外がスローされることがわかりました。「セッション」を正確に定義するものはまだ不明ですが、すべての行を複数回ループし、各反復の各行で update() を呼び出すと、このエラーが発生します。私が知っている唯一の解決策は、各行 (ListEntry) で update() が 1 回だけ呼び出されるようにソフトウェアを作成することです。

于 2013-09-25T13:53:46.367 に答える
3

この問題は、Google Spreadsheet API Resource Versioning メカニズムが原因で発生します。

何があってもエントリを編集できるようにするには、次を使用します。

entry.setEtag("*")

更新前。

はい、これはマルチユーザーフレンドリーではありません。マルチユーザー サポートが必要な場合は、フィードを再取得してください。

于 2014-04-04T17:44:50.500 に答える