Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c语言中接受用户输入并更新Google电子表格#_C#_Google Sheets Api - Fatal编程技术网

C# 如何在c语言中接受用户输入并更新Google电子表格#

C# 如何在c语言中接受用户输入并更新Google电子表格#,c#,google-sheets-api,C#,Google Sheets Api,我有一个谷歌电子表格,作为一个文具室的库存清单。事实证明,这是一个具有挑战性的c#构建,因为我需要用户输入他们想要多少笔,并更新电子表格中的数量字段。我可以通过硬编码来完成这一点,但是如何改变它以获取用户输入 using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Sheets.v4; using Google.Apis.Sheets.v4.Data; using System; using Sys

我有一个谷歌电子表格,作为一个文具室的库存清单。事实证明,这是一个具有挑战性的c#构建,因为我需要用户输入他们想要多少笔,并更新电子表格中的数量字段。我可以通过硬编码来完成这一点,但是如何改变它以获取用户输入

using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using System;
using System.Collections.Generic;
using System.IO;

//Database https://docs.google.com/spreadsheets/d/HIDDEN/edit?ts=5e53e5e8#gid=0
/*

STOCK LIST
Col A = Item
Col B = Item Code
Col C = Qty
Col D = Unit Price
Col E = Date Added
Col F = Stock updated(After delivery)
COL G = Total Cost
Col H = Total Expenditure

USERS
Last Name   First Name  UserName    PassWord
Knight      Fiona       FK1         Cat
Wilson      Euan        EW1         StarWars
Mansfield   Graham      GM1         Snarler
Account     Test        TA1         Test
*/


namespace StockList
{
   class Program
   {
       //Read The Sheet
       static readonly string[] Scopes = { SheetsService.Scope.Spreadsheets };
       static readonly string ApplicationName = "Stock List";
       static readonly string SpreadsheetId = "HIDDEN";
       static readonly string sheet = "Stock";
       static readonly string sheet1 = "Employees";
       static SheetsService service;
       //Update the database
       static void Main(string[] args)
       {
           GoogleCredential credential;
           using (var stream = new FileStream("Stock.json", FileMode.Open, FileAccess.Read))
           {
               credential = GoogleCredential.FromStream(stream)
                   .CreateScoped(Scopes);
           }
           // Create Google Sheets API service.
           service = new SheetsService(new BaseClientService.Initializer()
           {
               HttpClientInitializer = credential,
               ApplicationName = ApplicationName,
           });

           Console.WriteLine("Welcome to the Stationery Management Service!");

           //Console.WriteLine("Please enter your Username");
           //var userName = Console.ReadLine();


           Console.WriteLine("\nCurrent Stock Level: \n");
           ReadEntriesStock();
           UpdateEntry();
           Console.WriteLine("\nNew Stock:\n");
           ReadEntriesStock();
           Console.WriteLine("\nEmployees List:\n");
           ReadEntriesEmployees();
           Console.WriteLine("\n");
           UpdateEntryEmployee();

       }
       static void ReadEntriesStock()
       {
           var range = $"{sheet}!A:F";
           SpreadsheetsResource.ValuesResource.GetRequest request =
                   service.Spreadsheets.Values.Get(SpreadsheetId, range);
           var response = request.Execute();
           IList<IList<object>> values = response.Values;
           if (values != null && values.Count > 0)
           {
               Console.ForegroundColor = ConsoleColor.Yellow;
               Console.WriteLine("  {0,8} {1} {2,5} {3,2} {4,2} {5} {6,6} {1,2} {8,7}", "Item", "|", "Stock Code", "|", "Quantity", "|", "Price", "|", "Date");
               Console.WriteLine("   --------------------------------------------------------");
               Console.ResetColor();
               foreach (var row in values)
               {
                   // Print columns A to E, which correspond to indices 0 and 4.

                   Console.WriteLine("{0,10} |{1,8}     | {2,5}    |{3,7}  | {4,5}", row[0], row[1],  row[2], row[3], row[4]);
               }
           }
           else
           {
               Console.WriteLine("No data found.");
           }
       }
       static void ReadEntriesEmployees()
       {
           var range = $"{sheet1}!A:B";
           SpreadsheetsResource.ValuesResource.GetRequest request =
                   service.Spreadsheets.Values.Get(SpreadsheetId, range);
           var response = request.Execute();
           IList<IList<object>> values = response.Values;
           if (values != null && values.Count > 0)
           {
               foreach (var row in values)
               {
                   // Print columns A to E, which correspond to indices 0 and 4.
                   Console.WriteLine("{0,5} | {1,5}", row[0], row[1]);
               }
           }
           else
           {
               Console.WriteLine("No data found.");
           }
       }
       static void UpdateEntry()
       {
           var range = $"{sheet}!C1";
           var valueRange = new ValueRange();
           var oblist = new List<object>() { "87" };
           valueRange.Values = new List<IList<object>> { oblist };
           var updateRequest = service.Spreadsheets.Values.Update(valueRange, SpreadsheetId, range);
           updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
           var appendReponse = updateRequest.Execute();
       }
       static void UpdateEntryEmployee()
       {
           var range = $"{sheet1}!C6";
           var valueRange = new ValueRange();
           var oblist = new List<object>() { "" };
           valueRange.Values = new List<IList<object>> { oblist };
           var updateRequest = service.Spreadsheets.Values.Update(valueRange, SpreadsheetId, range);
           updateRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
           var appendReponse = updateRequest.Execute();
       }
   }
}

使用Google.api.Auth.OAuth2;
使用Google.api.Services;
使用Google.api.Sheets.v4;
使用Google.api.Sheets.v4.Data;
使用制度;
使用System.Collections.Generic;
使用System.IO;
//数据库https://docs.google.com/spreadsheets/d/HIDDEN/edit?ts=5e53e5e8#gid=0
/*
存货清单
A列=项目
Col B=项目代码
列C=数量
Col D=单价
列E=添加的日期
Col F=库存更新(交付后)
G列=总成本
Col H=总支出
使用者
姓氏名字用户名密码
骑士菲奥娜FK1猫
威尔逊尤安EW1星球大战
曼斯菲尔德·格雷厄姆GM1咆哮者
帐户测试TA1测试
*/
命名空间库存列表
{
班级计划
{
//读这张纸
静态只读字符串[]范围={SheetsService.Scope.Spreadsheets};
静态只读字符串ApplicationName=“股票列表”;
静态只读字符串SpreadsheetId=“HIDDEN”;
静态只读字符串sheet=“Stock”;
静态只读字符串sheet1=“Employees”;
静态纸张服务;
//更新数据库
静态void Main(字符串[]参数)
{
谷歌认证证书;
使用(var stream=newfilestream(“Stock.json”、FileMode.Open、FileAccess.Read))
{
credential=GoogleCredential.FromStream(流)
.CreateScoped(范围);
}
//创建GoogleSheetsAPI服务。
服务=新的SheetsService(新的BaseClientService.Initializer()
{
HttpClientInitializer=凭证,
ApplicationName=ApplicationName,
});
Console.WriteLine(“欢迎使用文具管理服务!”);
//Console.WriteLine(“请输入您的用户名”);
//var userName=Console.ReadLine();
Console.WriteLine(“\n当前库存水平:\n”);
ReadEntriesStock();
UpdateEntry();
Console.WriteLine(“\n新股票:\n”);
ReadEntriesStock();
Console.WriteLine(“\n员工列表:\n”);
ReadEntriesEmployees();
Console.WriteLine(“\n”);
UpdateEntryEmployee();
}
静态void ReadEntriesStock()
{
变量范围=$“{sheet}!A:F”;
电子表格Resource.ValuesResource.GetRequest请求=
服务.Spreadsheets.Values.Get(电子表格ID,范围);
var response=request.Execute();
IList值=响应值;
if(值!=null&&values.Count>0)
{
Console.ForegroundColor=ConsoleColor.Yellow;
Console.WriteLine(“{0,8}{1}{2,5}{3,2}{4,2}{5}{6,6}{1,2}{8,7}”、“项目”、“库存代码”、“库存代码”、“数量”、“价格”、“日期”);
Console.WriteLine(“-------------------------------------------------------------------------------------”);
Console.ResetColor();
foreach(值中的var行)
{
//打印对应于索引0和4的A列到E列。
WriteLine({0,10}{1,8}{2,5}{3,7}{4,5}),第[0]行,第[1]行,第[2]行,第[3]行,第[4]行);
}
}
其他的
{
Console.WriteLine(“未找到数据”);
}
}
静态void ReadEntriesEmployees()
{
变量范围=$“{sheet1}!A:B”;
电子表格Resource.ValuesResource.GetRequest请求=
服务.Spreadsheets.Values.Get(电子表格ID,范围);
var response=request.Execute();
IList值=响应值;
if(值!=null&&values.Count>0)
{
foreach(值中的var行)
{
//打印对应于索引0和4的A列到E列。
WriteLine(“{0,5}{1,5}”,第[0]行,第[1]行);
}
}
其他的
{
Console.WriteLine(“未找到数据”);
}
}
静态void UpdateEntry()
{
变量范围=$“{sheet}!C1”;
var valueRange=新的valueRange();
var oblist=new List(){“87”};
valueRange.Values=新列表{oblist};
var updateRequest=service.Spreadsheets.Values.Update(valueRange,SpreadsheetId,range);
updateRequest.ValueInputOption=电子表格Resource.ValuesResource.updateRequest.ValueInputOptionEnum.USERENTERED;
var appendReponse=updateRequest.Execute();
}
静态void UpdateEntryEmployee()
{
变量范围=$“{sheet1}!C6”;
var valueRange=新的valueRange();
var oblist=new List(){“};
valueRange.Values=新列表{oblist};
var updateRequest=service.Spreadsheets.Values.Update(valueRange,SpreadsheetId,range);
updateRequest.ValueInputOption=电子表格Resource.ValuesResource.updateRequest.ValueInputOptionEnum.USERENTERED;
var appendReponse=updateRequest.Execute();
}
}
}

我创建了一个可重用的函数,该函数采用管道分隔的字符串,并将其逐行写入指定的工作表中。我在DLL中执行此操作,因此通常避免读取/写入控制台

private string GoogleSheetsUpdate(string fileId, string inputOption, string inputRange, string inputText) {
        //PURPOSE: SETS VALUES IN A RANGE OF A SPREADSHEET.
        //REFERENCE: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update
        string result = "Success";
        try {
            //HOW THE INPUT DATA SHOULD BE INTERPRETED:
            //THE VALUES WILL BE PARSED AS IF THE USER TYPED THEM INTO THE UI. NUMBERS WILL STAY AS NUMBERS, BUT STRINGS MAY BE CONVERTED
            //TO NUMBERS, DATES, ETC.FOLLOWING THE SAME RULES THAT ARE APPLIED WHEN ENTERING TEXT INTO A CELL VIA THE GOOGLE SHEETS UI.
            SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum valueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
            inputOption = inputOption.ToLower();
            if (inputOption == "raw") {
                //THE VALUES THE USER HAS ENTERED WILL NOT BE PARSED AND WILL BE STORED AS-IS.
                valueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.RAW;
            }

            //ASSIGN VALUES TO DESIRED PROPERTIES OF REQUESTBODY; ALL EXISTING PROPERTIES WILL BE REPLACED
            string[] oRow = inputText.Split('|');
            ValueRange oBody = new ValueRange {
                Values = new List<IList<object>> { oRow },
            };
            SpreadsheetsResource.ValuesResource.UpdateRequest oRequest = sheetsService.Spreadsheets.Values.Update(oBody, fileId, inputRange);
            oRequest.ValueInputOption = valueInputOption;
            UpdateValuesResponse oResponse = oRequest.Execute();
        } catch (Exception e) {
            result = "Google Sheets API: " + e.Message;
        }
        return result;
        //RESPONSE: IF SUCCESSFUL, THE RESPONSE BODY CONTAINS AN INSTANCE OF UPDATEVALUESRESPONSE.
    }
私有字符串GoogleSheetsUpdate(字符串文件ID、字符串输入选项、字符串输入范围、字符串输入文本){
//用途:设置电子表格范围内的值。
//参考:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.val