【问题标题】:Checking for Empty Cells in Google Sheets using c# via Google Sheets API v4通过 Google Sheets API v4 使用 c# 检查 Google Sheets 中的空单元格
【发布时间】:2017-11-01 19:03:02
【问题描述】:

这是代码 sn-p。我已使用 C# 成功连接到 Google Sheets API v4。我发现当单元格为空白或为空时。我收到此错误:System.ArgumentOutOfRangeException: '索引超出范围。必须是非负数且小于集合的大小。 参数名称:index' 如您所见,单元格 E3 中的输入 ID 单元格为空白/空。我在下面的代码中尝试了这个来检查它是否为空白,它给出的值为零,但仍然给出相同的错误。我想要实现的是,一旦单元格为空白,我将其值设为零或未知?请记住,如果我在单元格 E3 代码中输入值可以正常工作,只需要检查空单元格。从这里参考https://developers.google.com/sheets/api/quickstart/dotnet#further_reading

            int inputId = 0;
            foreach (var row in values)
            {

                SqlCommand command = new SqlCommand();
                command.Connection = ServerConnection;            // <== lacking
                command.CommandType = CommandType.Text;
                command.CommandText = "INSERT into [GoogleSheetsAPI].[dbo].[Followup Stage] ( [Timestamp], [Email Address], [Do You Want To Follow Up] ,[Is The Issue Resolved From Follow Up] ,[Input ID]) VALUES (@TimeStamp, @EmailAddress,  @DoYouWantToFollowUp,  @IsTheIssueResolvedFromFollowUp,  @InputID ) ";
                command.Parameters.AddWithValue("@TimeStamp", Convert.ToDateTime(row[0]));
                command.Parameters.AddWithValue("@EmailAddress", Convert.ToString(row[1]));
                command.Parameters.AddWithValue("@DoYouWantToFollowUp", Convert.ToString(row[2]));
                command.Parameters.AddWithValue("@IsTheIssueResolvedFromFollowUp", Convert.ToString(row[3]));
 //checking for null   or if the cell is empty  still doesn't work this way??
                if (row[4] == null || string.IsNullOrEmpty(Convert.ToString(row[4])))
                {
                    inputId = 0;
                }
                else
                {
                    inputId = Convert.ToInt32(row[4]);
                }

                command.Parameters.AddWithValue("@InputID", inputId);


                try
                {
                    // ServerConnection.Open();
                    int recordsAffected = command.ExecuteNonQuery();
                }
                catch (SqlException E)
                {
                    // error here
                    Console.Write(E.Message);
                    //   Console.ReadLine;
                }



            }

【问题讨论】:

    标签: c# .net google-sheets google-sheets-api


    【解决方案1】:

    我们必须了解的一件事是,Sheets API 不会读取“空单元格”。你可以在Read a single range grouped by column阅读:

    响应中省略空尾行和列。

    它可能不是直接的,但这也是测试所说的。当我读取一个空单元格时,我得到了同样的错误

    Uncaught TypeError: Cannot read property 'length' of undefined
    

    对此的一种解决方法是为“空单元格”编写一个占位符,就像您对“零或未知”所做的那样。

    如果这不是一个选项,您还可以执行类似 if-else 的方法来在错误停止程序之前捕获错误。要实现这一点,请执行以下操作:

    示例:

     for (i = 0; i < range.values.length; i++) {
            //IF NOT AN EMPTY CELL
            if(range.values[i][j]){
    
               console.log(range.values[i][i] + " is my value");
             //IF IT's AN EMPTY CELL
             }else{
    
                console.log("U N D E F I N E D");
                //your method to write to that cell
                writeToSheet();
             }         
      }
    

    希望这个简单的类比对你有所帮助。

    【讨论】:

    • ' 尝试 { if (row[4].Equals(null) || string.IsNullOrEmpty(Convert.ToString(row[4]))) { inputId = 0; } else { inputId = Convert.ToInt32(row[4]); } }catch(Exception e) { Console.WriteLine(e.Message); } '
    • 是的,谢谢,您的类比有效。我所做的是将 if else 语句包装在 try 块中,然后一旦空的尾随行和列引发错误,catch 块将处理异常错误......然后循环将继续处理其他剩余的行...... ..我测试过并且工作正常
    • 太棒了! ; )你做到了交配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2020-04-01
    • 1970-01-01
    • 2016-10-13
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多