首页 > 解决方案 > 在 c# 中获取 Google Sheets API v4 中的最后一列

问题描述

我已经看过很多关于在 C# 中为 Google Sheets API v4 查找给定列的最后一行的帖子,但我似乎找不到任何关于查找给定行的最后一列的信息。我没有发现任何关于此的问题 - 但如果我弄错了,请引导我到正确的地方。

在我的工作表中,每列都有标题。随着时间的推移,我预计我将需要根据需要添加或删除列 - 每次发生这种情况时不必更新我的代码会很棒。

我正处于编写从 Google 表格收集数据的代码的开始阶段 - 但这是我目前所拥有的。我知道我需要更改变量“范围”的写入方式,只是不知道是什么。

static void ReadEntries()
    {
        var range = $"{sheet}!A1:ET";
        var request = service.Spreadsheets.Values.Get(SpreadsheetId, range);
        var response = request.Execute();
        var values = response.Values;
        if(values != null && values.Count>0)
        {
            foreach (var row in values)
            {

                System.Diagnostics.Debug.WriteLine("{0} | {1} | {2}", row[0], row[1], row[2]);
            }
        }
        else
        {
            System.Diagnostics.Debug.WriteLine("No data found.");
        }
    }

编辑:已解决 我为此使用了纳粹 A 提供的伪代码。if(row[col])我在铸造和其他系统异常方面遇到了问题。事实证明foreach,我们不必检查它row[col]是否在范围内。以下是我的最终代码,以防将来有人需要它。我计划让声明的“ET”列var range = $"{sheet}!A1:ET;足够大,以容纳将来添加到我的电子表格中的任何列。谢谢你的帮助!

static void ReadEntries()
        {
            
            var range = $"{sheet}!A1:ET";
            var request = service.Spreadsheets.Values.Get(SpreadsheetId, range);
            var response = request.Execute();
            var values = response.Values;
            int max = 0;
            int currMax;
            
            if (values != null && values.Count>0)
            {
                foreach(var row in values)
                {
                    currMax = 0;
                    foreach(var col in row)
                    {
                        currMax++;
                    }

                    if (max < currMax)
                    {
                        max = currMax;
                    }
                } 
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("No data found.");
            }

            System.Diagnostics.Debug.WriteLine(max);
        }

标签: c#.netapigoogle-sheets

解决方案


所以基本上,你需要有一个嵌套循环来遍历values.

我已经测试了这个伪代码并且工作了,但是由于我没有任何方法来运行 C# 代码,这就是我能给你的全部。这是一个您应该可以阅读的伪代码。

var max = 0;
foreach(var row in values){
  var currMax = 0;

  foreach(var col in row){
    if(row[col]){ // as long as data exists, currMax will increment
      currMax++;
      continue;
    }
    break; // stop loop if last cell being checked is empty
  }

  if(max < currMax){ // assign the largest currMax to max
    max = currMax;
  }
}

所以在这个伪代码中,max将包含范围内所有行的最大列的值。上面的这段代码应该取代你的foreach电话

如果您有任何疑问,请随时在下面澄清。


推荐阅读