2017-11-01 11 views
0

これはコードスニペットです。 C#を使用してGoogleスプレッドシートAPI v4に正常に接続しました。私は、セルが空白または空であることを知った。このエラーが表示されます。System.ArgumentOutOfRangeException: 'インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 パラメータ名:index ' セルE3の入力IDが空白/空であることがわかります。私はそれがゼロの値を与える空白になっているかをチェックするために、以下のコードでこれを試しましたが、同じエラーを返します。私が達成したいのは、セルが空白になったら、ゼロまたは未知数の値を与えることです。私はセルE3のコードで値を入れて罰金が働くことを念頭に置いて、ただ空のセルをチェックする必要があります。ここhttps://developers.google.com/sheets/api/quickstart/dotnet#further_readingenter image description hereGoogleスプレッドシートを使用してC#を使用してGoogleシートの空のセルを確認するAPI v4

  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; 
       } 



      } 

答えて

1

我々は理解しなければならないことの一つは、シートのAPIは、「空のセル」を読んでいないということですから、リファレンス、。あなたはRead a single range grouped by columnのそれを読むことができます:

Empty trailing rows and columns are omitted from the response.

それは直接的ではないかもしれないが、それはテストが言っても何。私は空のセルを読んだとき、私はこれまで

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(); 
     }   
    } 

うまくいけば、この単純なアナロジーは、あなたを助け、これを実装するには、ような何かを行います。

+0

'(行[4] .Equals(NULL)|| string.IsNullOrEmpty(Convert.ToString(行[4]))){ inputId = 0の場合 {を試みます。 } else { inputId = Convert.ToInt32(row [4]); (例外e) { } } ' – ForzaC

+0

ありがとう、あなたの類推は働いていました。私が行ったことはtryブロック内にif else文をラップするために使用された後、一度空の末尾の行と列がエラーをスローすると、catchブロックは例外エラーを処理します....その後ループは残りの行を処理し続けます。 ..私はテストし、そのうまく動作します – ForzaC

+0

華麗です! ; )あなたはそれを相手にした – noogui

関連する問題