예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="spreadsheetId"></param>
        /// <param name="sheetTitle"></param>
        /// <param name="headers"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public async Task <BatchUpdateValuesResponse> BatchUpdateAsync(string spreadsheetId, string sheetTitle, List <IList <object> > headers, List <IList <object> > data)
        {
            // How the input data should be interpreted.
            const string valueInputOption = "USER_ENTERED";

            var headerRange = CalculateCellRange(headers, "A", 1);
            var dataRange   = CalculateCellRange(data, "A", 2);
            // The new values to apply to the spreadsheet.
            var reqData = new List <ValueRange>
            {
                new ValueRange
                {
                    Range  = $"{sheetTitle}!{headerRange}",
                    Values = headers
                },
                new ValueRange
                {
                    Range  = $"{sheetTitle}!{dataRange}",
                    Values = data
                }
            };

            var requestBody = new BatchUpdateValuesRequest
            {
                ValueInputOption        = valueInputOption,
                IncludeValuesInResponse = true,
                Data = reqData
            };

            SpreadsheetsResource.ValuesResource.BatchUpdateRequest batchUpdateRequest = _sheetsService.Spreadsheets.Values.BatchUpdate(requestBody, spreadsheetId);

            BatchUpdateValuesResponse batchUpdateResponse = await batchUpdateRequest.ExecuteAsync();

            return(batchUpdateResponse);
        }
예제 #2
0
        public static string UpdateData(List <IList <object> > data)
        {
            String range            = "Page1!A1";
            string valueInputOption = "USER_ENTERED";

            // The new values to apply to the spreadsheet.
            List <ValueRange> updateData = new List <ValueRange>();
            var dataValueRange           = new ValueRange();

            dataValueRange.Range  = range;
            dataValueRange.Values = data;
            updateData.Add(dataValueRange);

            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            requestBody.ValueInputOption = valueInputOption;
            requestBody.Data             = updateData;

            var request = service.Spreadsheets.Values.BatchUpdate(requestBody, spreadSheetId);

            BatchUpdateValuesResponse response = request.Execute();

            // Data.BatchUpdateValuesResponse response = await request.ExecuteAsync(); // For async

            return(JsonConvert.SerializeObject(response));
        }
        public void PrintRequestBodyData(BatchUpdateValuesRequest requestBody)
        {
            // Count = 1;
            IList <ValueRange> requestBodyData = requestBody.Data;

            C.WriteLine();
            _helpers.Spotlight("DATA TO BE ADDED");
            C.WriteLine("-------------------------------------------------------");

            foreach (ValueRange vR in requestBodyData)
            {
                // listOfLists: System.Collections.Generic.List`1[System.Collections.Generic.IList`1[System.Object]]
                // count = the # of lists within the listOfLists
                IList <IList <object> > listOfLists = vR.Values;

                int listCount = 1;
                // list: System.Collections.Generic.List`1[System.Object]
                foreach (IList <object> list in listOfLists)
                {
                    C.WriteLine($"LIST: {listCount}");

                    int dataCounter = 1;
                    foreach (object data in list)
                    {
                        C.WriteLine($"{dataCounter}. {data}");
                        dataCounter++;
                    }
                    C.WriteLine();
                    listCount++;
                }
            }
            C.WriteLine($"-------------------------------------------------------\n");
        }
예제 #4
0
        // Updates data in a specified range.
        internal static SpreadsheetsResource.ValuesResource.BatchUpdateRequest GetUpdateRangeDataRequest(SheetsService sheetsService, string spreadsheetId, string rangeString, IList <IList <object> > rangeData)
        {
            // Declare update data list.
            List <ValueRange> data = new List <ValueRange>();

            // Construct new instance of ValueRange.
            ValueRange valueRange = new ValueRange();

            // Assign value range locations/dimensions coordinates.
            valueRange.Range = rangeString;

            // Assign rangeData to update.
            valueRange.Values = rangeData;

            // Add value range to data list.
            data.Add(valueRange);

            // Build google apis request body.
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            // Set request body value input option - "RAW" or "USER_ENTERED"
            requestBody.ValueInputOption = "RAW";

            // Assign data into the request body.
            requestBody.Data = data;

            // Construct and return google apis request based on the constructed request body for the spreadsheet specified with the provided spreadsheet id.
            return(sheetsService.Spreadsheets.Values.BatchUpdate(requestBody, spreadsheetId));
        }
예제 #5
0
        /// <summary>
        /// Update a value of the spread sheet
        /// </summary>
        /// <param name="value">values to be set</param>
        /// <param name="range">place to setit</param>
        /// <returns></returns>
        public static BatchUpdateValuesResponse updateValue(string value, string range)
        {
            IList <IList <Object> > values = new List <IList <object> >
            {
                new List <object>()
            };

            values[0].Add(value);
            ValueRange body = new ValueRange()
            {
                Values = values
            };


            List <ValueRange> ranges = new List <ValueRange>();

            ranges.Add(new ValueRange()
            {
                Range = range, Values = values
            });

            BatchUpdateValuesRequest body2 = new BatchUpdateValuesRequest();

            body2.Data             = ranges;
            body2.ValueInputOption = "USER_ENTERED";

            return(Service.Spreadsheets.Values.BatchUpdate(body2, info.SheetId).Execute());
        }
        private async Task UpdateSheet(IList <ValueRange> valueRanges)
        {
            try
            {
                foreach (var item in valueRanges)
                {
                    item.Range = "A5:G2000";
                }

                var requestBody = new BatchUpdateValuesRequest
                {
                    ValueInputOption = "USER_ENTERED",
                    Data             = valueRanges
                };

                var request = Service.Spreadsheets.Values.BatchUpdate(requestBody, SheetId);


                await request.ExecuteAsync(Cts.Token).ConfigureAwait(false);
            }
            catch (TaskCanceledException tce)
            {
                if (!Cts.IsCancellationRequested)
                {
                    Logger.Warn(tce);
                }
            }
            catch (Exception e)
            {
                if (e is GoogleApiException gae && gae.Error?.Code == 429)
                {
                    Logger.Warn(gae, "Too many Google Api requests. Cooling down.");
                    await Task.Delay(5000, Cts.Token).ConfigureAwait(false);
                }
예제 #7
0
        // Очистка старых записей(если количество БД на сервере уменьшилось, лишние строки в таблице должны быть удалены) и публикация новых.
        public async Task UpdateSpreadSheetAsync(Dictionary <string, List <DbSize> > serverInfoCollection)
        {
            BatchClearValuesRequest clearRequest = new BatchClearValuesRequest();

            clearRequest.Ranges = new List <string>();
            foreach (var server in serverInfoCollection)
            {
                clearRequest.Ranges.Add($"{server.Key}!A2:D50");
            }
            // Асинхронно запускаем очистку таблицы
            var clearTask = _service.Spreadsheets.Values.BatchClear(clearRequest, _spreadSheetId).ExecuteAsync();

            BatchUpdateValuesRequest addRequest = new BatchUpdateValuesRequest();

            addRequest.Data             = new List <ValueRange>();
            addRequest.ValueInputOption = "USER_ENTERED";
            foreach (var server in serverInfoCollection)
            {
                addRequest.Data.Add(replaceContnet(server.Key, server.Value));
            }

            //Ждем пока завершится асинхронная задача очистики и отправляем запрос на запись обновленных данных
            await clearTask;
            await _service.Spreadsheets.Values.BatchUpdate(addRequest, _spreadSheetId).ExecuteAsync();
        }
        public async Task <bool> UpdateMessageStatus(IEnumerable <INeedSend> messages)
        {
            List <ValueRange> data = new List <ValueRange>();

            foreach (var row in messages)
            {
                ValueRange valueRange = new ValueRange();
                valueRange.Range = row.CellForUpdate;
                var oblist = new List <object>()
                {
                    "да"
                };
                valueRange.Values = new List <IList <object> > {
                    oblist
                };

                data.Add(valueRange);
            }
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            requestBody.ValueInputOption = "RAW";
            requestBody.Data             = data;

            var service = await _sheetServiceProvider.GetService();

            SpreadsheetsResource.ValuesResource.BatchUpdateRequest request = service.Spreadsheets.Values.BatchUpdate(requestBody, messages.First().Table);

            request.Execute();

            return(true);
        }
예제 #9
0
 private static BatchUpdateValuesResponse updateSheet(
     BatchUpdateValuesRequest request,
     string spreadsheetId,
     SheetsService service)
 {
     return(service.Spreadsheets.Values.BatchUpdate(request, spreadsheetId).Execute());
 }
예제 #10
0
        private static BatchUpdateValuesRequest GetBatchUpdateRequest()
        {
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            requestBody.Data             = new List <ValueRange>();
            requestBody.ValueInputOption = "USER_ENTERED";
            return(requestBody);
        }
예제 #11
0
        private void UpdateGoogleSpreadsheetCell(string spreadSheetID, string cell, string value)
        {
            List <List <string> > valueList = new List <List <string> >
            {
                new List <string> {
                    value
                }
            };

            string[] Scopes          = { SheetsService.Scope.Spreadsheets };
            string   ApplicationName = "Update Poker Data";

            UserCredential credential;
            string         credentialsPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Dropbox\\Projects\\Poker Wizard\\Poker Wizard\\credentials.json";

            using (var stream =
                       new FileStream(credentialsPath, FileMode.Open, FileAccess.ReadWrite))
            {
                // The file token.json stores the user's access and refresh tokens, and is created
                // automatically when the authorization flow completes for the first time.
                string credPath = "token.json";
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Google Sheets API service.
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = ApplicationName,
            });

            List <ValueRange> dataList = new List <ValueRange>();

            var obList = new List <object>();
            var data   = new ValueRange
            {
                Values = valueList.Select(list => list.ToArray()).ToArray(),
                Range  = cell
            };

            dataList.Add(data);

            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest
            {
                ValueInputOption = "RAW",
                Data             = dataList
            };

            SpreadsheetsResource.ValuesResource.BatchUpdateRequest request = service.Spreadsheets.Values.BatchUpdate(requestBody, spreadSheetID);

            BatchUpdateValuesResponse response = request.Execute();
        }
        // STATUS [ August 3, 2019 ] : this works
        // BatchUpdateRequest
        //  * Sets values in 1+ ranges of spreadsheet
        //  * Caller must specify sheet ID, a valueInputOption, and 1+ ValueRanges
        //  * Type is Google.Apis.Sheets.v4.SpreadsheetsResource+ValuesResource+BatchUpdateRequest
        //  * See: https://bit.ly/2KBkBbt
        private BatchUpdateRequest CreateBatchUpdateRequest(BatchUpdateValuesRequest requestBody, string spreadSheetId)
        {
            BatchUpdateRequest request = _sheetsService.Spreadsheets.Values.BatchUpdate(
                requestBody,
                spreadSheetId
                );

            return(request);
        }
예제 #13
0
        private static BatchUpdateValuesRequest getUpdateValuesRequest(
            List <ValueRange> requestData,
            string valueInputOption = "USER_ENTERED")
        {
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            requestBody.Data             = requestData;
            requestBody.ValueInputOption = valueInputOption;
            return(requestBody);
        }
예제 #14
0
        //public async Task<int> SaveDestinationData(List<object> sourceData)
        //public void SaveDestinationData(List<object> sourceData)
        public void SaveDestinationData(List <IList <object> > sourceData)
        {
            try
            {
                SheetsServiceInitializer();
                var _spreadsheetId = SourceDetail["SpreadsheetId"];
                var _range         = $"{SourceDetail["SheetName"]}!{SourceDetail["Range"]}";

                // var data = new List<IList<object>>();
                if (sourceData.Count > 0)
                {
                    //var list = (from i in (ExpandoObject)sourceData[0] select i.Key).Cast<object>().ToList();
                    //data.Add(list);

                    ClearAllValuesFromSheet(_spreadsheetId, 0);

                    //data.AddRange(sourceData.Select(item => (from kvp in (ExpandoObject)item select kvp.Value).ToList())
                    //                            .Cast<IList<object>>().ToList());

                    var valueInputOption = "USER_ENTERED";
                    var updateData       = new List <ValueRange>();
                    var dataValueRange   = new ValueRange
                    {
                        Range = _range,
                        //Values = data
                        Values = sourceData
                    };
                    updateData.Add(dataValueRange);

                    var requestBody = new BatchUpdateValuesRequest
                    {
                        ValueInputOption = valueInputOption,
                        Data             = updateData
                    };

                    var requestBodyEmpty = new BatchUpdateValuesRequest
                    {
                        ValueInputOption = valueInputOption,
                        Data             = null
                    };

                    var request  = _sheetsService.Spreadsheets.Values.BatchUpdate(requestBodyEmpty, _spreadsheetId);
                    var response = request.Execute();

                    request  = _sheetsService.Spreadsheets.Values.BatchUpdate(requestBody, _spreadsheetId);
                    response = request.Execute();
                }
            }
            catch //(Exception ex)
            {
            }
        }
        // STATUS [ August 3, 2019 ] : this works
        // BatchUpdateValuesRequest
        //  * "The request for updating more than one range of values in a spreadsheet."
        //  * See: https://bit.ly/3364meV
        private static BatchUpdateValuesRequest CreateBatchUpdateValuesRequest(string valueInputOption, IList <ValueRange> updateData)
        {
            // ValueInputOption
            //  * "How the input data should be interpreted."
            // Data
            //  * "The new values to apply to the spreadsheet"
            //  * Type is System.Collections.Generic.List`1[Google.Apis.Sheets.v4.Data.ValueRange]
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest
            {
                ValueInputOption = valueInputOption,
                Data             = updateData,
            };

            return(requestBody);
        }
예제 #16
0
        public async Task BatchUpdate(string spreadsheetId, IEnumerable <UpdateRange> updateDatas)
        {
            BatchUpdateValuesRequest body = new BatchUpdateValuesRequest();

            body.Data = updateDatas.Select(d => new ValueRange
            {
                Range          = d.Range.GetStr(),
                Values         = d.Data,
                MajorDimension = "ROWS"
            }).ToList();
            body.ValueInputOption = "USER_ENTERED";
            SpreadsheetsResource.ValuesResource.BatchUpdateRequest request =
                _service.Spreadsheets.Values.BatchUpdate(body, spreadsheetId);

            await autoAuthorize(request);
        }
예제 #17
0
        /// <summary>
        /// Register a user on the spread sheet
        /// </summary>
        /// <param name="id">Id of the user</param>
        /// <param name="username">Username</param>
        /// <returns>If the user was registered</returns>
        public static bool register(Int64 id, string username)
        {
            //check that the user is not in the list
            List <LoginToken> tokens = GetLoginTokens();

            if (tokens.Any(item => item.id == id))
            {
                return(false);
            }

            // get the new user row number
            int row = 2;

            if (tokens.Count != 0)
            {
                row = tokens.Max(item => item.row) + 1;
            }

            // get the title of the spread sheet
            var    spreadSheet = Service.Spreadsheets.Get(info.SheetId).Execute();
            string sheetTitle  = spreadSheet.Sheets[0].Properties.Title;

            // Formatt the user data
            IList <IList <object> > data = new List <IList <object> >();

            data.Add(new List <object>());
            data[0].Add($"{id}");
            data[0].Add(username);
            data[0].Add(DateTime.Now.ToString("yyyy/MM/dd"));
            List <ValueRange> ranges = new List <ValueRange>();

            ranges.Add(new ValueRange()
            {
                Range = $"{sheetTitle}!A{row}:C{row}", Values = data
            });

            //Create a new request to change sheet cells
            BatchUpdateValuesRequest body2 = new BatchUpdateValuesRequest();

            body2.Data             = ranges;
            body2.ValueInputOption = "USER_ENTERED";

            //submit the request to google sheets
            BatchUpdateValuesResponse result = Service.Spreadsheets.Values.BatchUpdate(body2, info.SheetId).Execute();

            return(result.Responses.Count == 1);
        }
        public BatchUpdateValuesResponse UpdateData(string sheetname, string column, int row, List <IList <object> > data)
        {
            List <ValueRange> updateData = new List <ValueRange>();
            var dataValueRange           = new ValueRange();

            dataValueRange.Range  = $"{sheetname}!{column.ToUpper()}{row}";
            dataValueRange.Values = data;
            updateData.Add(dataValueRange);

            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest();

            requestBody.ValueInputOption = "USER_ENTERED";
            requestBody.Data             = updateData;

            var request = SheetsService.Spreadsheets.Values.BatchUpdate(requestBody, SpreadsheetId);

            return(request.Execute());
        }
        // STATUS [ August 3, 2019 ] : this works
        /// <param name="data">todo: describe data parameter on WriteGoogleSheetColumnsAsync</param>
        /// <param name="sheetName">todo: describe sheetName parameter on WriteGoogleSheetColumnsAsync</param>
        /// <param name="range">todo: describe range parameter on WriteGoogleSheetColumnsAsync</param>
        /// <param name="jsonGroupName">todo: describe jsonGroupName parameter on WriteGoogleSheetColumnsAsync</param>
        /// <example>
        ///     await _gSC.WriteGoogleSheetColumnsAsync(listOfLists, "YAHOO_TRENDS","A1:Z1000","CoreCalculator");
        /// </example>
        public async Task <string> WriteGoogleSheetColumnsAsync(IList <IList <object> > data, string sheetName, string range, string jsonGroupName)
        {
            // _helpers.StartMethod();
            ConnectToGoogle();

            _spreadSheetId = SelectGoogleSheetToRead(jsonGroupName, "SpreadsheetId");

            ValueRange                dataValueRange = SetSheetDataValueRange(_columnsMajorDimension, sheetName, range, data);
            List <ValueRange>         updateData     = CreateValueRangeList(dataValueRange);
            BatchUpdateValuesRequest  requestBody    = CreateBatchUpdateValuesRequest(_userEnteredValueInputOption, updateData);
            BatchUpdateRequest        request        = CreateBatchUpdateRequest(requestBody, _spreadSheetId);
            BatchUpdateValuesResponse response       = await CreateBatchUpdateValuesResponseAsync(request).ConfigureAwait(false);

            // PRINTERS
            // PrintRequestBodyData(requestBody);
            // PrintUpdateRangeDetails(sheetName, range, jsonGroupName, spreadsheetId);
            // LogSpreadsheetUpdateDetails(response);
            return(JsonConvert.SerializeObject(response));
        }
예제 #20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="docName"></param>
        /// <param name="tabName"></param>
        /// <param name="instances"></param>
        /// <param name="instanceType"></param>
        /// <param name="saveOnlyTheseMembersStr">Comma-separated list of names of member properties to save.</param>
        public static void SaveChanges(string docName, string tabName, object[] instances, Type instanceType, string saveOnlyTheseMembersStr = null)
        {
            if (instances == null || instances.Length == 0)
            {
                return;
            }

            ValidateDocAndTabNames(docName, tabName, true);

            string[] saveOnlyTheseMembers = null;
            if (saveOnlyTheseMembersStr != null)
            {
                saveOnlyTheseMembers = saveOnlyTheseMembersStr.Split(',');
            }

            string                  spreadsheetId = spreadsheetIDs[docName];
            List <string>           headerRow;
            IList <IList <object> > allRows;

            GetHeaderRow(docName, tabName, out headerRow, out allRows);

            MemberInfo[] indexFields = GetSerializableFields <IndexerAttribute>(instanceType);

            MemberInfo[] serializableFields = GetSerializableFields <ColumnAttribute>(instanceType);

            BatchUpdateValuesRequest requestBody = GetBatchUpdateRequest();

            for (int i = 0; i < instances.Length; i++)
            {
                int rowIndex = GetInstanceRowIndex(instances[i], indexFields, allRows, headerRow);
                if (rowIndex < 0)
                {
                    AddRow(tabName, serializableFields, headerRow, serializableFields, allRows, instances[i], requestBody);
                }
                else
                {
                    UpdateRow(tabName, instances, saveOnlyTheseMembers, headerRow, allRows, serializableFields, i, rowIndex, requestBody);
                }
            }

            ExecuteRequest(spreadsheetId, requestBody);
        }
예제 #21
0
        /// <summary>
        /// Updates through a batch update from a given start cell
        /// </summary>
        /// <param name="start">Start cell</param>
        /// <param name="data">Rows+Cells to update</param>
        /// <returns>Updated cells</returns>
        async Task <int> SetDataAsync(string start, List <IList <object> > data, string valueInputOption = "USER_ENTERED")
        {
            BatchUpdateValuesRequest update = new BatchUpdateValuesRequest()
            {
                Data = new List <ValueRange>()
                {
                    new ValueRange()
                    {
                        Range  = $"{Table}!{start}",
                        Values = data
                    }
                },
                ValueInputOption = valueInputOption
            };

            var request  = _service.Spreadsheets.Values.BatchUpdate(update, SheetId);
            var response = await request.ExecuteAsync().ConfigureAwait(false);

            return(response.TotalUpdatedCells ?? 0);
        }
예제 #22
0
        private async Task UpdateSheet(IList <ValueRange> valueRanges)
        {
            try
            {
                var requestBody = new BatchUpdateValuesRequest
                {
                    ValueInputOption = "USER_ENTERED",
                    Data             = valueRanges
                };

                var request = service.Spreadsheets.Values.BatchUpdate(requestBody, Settings.Instance.SheetId);

                await request.ExecuteAsync(cts.Token);
            }
            catch (Exception e)
            {
                if (e is GoogleApiException gae && gae.Error.Code == 429)
                {
                    Logger.Error(gae, "Too many Google Api requests. Cooling down.");
                    await Task.Delay(5000, cts.Token);
                }
예제 #23
0
        public static BatchUpdateValuesResponse BatchUpdateSheet(
            string spreadsheetId,
            Spreadsheets.SheetsRanges.SheetRangeData rangeData,
            SheetsService service)
        {
            // gaunami duomenys iš sheetų
            IList <IList <Object> > sheetValues = getRangeValues(spreadsheetId, rangeData.RangeAddress, service);

            List <ValueRange> requestData  = new List <ValueRange>();
            string            dateFormat   = Properties.Settings.Default.DateFormat;
            object            valueToWrite = DateTime.Now.Date.ToString(dateFormat);

            // pridedami duomenys į requestData
            addDataToRequest(sheetValues, rangeData, valueToWrite, requestData);

            // sukuriamas batch update request
            BatchUpdateValuesRequest request = getUpdateValuesRequest(requestData);

            // updateinamas spreadsheet
            return(updateSheet(request, spreadsheetId, service));
        }
예제 #24
0
        public async Task BatchUpdate(string sheetId, string majorDimension, Dictionary <string, IList <IList <object> > > values)
        {
            var updateRequestBody = new BatchUpdateValuesRequest {
                Data                    = new List <ValueRange>(),
                ValueInputOption        = "RAW",
                IncludeValuesInResponse = false
            };

            foreach (var data in values)
            {
                updateRequestBody.Data.Add(
                    new ValueRange()
                {
                    MajorDimension = majorDimension,
                    Range          = data.Key,
                    Values         = data.Value
                });
            }

            var updateRequest  = Service.Spreadsheets.Values.BatchUpdate(updateRequestBody, sheetId);
            var updateResponse = await updateRequest.ExecuteAsync();
        }
예제 #25
0
        // Batch Update
        public WrappedResponse UpdateRange(string spreadsheetId, IList <RangeUpdateModel> models)
        {
            try
            {
                var data = new List <ValueRange>();
                foreach (var model in models)
                {
                    var valueRange = new ValueRange();
                    valueRange.Values         = model.Values;
                    valueRange.MajorDimension = model.Dimension.GetString();
                    valueRange.Range          = model.Range;
                    data.Add(valueRange);
                }

                var requestBody = new BatchUpdateValuesRequest();
                requestBody.ValueInputOption = "USER_ENTERED"; // Google's magic string
                requestBody.Data             = data;

                var request  = _googleSheets.Spreadsheets.Values.BatchUpdate(requestBody, spreadsheetId);
                var response = request.Execute();

                if ((response.TotalUpdatedCells ?? 0) == 0)
                {
                    throw new ApplicationException("Update Range had no effect");
                }

                return(new WrappedResponse {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new WrappedResponse {
                    Success = false, Exception = e
                });
            }
        }
예제 #26
0
        public static void AddList(List <ServiceRequestModel> requestModelList, string spreadSheetId)
        {
            // Specifying Column Range for reading...
            var range = $"{sheet}!A:F";
            List <ValueRange> valueRangesList = new List <ValueRange>();

            // Data for another Student...
            for (int i = 2; i < requestModelList.Count + 2; i++)
            {
            }
            int index = 2;

            foreach (var requestModel in requestModelList)
            {
                var valueRange = new ValueRange();
                var oblist     = new List <object>()
                {
                    requestModel.TicketId, requestModel.FullName, requestModel.ServiceNm, requestModel.Status,
                    requestModel.StaffNm, requestModel.DepartmentNm
                };
                valueRange.Range  = $"{sheet}!A{index}:F";
                valueRange.Values = new List <IList <object> > {
                    oblist
                };
                valueRangesList.Add(valueRange);
                index++;
            }
            BatchUpdateValuesRequest requestBody = new BatchUpdateValuesRequest()
            {
                ValueInputOption = "USER_ENTERED",
                Data             = valueRangesList
            };

            SpreadsheetsResource.ValuesResource.BatchUpdateRequest request = service.Spreadsheets.Values.BatchUpdate(requestBody, spreadSheetId);
            BatchUpdateValuesResponse response = request.Execute();
        }
예제 #27
0
        public static void SaveToGoogleDrive(string fullName, string name, int seriaCount)
        {
            UserCredential credential;

            using (var stream =
                       new FileStream(Directory.GetFiles(@"C:\MoviesParser")[0], 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 spreadsheetId = "1SRMlO18VipcSsekYMlsP2UMSKaNX7GOEXHjIulEeEsw";
            int    rowNum        = 6080 + seriaCount;
            String range         = "B" + rowNum + ":D" + rowNum;
            //String rangeGet = "A1:E1";

            IList <object> valueToWrite = new List <object>()
            {
                fullName,
                name,
                "Жигайло"
            };


            ValueRange requestBody = new ValueRange()
            {
                MajorDimension = "ROWS",
                Range          = range,
                Values         = new List <IList <object> >()
                {
                    valueToWrite
                }
            };

            //SpreadsheetsResource.ValuesResource.GetRequest requestGet = service.Spreadsheets.Values.Get(spreadsheetId, rangeGet);
            //ValueRange response = requestGet.Execute();
            //IList<IList<Object>> values = response.Values;

            BatchUpdateValuesRequest batchUpdate = new BatchUpdateValuesRequest();

            batchUpdate.Data = new List <ValueRange>()
            {
                requestBody
            };
            batchUpdate.ValueInputOption = "RAW";

            SpreadsheetsResource.ValuesResource.BatchUpdateRequest request =
                service.Spreadsheets.Values.BatchUpdate(batchUpdate, spreadsheetId);

            request.Execute();
        }
예제 #28
0
        private static void UpdateRow(string tabName, object[] instances, string[] saveOnlyTheseMembers, List <string> headerRow, IList <IList <object> > allRows, MemberInfo[] serializableFields, int i, int rowIndex, BatchUpdateValuesRequest requestBody)
        {
            for (int j = 0; j < serializableFields.Length; j++)
            {
                MemberInfo memberInfo = serializableFields[j];

                if (!HasMember(saveOnlyTheseMembers, memberInfo.Name))
                {
                    continue;
                }

                if (instances[i] is ITrackPropertyChanges trackPropertyChanges && trackPropertyChanges.ChangedProperties != null)
                {
                    if (trackPropertyChanges.ChangedProperties.IndexOf(memberInfo.Name) < 0)
                    {
                        continue;
                    }
                }

                int columnIndex = GetColumnIndex(headerRow, GetColumnName <ColumnAttribute>(memberInfo));

                string existingValue = null;
                if (columnIndex < allRows[rowIndex].Count)                  // Some rows may have fewer columns because the Google Sheets engine will efficiently return only the columns holding data.
                {
                    existingValue = GetExistingValue(allRows, columnIndex, rowIndex);
                }

                string value = GetValue(instances[i], memberInfo);

                if (existingValue == null /* New */ || value != existingValue /* Mod */)
                {
                    //ValueRange body = new ValueRange();
                    //body.MajorDimension = "ROWS";
                    //body.Range = $"{tabName}!{range}";
                    //body.Values = new List<IList<object>>();
                    //body.Values.Add(new List<object>());
                    //body.Values[0].Add(value);
                    ValueRange body = GetValueRange(tabName, columnIndex, rowIndex, value);

                    requestBody.Data.Add(body);
                    //SpreadsheetsResource.ValuesResource.UpdateRequest request = service.Spreadsheets.Values.Update(body, spreadsheetId, body.Range);
                    //Execute(request);
                }
            }
        }
예제 #29
0
 private static void ExecuteRequest(string spreadsheetId, BatchUpdateValuesRequest requestBody)
 {
     SpreadsheetsResource.ValuesResource.BatchUpdateRequest request = service.Spreadsheets.Values.BatchUpdate(requestBody, spreadsheetId);
     Execute(request);
 }
예제 #30
0
        static int AddRow(string tabName, MemberInfo[] indexFields, List <string> headerRow, MemberInfo[] serializableFields, IList <IList <object> > allRows, object instance, BatchUpdateValuesRequest requestBody)
        {
            foreach (MemberInfo memberInfo in indexFields)
            {
                int        columnIndex = GetColumnIndex(headerRow, GetColumnName <ColumnAttribute>(memberInfo));
                int        rowIndex    = allRows.Count;
                ValueRange body        = GetValueRange(tabName, columnIndex, rowIndex, GetValue(instance, memberInfo));

                requestBody.Data.Add(body);
            }

            AddInstance(allRows, headerRow, serializableFields, instance);
            return(allRows.Count - 1);
        }