#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. Очень умный подход!