I am able to retrieve and update values in Google Sheets using the code below:
private void btnUpdate_Click(object sender, EventArgs e)
{
if (cbYards.Text == "Select Yard")
{
MessageBox.Show(@"Please select a yard.");
return;
}
UserCredential credential;
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
IList<IList<Object>> list = new List<IList<Object>>() { };
for (var i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
var formula = "=IFERROR(VLOOKUP(B"+(i+2)+",Names!$A$2:$B,2,FALSE),\"No Record\")";
List<object> lists = new List<object>() { formula, dataGridView1.Rows[i].Cells[0].Value.ToString(),
dataGridView1.Rows[i].Cells[1].Value.ToString() };
list.Add(lists);
}
var range = cbYards.Text+"!A2:C";
ValueRange VRange = new ValueRange();
VRange.Range = range;
VRange.Values = list;
//ValueRange response = request.Execute();
ValueRange valueRange = new ValueRange();
valueRange.MajorDimension = "COLUMNS";
SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.Values.Update(VRange, spreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
UpdateValuesResponse response = upd.Execute();
}
My question is how can I create a new Sheet in the Google Sheet that I am currently using. I thought that all I need to do is replace the
SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.Values.Update(VRange, spreadsheetId, range);
to
SpreadsheetsResource.ValuesResource.UpdateRequest upd = service.Spreadsheets.create();
but apparently it is wrong...
I can't understand how to implement the instructions in the documentation at Method: spreadsheets.create
What does the JSon have do with how I will be coding in C#? Really appreciate the help.
UPDATE I found this here but it is not complete since it is still giving me an error of
Additional information: Object reference not set to an instance of an object.
This is the updated code:
private void button1_Click(object sender, EventArgs e)
{
UserCredential credential;
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
string sheetName = string.Format("{0} - {1}-{2}", cbYards.Text, fromDate.Value.ToShortDateString(), toDate.Value.ToShortDateString());
var myNewSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
myNewSheet.Properties = new SpreadsheetProperties();
myNewSheet.Properties.Title = sheetName;
var newSheet = service.Spreadsheets.Create(myNewSheet).Execute();
}
To copy and paste cells: Press Ctrl+C (Windows) or Command+C (Mac) on your keyboard to copy the cells. Select the cell or cells where you want to paste the cells. The copied cells will now have a box around them.
Create or open a spreadsheet in Google Sheets. At the top, click Add-ons > Get add-ons. Once the Google Workspace Marketplace opens, click the search box in the top right corner. Type "custom function" and press Enter.
Using Google app script you can create a new spreadsheet by executing the script. Page open up with Untitled project and my function() as a default function. Double click the “Untitled project displayed at the top left of the page and give a Project name as you wish.
There's also a link to Google Forms in Docs, Sheets, and Slides: click File > New > Form to start a new blank form. Or, in Google Sheets, click Tools > Create a Form to start a blank new form that's automatically linked to that spreadsheet.
There is a method in the client library for create you just need to pass it the new sheet object. Don't forget to instantiate the Properties before assigning the title (line 2 below)
var myNewSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
myNewSheet.Properties = new SpreadsheetProperties();
myNewSheet.Properties.Title = "Daimtos awsom sheet";
var awsomNewSheet= service.Spreadsheets.Create(myNewSheet).Execute();
Note: I agree with you that documentation page is useless.
The reason why you get a null reference is because you can't have a spreadsheet without a sheet in it.
var myNewSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
myNewSheet.Properties = new SpreadsheetProperties();
myNewSheet.Properties.Title = sheetName;
var sheet = new Sheet();
sheet.Properties = new SheetProperties();
sheet.Properties.Title = "Sheet1";
myNewSheet.Properties.Sheets = new List<Sheet>() { sheet };
var newSheet = service.Spreadsheets.Create(myNewSheet).Execute();
The following piece of code is working on my side:
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With