Получить количество не пустых строк в таблице

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
204
Благодарностей
7
Баллы
18
Всем привет, подскажите как получить количество не пустых строк в таблице? Заранее спасибо!
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
Всем привет, подскажите как получить количество не пустых строк в таблице? Заранее спасибо!
Привет.)

Важно:
- нужно указать это имя таблицы
пример ↓
106261


Решение:
Подсчет заполненных строк в таблице:
int nonEmptyRowCount = 0;

IZennoTable table = project.Tables["NameTab"]; // указать имя таблицы из меню ZM
int tableRowCount = table.RowCount;

if (tableRowCount < 0)
    return nonEmptyRowCount = 0;

for (int row = 0; row <= tableRowCount; row++)
{
    if (string.IsNullOrEmpty(string.Join("", table.GetRow(row))))
            continue;

    nonEmptyRowCount++;
}

return nonEmptyRowCount;
Подсчет заполненных строк в таблице:
var table = project.Tables["NameTab"]; // указать имя таблицы из меню ZM
return Enumerable.Range(0, table.RowCount)
    .Count(i => !string.IsNullOrEmpty(string.Join("", table.GetRow(i))));
upd: исправил решение и добавил короткую версию.

Шаблон для примера
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Sho, MaksimHelp и Alexmd

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63
Можно чуть по другому, по-строчно, а ни по-ячеечно:


Количество пустых строк в таблице:
var Table = project.Tables["TableXLSX"]; //Указать название таблицы
int CountStr = Table.RowCount;
int EmptyStr = 0;
if(CountStr > 0){
    for(int i = 0; i < CountStr; i++){
        int a = Table.GetRow(i).Count();
        if(a==0)  
            EmptyStr += 1;
    }
    project.SendWarningToLog($"В таблице {EmptyStr.ToString()} пустых строк!", $"В таблице {EmptyStr.ToString()} пустых строк!", true);
   
    //Если надо чтоб кол-во пустых строк сохранялось в переменную - в строке ниже убрать //
    //project.Variables["EmptyStr"].Value = EmptyStr.ToString();
}
else{
    project.SendWarningToLog("В таблице нет строк!", "В таблице нет строк!", true);
}
Если нет строк в таблице выводится уведомление в лог
2023-04-25_032615.png

Либо считаем пустые строки
Screenshot_2.png
 
  • Спасибо
Реакции: MaksimHelp, Alexmd и djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
Можно чуть по другому, по-строчно, а ни по-ячеечно:


Количество пустых строк в таблице:
var Table = project.Tables["TableXLSX"]; //Указать название таблицы
int CountStr = Table.RowCount;
int EmptyStr = 0;
if(CountStr > 0){
    for(int i = 0; i < CountStr; i++){
        int a = Table.GetRow(i).Count();
        if(a==0) 
            EmptyStr += 1;
    }
    project.SendWarningToLog($"В таблице {EmptyStr.ToString()} пустых строк!", $"В таблице {EmptyStr.ToString()} пустых строк!", true);
  
    //Если надо чтоб кол-во пустых строк сохранялось в переменную - в строке ниже убрать //
    //project.Variables["EmptyStr"].Value = EmptyStr.ToString();
}
else{
    project.SendWarningToLog("В таблице нет строк!", "В таблице нет строк!", true);
}
Если нет строк в таблице выводится уведомление в лог
Посмотреть вложение 106263

Либо считаем пустые строки
Посмотреть вложение 106264
Да. Спасибо за замечание.)

Исправил и дополнил своё сообщение.
 
  • Спасибо
Реакции: Sho, Alexmd и ex3maL

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Тот случай, когда размер имеет значение)
C#:
return project.Tables["table"].GetItems("all", false).Where(x => string.Join("", x).Length > 0).Count();
 
  • Спасибо
Реакции: Sho, MaksimHelp и djaga

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
int a = Table.GetRow(i).Count(); if(a==0) EmptyStr += 1;
Это не будет работать, потому что количество ячеек всегда будет равно количеству ячеек в самом длинной строке.

C#:
var table = project.Tables["table"];
table.Clear();
table.AddRow(new List<string>());    //добавлю пустую строку
//return table.GetItem("0", false).Count();//сейчас в первой строке 0 ячеек.
table.AddRow(new[]{"1", "1", "1"});    //добавлю строку с 3-мя ячейками
return table.GetItem("0", false).Count();//в первой строке теперь тоже 3 ячейки.
 
  • Спасибо
Реакции: Sho и ex3maL

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63
Это не будет работать, потому что количество ячеек всегда будет равно количеству ячеек в самом длинной строке.
Нам же нужны пустые строки, а пустые строки это Count == 0. Другое нас не интересует, поэтому это будет работать.

Upd: Пожалуй соглашусь. Когда набрасывал код не провел тесты с Table.AddRow(new[]{"", "", ""});
Upd2: Точнее если данные в таблицу внесены руками и ячейки не тронуты, то все считается нормально. А вот если использовать добавление кодом Table.AddRow(new[]{"", "", ""});, то строка считается не пустой.
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)