I\'ve been using Google Sheets API, and following The Google Guide. However there is no example, even beyond the second page of google, to add a worksheet and write to a new she
Further extending Sam's answer. The following gets me to update a cell.
ValueRange VRx = new ValueRange();
IList<IList<object>> xx = new List<IList<object>>();
xx.Add(new List<object> { "test" });
VRx.Values = xx;
SpreadsheetsResource.ValuesResource.UpdateRequest update = service.Spreadsheets.Values.Update(VRx, spreadsheetId, "back!A19");
update.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;
UpdateValuesResponse result = update.Execute();
Hope this helps!
I have the code to add a sheet as well, but it seems like you figured it out. Here is some code to add content to the sheet. It differs from what others have posted by a little bit, but it should help whoever sees this post.
In this code, it would insert the values of colNames into the row starting at (0,0). So if sheet uses this notation (row, col), then
(0,0)=timestamp
(0,1)=videoid
(0,2)=videoname
(0,3)=firstname
(0,4)=lastname
(0,5)=email
So the whole first row would be filled with the colNames values
var reqs = new BatchUpdateSpreadsheetRequest();
reqs.Requests = new List<Request>();
string[] colNames = new [] { "timestamp", "videoid", "videoname", "firstname", "lastname", "email" };
// Create starting coordinate where data would be written to
GridCoordinate gc = new GridCoordinate();
gc.ColumnIndex = 0;
gc.RowIndex = 0;
gc.SheetId = SHEETID; // Your specific sheet ID here
rq = new Request();
rq.UpdateCells = new UpdateCellsRequest();
rq.UpdateCells.Start = gc;
rq.UpdateCells.Fields = "*"; // needed by API, throws error if null
// Assigning data to cells
RowData rd = new RowData();
List<CellData> lcd = new List<CellData>();
foreach (String column in colNames)
{
ExtendedValue ev = new ExtendedValue();
ev.StringValue = column;
CellData cd = new CellData();
cd.UserEnteredValue = ev;
lcd.Add(cd);
}
rd.Values = lcd;
// Put cell data into a row
List<RowData> lrd = new List<RowData>();
lrd.Add(rd);
rq.UpdateCells.Rows = lrd;
// It's a batch request so you can create more than one request and send them all in one batch. Just use reqs.Requests.Add() to add additional requests for the same spreadsheet
reqs.Requests.Add(rq);
// Execute request
response = sheetsService.Spreadsheets.BatchUpdate(reqs, Spreadsheet.SpreadsheetId).Execute(); // Replace Spreadsheet.SpreadsheetId with your recently created spreadsheet ID
To save someone in the future a headache to end all headaches. I figured out how to add a sheet after hours of trial and error. Still working on how to update values.
Here's how I did it:
// Create Google Sheets API service.
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Add new Sheet
string sheetName = string.Format("{0} {1}", DateTime.Now.Month, DateTime.Now.Day);
var addSheetRequest = new AddSheetRequest();
addSheetRequest.Properties = new SheetProperties();
addSheetRequest.Properties.Title = sheetName;
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
batchUpdateSpreadsheetRequest.Requests = new List<Request>();
batchUpdateSpreadsheetRequest.Requests.Add(new Request
{
AddSheet = addSheetRequest
});
var batchUpdateRequest =
service.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, spreadsheetId);
batchUpdateRequest.Execute();
FYI, while the majority of the documentation is just using the raw JSON, it should map 1:1 to the constructs in each language.
For example, to update values you'd likely do something like:
var valueRange = new ValueRange();
valueRange.values = { { 1, 2, 3 }, { 4, 5, 6 } };
var range = "A1";
var update = service.Spreadsheets.Values.Update(valueRange, spreadsheetId, range);
var result = update.execute();
The above is pseudo-code based on your code example and the reference docs @ https://developers.google.com/sheets/reference/rest/v4/spreadsheets.values/update.
I was looking for the Java version of this and I managed to get a working version based on sparky's answer. This should work:
//Set sheet name
//Can be any string, I chose to set it to the account name
String sheetName = mCredential.getSelectedAccountName();
//Create a new AddSheetRequest
AddSheetRequest addSheetRequest = new AddSheetRequest();
SheetProperties sheetProperties = new SheetProperties();
//Add the sheetName to the sheetProperties
addSheetRequest.setProperties(sheetProperties);
addSheetRequest.setProperties(sheetProperties.setTitle(sheetName));
//Create batchUpdateSpreadsheetRequest
BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
//Create requestList and set it on the batchUpdateSpreadsheetRequest
List<Request> requestsList = new ArrayList<Request>();
batchUpdateSpreadsheetRequest.setRequests(requestsList);
//Create a new request with containing the addSheetRequest and add it to the requestList
Request request = new Request();
request.setAddSheet(addSheetRequest);
requestsList.add(request);
//Add the requestList to the batchUpdateSpreadsheetRequest
batchUpdateSpreadsheetRequest.setRequests(requestsList);
//Call the sheets API to execute the batchUpdate
mService.spreadsheets().batchUpdate(spreadsheetId,batchUpdateSpreadsheetRequest).execute();