// Inserts rows range into the existing sheet internal static void InsertRowsSync(this SheetsService sheetsService, string spreadsheetId, string sheetTitleId, int?sheetId, int columnCount, int toBeInsertedTopRowIndex, int toBeInsertedRowCount, IList <IList <object> > newRowsData) { // Wait for google apis request quota availability. SessionRequestsLimiter.Instance.Wait(); // Obtain appropriate insert row batch request. SpreadsheetsResource.BatchUpdateRequest insertRowsRequest = GoogleServicesExtensionsRequestsFactory.GetInsertRowsRequest(sheetsService, spreadsheetId, sheetId, toBeInsertedTopRowIndex, toBeInsertedRowCount); // Execute insert sheet rows request in safe synchronous manner. RequestsExecutor.SafeExecuteSync <BatchUpdateSpreadsheetResponse>(insertRowsRequest); // If new rows data haven't been provided if (!(newRowsData is null)) { // Obtain new rows range string. string newRowsRangeString = RangeTranslator.GetRangeString(sheetTitleId, 0, toBeInsertedTopRowIndex, columnCount, toBeInsertedRowCount); // Fills inserted rows with provided data. sheetsService.UpdateRangeDataSync(spreadsheetId, newRowsRangeString, newRowsData); } }