Получить последний столбец в Google Sheets API v4 на c#

#c# #.net #api #google-sheets

#c# #.net #API #google-sheets

Вопрос:

Я видел много сообщений о поиске последней строки данного столбца для Google Sheets API v4 на C #, но, похоже, я ничего не могу найти о поиске последнего столбца данной строки. Я не нашел никаких вопросов по этому поводу конкретно, но если я ошибаюсь, пожалуйста, направьте меня в нужное место.

На моем листе у меня есть заголовки для каждого столбца. Со временем я предполагаю, что мне нужно будет добавлять или удалять столбцы по мере необходимости — было бы здорово не обновлять мой код каждый раз, когда это происходит.

Я нахожусь на начальных этапах написания своего кода, который собирает мои данные из Google Sheets, но вот что у меня есть на данный момент. Я знаю, что мне нужно будет изменить способ записи моей переменной «range», просто не знаю, что.

 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 amp;amp; 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.");
        }
    }
 

РЕДАКТИРОВАТЬ: РЕШАЕМАЯ
Для этого я использовал псевдокод, предоставленный Nazi 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 amp;amp; 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);
        }
 

Комментарии:

1. сможете ли вы при необходимости перенести рабочий код javascript для вашего вопроса на C #?

2. @Nazi A не уверен, что вы имеете в виду под этим — извините. Я не очень хорошо знаком с javascript.

3. Слава вам. Вы даже предоставили лучший ответ, о котором я не смог сразу подумать. 1. Удачи.

Ответ №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 вызов

Если у вас есть какие-либо вопросы, не стесняйтесь уточнить ниже.

Комментарии:

1. спасибо за вашу помощь — я отредактировал свой исходный пост с моим окончательным кодом.

2. Очень умный подход!