.NETプログラムからGoogleドキュメントにアクセスするライブラリを使ってみました。
Google CodeからGoogle Data API Setupをダウンロードしてインストールします。
開発環境から.NETのプロジェクトを作成し、
(インストールパス)\Google\Google Data API SDK\RedistにあるマネージDLLを参照に追加します。
今回はとりあえず以下のDLLを使ってみます。
Google.GData.Client
Google.GData.Documents
Google.GData.Spreadsheets
以下はスプレッドシートを開くコードです。
# "Spread sheet Title"が開くドキュメント名です。
Dim ssrv As New SpreadsheetsService("hoge-service")
Google CodeからGoogle Data API Setupをダウンロードしてインストールします。
開発環境から.NETのプロジェクトを作成し、
(インストールパス)\Google\Google Data API SDK\RedistにあるマネージDLLを参照に追加します。
今回はとりあえず以下のDLLを使ってみます。
Google.GData.Client
Google.GData.Documents
Google.GData.Spreadsheets
以下はスプレッドシートを開くコードです。
# "Spread sheet Title"が開くドキュメント名です。
Dim ssrv As New SpreadsheetsService("hoge-service")
Dim sq As New SpreadsheetQuery()
ssrv.setUserCredentials(mUserName, mPassword)
sq.Title = "Spread sheet Title" ' 検索対象のスプレッドシート名
Dim feed As SpreadsheetFeed = ssrv.Query(sq)
If 0 < feed.Entries.Count Then
Dim ss As SpreadsheetEntry = CType(feed.Entries(0), SpreadsheetEntry)
End If
ssrv.setUserCredentials(mUserName, mPassword)
sq.Title = "Spread sheet Title" ' 検索対象のスプレッドシート名
Dim feed As SpreadsheetFeed = ssrv.Query(sq)
If 0 < feed.Entries.Count Then
Dim ss As SpreadsheetEntry = CType(feed.Entries(0), SpreadsheetEntry)
End If
これでスプレッドシートへの参照が取得できました。
次にシートの中のセルを更新してみます。
Protected Overrides Sub UpdateSheet( _
ByVal srv As SpreadsheetsService, _
ByVal ss As SpreadsheetEntry)
Dim sq As New SpreadsheetQuery()
If ss.Worksheets.Entries.Count = 0 Then Return
Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)
' ワークシート上から範囲にあるセルの集合を取得します
Dim cq As New CellQuery(ws.CellFeedLink)
cq.Range = "A1:C3" ' セル範囲
cq.ReturnEmpty = ReturnEmptyCells.yes ' 空のセルも列挙する
Dim ce As CellFeed = srv.Query(cq)
For i As Integer = 0 To ce.Entries.Count - 1
Dim cell As CellEntry = CType(ce.Entries(i), CellEntry)
' セルの値を表示
If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)
End If
' 値を変更して更新
cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.Update()
Next
End Sub
上記コードはセルごとにUpdateしています。
Updateメソッドで毎回POST送信するため、いくつものセルを一括更新するには向きません。
そのような場合にはバッチ更新を使います。
Protected Overrides Sub UpdateSheet( _
ByVal srv As SpreadsheetsService, _
ByVal ss As SpreadsheetEntry)
Dim sq As New SpreadsheetQuery()
If ss.Worksheets.Entries.Count = 0 Then Return
Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)
Dim cq As New CellQuery(ws.CellFeedLink)
cq.Range = "A1:C3"
cq.ReturnEmpty = ReturnEmptyCells.yes
Dim ce As CellFeed = srv.Query(cq)
' 更新バッチ作成
Dim updateCells As CellFeed = ws.QueryCellFeed()
Dim batch As New GDataBatchEntryData(GDataBatchOperationType.update)
Dim batchFeed As AtomFeed = New AtomFeed(updateCells)
For Each cell As CellEntry In ce.Entries
If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)
End If
cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.BatchData = batch
batchFeed.Entries.Add(cell)
Next
' バッチ実行
Dim rseult As CellFeed = CType(srv.Batch(batchFeed, New Uri(updateCells.Batch)), CellFeed)
For Each entry As CellEntry In rseult.Entries
If entry.BatchData.Status.Code <> 200 Then
Throw New Exception("Cell update for " + entry.BatchData.Id + " failed!")
ByVal ss As SpreadsheetEntry)
Dim sq As New SpreadsheetQuery()
If ss.Worksheets.Entries.Count = 0 Then Return
Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)
' ワークシート上から範囲にあるセルの集合を取得します
Dim cq As New CellQuery(ws.CellFeedLink)
cq.Range = "A1:C3" ' セル範囲
cq.ReturnEmpty = ReturnEmptyCells.yes ' 空のセルも列挙する
Dim ce As CellFeed = srv.Query(cq)
For i As Integer = 0 To ce.Entries.Count - 1
Dim cell As CellEntry = CType(ce.Entries(i), CellEntry)
' セルの値を表示
If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)
End If
' 値を変更して更新
cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.Update()
Next
End Sub
上記コードはセルごとにUpdateしています。
Updateメソッドで毎回POST送信するため、いくつものセルを一括更新するには向きません。
そのような場合にはバッチ更新を使います。
Protected Overrides Sub UpdateSheet( _
ByVal srv As SpreadsheetsService, _
ByVal ss As SpreadsheetEntry)
Dim sq As New SpreadsheetQuery()
If ss.Worksheets.Entries.Count = 0 Then Return
Dim ws As WorksheetEntry = CType(ss.Worksheets.Entries(0), WorksheetEntry)
Dim cq As New CellQuery(ws.CellFeedLink)
cq.Range = "A1:C3"
cq.ReturnEmpty = ReturnEmptyCells.yes
Dim ce As CellFeed = srv.Query(cq)
' 更新バッチ作成
Dim updateCells As CellFeed = ws.QueryCellFeed()
Dim batch As New GDataBatchEntryData(GDataBatchOperationType.update)
Dim batchFeed As AtomFeed = New AtomFeed(updateCells)
For Each cell As CellEntry In ce.Entries
If cell.Value IsNot Nothing Then
MsgBox(cell.Value.ToString)
End If
cell.InputValue = "セル(" & cell.Column.ToString & "," & cell.Row.ToString & ")"
cell.BatchData = batch
batchFeed.Entries.Add(cell)
Next
' バッチ実行
Dim rseult As CellFeed = CType(srv.Batch(batchFeed, New Uri(updateCells.Batch)), CellFeed)
For Each entry As CellEntry In rseult.Entries
If entry.BatchData.Status.Code <> 200 Then
Throw New Exception("Cell update for " + entry.BatchData.Id + " failed!")