SQL Server
SQL Server
Google Sheets - Update (Set Values in a Range)
See more Google Sheets Examples
Sets values in a range of a spreadsheet. This example will demonstrate by first getting a range, then changing some values in the JSON, and then HTTPS PUT the changes back to the Google Sheet.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- This example uses a previously obtained access token having permission for the
-- Google Sheets scope.
-- In this example, Get Google Sheets OAuth2 Access Token, the access
-- token was saved to a JSON file. This example fetches the access token from the file..
DECLARE @jsonToken int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonToken OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @jsonToken, 'LoadFile', @success OUT, 'qa_data/tokens/googleSheets.json'
EXEC sp_OAMethod @jsonToken, 'HasMember', @iTmp0 OUT, 'access_token'
IF @iTmp0 = 0
BEGIN
PRINT 'No access token found.'
EXEC @hr = sp_OADestroy @jsonToken
RETURN
END
DECLARE @http int
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
EXEC sp_OAMethod @jsonToken, 'StringOf', @sTmp0 OUT, 'access_token'
EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0
-- First get the cells in the range A1:B5
EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'range', 'Sheet1!A1:B5'
EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'spreadsheetId', '1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA'
DECLARE @jsonResponse nvarchar(4000)
EXEC sp_OAMethod @http, 'QuickGetStr', @jsonResponse OUT, 'https://sheets.googleapis.com/v4/spreadsheets/{$spreadsheetId}/values/{$range}'
EXEC sp_OAGetProperty @http, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
RETURN
END
PRINT @jsonResponse
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
EXEC sp_OASetProperty @json, 'EmitCompact', 0
EXEC sp_OAMethod @json, 'Load', @success OUT, @jsonResponse
-- A sample response is shown below.
-- {
-- "range": "Sheet1!A1:B5",
-- "majorDimension": "ROWS",
-- "values": [
-- [
-- "Item",
-- "Cost"
-- ],
-- [
-- "Wheel",
-- "$20.50"
-- ],
-- [
-- "Door",
-- "$15"
-- ],
-- [
-- "Engine",
-- "$100"
-- ],
-- [
-- "Totals",
-- "$135.50"
-- ]
-- ]
-- }
-- We're going to change the cost of the Engine to $120, and the Totals to $155.50
EXEC sp_OASetProperty @json, 'I', 3
EXEC sp_OASetProperty @json, 'J', 1
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'values[i][j]', '$120'
EXEC sp_OASetProperty @json, 'I', 4
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'values[i][j]', '$155.50'
-- Show the updated JSON.
EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT
PRINT @sTmp0
-- Update the Google Sheet using a PUT request.
EXEC sp_OASetProperty @json, 'EmitCompact', 1
DECLARE @urlToUpdate nvarchar(4000)
SELECT @urlToUpdate = 'https://sheets.googleapis.com/v4/spreadsheets/{$spreadsheetId}/values/{$range}?valueInputOption=USER_ENTERED'
DECLARE @xyz nvarchar(4000)
EXEC sp_OAMethod @http, 'QuickGetStr', @xyz OUT, @urlToUpdate
DECLARE @resp int
EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT
EXEC sp_OAMethod @http, 'HttpJson', @success OUT, 'PUT', @urlToUpdate, @json, 'application/json', @resp
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @resp
RETURN
END
-- Examine the response..
EXEC sp_OAGetProperty @resp, 'StatusCode', @iTmp0 OUT
PRINT 'response status code = ' + @iTmp0
PRINT 'response body:'
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
PRINT @sTmp0
-- A sample response body:
-- {
-- "spreadsheetId": "1_SO2L-Y6nCayNpNppJLF0r9yHB2UnaCleGCKeE4O0SA",
-- "updatedRange": "Sheet1!A1:B5",
-- "updatedRows": 5,
-- "updatedColumns": 2,
-- "updatedCells": 10
-- }
EXEC @hr = sp_OADestroy @jsonToken
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @json
EXEC @hr = sp_OADestroy @resp
END
GO