【问题标题】:Appending data to a Google Sheet from C# called SqlCommand从名为 SqlCommand 的 C# 将数据附加到 Google 表格
【发布时间】:2018-05-16 15:14:30
【问题描述】:

我从基础开始,学习了如何从我的程序中将固定位的行插入到 Google 表格中,现在我一直在尝试弄清楚如何附加 SQL 的输出。我有一个调用存储过程的 C# 程序,或者它可以执行 select * from table。只需尝试将该选择的结果/输出插入到 Google 表格中。我发现的每个示例都在处理硬编码的固定行和列。我的选择产生少于 2000 行的输出。感谢您的帮助!

namespace CS_Gsheet1
{
    class Program
    {
        // If modifying these scopes, delete your previously saved credentials
        // at ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
        //static string[] Scopes = { SheetsService.Scope.SpreadsheetsReadonly };
        //static string ApplicationName = "Google Sheets API .NET Quickstart";
        static string[] Scopes = { SheetsService.Scope.Spreadsheets };
        static string ApplicationName = "Test3"; 

        static void Main(string[] args)
        {
            var service = AuthorizeGoogleApp();

            String spreadsheetId = "sheetIDstring"; 

            // Write to specified sheet
            String writeRange = "Sheet1!A1:K";
            ValueRange valueRange = new ValueRange { MajorDimension = "ROWS" };

            IList<object> dataList = new List<object>();

            using(SqlConnection myConnection = new SqlConnection("connectionstring"))
            {
                myConnection.Open();

                using(SqlCommand cmd = new SqlCommand("storedproc-selectsmultiplecolumnsandrows", myConnection))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    using(SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            // dataList.Add(reader.GetString(0));
                            // dataList.Add(reader.GetValue(0));
                            IList<IList<Object>> values = new List<IList<Object>>();
                            values.Add(dataList);
                        }
                    }
                }
            }

            // Data is accessible through the DataReader object here.
            ValueRange valueDataRange = new ValueRange() { MajorDimension = "ROWS" };

            valueDataRange.Values = new List<IList<object>> { dataList };

            int c = dataList.Count;
            Console.WriteLine("dataList Count {0}", c);

            for (int i = 0; i < c; i++)
            {
                // API to append data to sheet
                SpreadsheetsResource.ValuesResource.AppendRequest appendRequest = service.Spreadsheets.Values.Append(valueDataRange, spreadsheetId, writeRange);
                appendRequest.ValueInputOption = SpreadsheetsResource.ValuesResource.AppendRequest.ValueInputOptionEnum.RAW;
                appendRequest.InsertDataOption = SpreadsheetsResource.ValuesResource.AppendRequest.InsertDataOptionEnum.INSERTROWS;
                AppendValuesResponse appendValueResponse = appendRequest.Execute();
            }
        }

        private static SheetsService AuthorizeGoogleApp()
        {
            UserCredential credential;

            using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.ReadWrite))
            {
                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);

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

                return service;
            }
        }
    }
}

【问题讨论】:

  • 考虑将您的问题分解为多个组成部分。你想从 SQL 中获取数据,那应该是它自己的方法。一旦你有了这些数据,你想用它来更新你的谷歌表格,这应该是另一种方法。这将问题分成两个相对容易解决的映射问题。

标签: c# google-sheets google-api


【解决方案1】:

我能够调整此解决方案以使流程正常运行,而无需向 Google 请求增加配额。它的运行速度不是很快,但可以处理约 1000 条记录。

https://github.com/jeffcrowder/GoogleSheetsAPIExample/blob/master/GoogleSheetsAPIExample/Program.cs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-06-26
    相关资源
    最近更新 更多