【问题标题】:Get last column in Google Sheets API v4 in c#在 c# 中获取 Google Sheets API v4 中的最后一列
【发布时间】:2020-12-04 15:05:04
【问题描述】:

我看过很多关于在 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] 是否在范围内。以下是我的最终代码,以防将来有人需要它。我计划让var range = $"{sheet}!A1:ET; 中声明的列“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);
        }

【问题讨论】:

  • 如果需要,您能否将您的问题的有效 javascript 代码移植到 C# 中?
  • @Nazi A 不知道你的意思是什么——抱歉。我对javascript不是很熟悉。
  • 向你致敬。您甚至提供了一个我无法立即想到的更好的答案。 +1。祝你好运。

标签: c# .net api google-sheets


【解决方案1】:

所以基本上,你需要有一个嵌套循环来遍历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 调用

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

【讨论】:

  • 感谢您的帮助 - 我使用最终代码编辑了原始帖子。
  • 非常聪明的方法!
猜你喜欢
  • 2016-09-16
  • 1970-01-01
  • 2016-10-13
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
相关资源
最近更新 更多