Как удалить ячейку в таблице?

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Доброго дня.
Вопрос звучит крайне просто и даже местами смешно, но располагая огромным функционалом ZP, перечитав FAQ и форум, не смог найти решения.
Требуется просто удалить ячейку "Содержащую текст". Удалить можно строку и столбец "Содержащие текст", а вот ячейку почему-то нельзя, как бы это просто не звучало.

Если стандартными методами ZP реализовать такое не представляется возможным, может кто знает решение на C#?

P.S.
Костыли вида взять столбец, поместить в список, сделать нужные действия и вернуть список в столбец - не подходят, так как операция должна проходить быстро, а данный способ имеет задержку.

P.P.S.
Задача: есть таблица с данными, нужно удалить ячейку\ячейки содержащие текст "Like".
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
нет такого функционала в зенке.
если только искать сторонние dll
Не знаешь с чем связано отсутствие такого банального, но крайне полезного функционала? Просто я не представляю, как можно отказаться от списков, в пользу таблиц, где информация может храниться в компактной и удобной для восприятия форме, без удаления ячеек. Резать сразу столбцы и строки, это варварский метод, если у тебя в каждом столбце абсолютно разная информация, которая используется для работоспособности проекта.

Смотрел обучающие ролики, везде говорилось о схожести списков и таблиц, но по факту, таблицы крайне урезаны и возможности списков куда более обширные. Ситуация вынудила подключить таблицы, так как задача сгенерирует десятки списков, в которых можно запутаться, и если ранее в работе с таблицами был костыль на костыле, то теперь вот просто нельзя удалить ячейку и приехали, даже костыля нет и подорожничек не приложишь. =(

ZP умный софт и если чего-то простого здесь нет, значит причина имеется. В таблице, кроме столбцов, строк и ячеек более ничего нет и все три параметра обязаны быть равноправными по функционалу. Для чего это нужно? Вопрос не уместен, клиент сам разберется и найдет применение возможности.

Phoenix78 - часто вижу твои посты и мысли. Спасибо за них.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Не знаешь с чем связано отсутствие такого банального, но крайне полезного функционала? Просто я не представляю, как можно отказаться от списков, в пользу таблиц, где информация может храниться в компактной и удобной для восприятия форме, без удаления ячеек. Резать сразу столбцы и строки, это варварский метод, если у тебя в каждом столбце абсолютно разная информация, которая используется для работоспособности проекта.

Смотрел обучающие ролики, везде говорилось о схожести списков и таблиц, но по факту, таблицы крайне урезаны и возможности списков куда более обширные. Ситуация вынудила подключить таблицы, так как задача сгенерирует десятки списков, в которых можно запутаться, и если ранее в работе с таблицами был костыль на костыле, то теперь вот просто нельзя удалить ячейку и приехали, даже костыля нет и подорожничек не приложишь. =(

ZP умный софт и если чего-то простого здесь нет, значит причина имеется. В таблице, кроме столбцов, строк и ячеек более ничего нет и все три параметра обязаны быть равноправными по функционалу. Для чего это нужно? Вопрос не уместен, клиент сам разберется и найдет применение возможности.

Phoenix78 - часто вижу твои посты и мысли. Спасибо за них.
не знай, я же такой же пользователь как и все :-)
вообще я постепенно перехожу на БД. начал с попроще, с SQLite , потом на сетевые перейду.
 
  • Спасибо
Реакции: material

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Доброго дня.
Вопрос звучит крайне просто и даже местами смешно, но располагая огромным функционалом ZP, перечитав FAQ и форум, не смог найти решения.
Требуется просто удалить ячейку "Содержащую текст". Удалить можно строку и столбец "Содержащие текст", а вот ячейку почему-то нельзя, как бы это просто не звучало.

Если стандартными методами ZP реализовать такое не представляется возможным, может кто знает решение на C#?

P.S.
Костыли вида взять столбец, поместить в список, сделать нужные действия и вернуть список в столбец - не подходят, так как операция должна проходить быстро, а данный способ имеет задержку.

P.P.S.
Задача: есть таблица с данными, нужно удалить ячейку\ячейки содержащие текст "Like".
Если без смещения нужно, то просто можно затереть ячейку :-)
Пример затирания:
var table = project.Tables["Моя зенно таблица"];  // наша зенно таблица.
var searchText = "like";                          // текст по которому будем искать.

//Очистка таблицы перед работой.
table.Clear();

//Добавляю данные в пустую таблицу.
table.AddRow(new[]{"one","two","three","four"});
table.AddRow(new[]{"one","two","like","four"});
table.AddRow(new[]{"one","two","three","four","five"});

var countColumn = table.ColCount;  // подсчет столбцов в таблице.
var countRow = table.RowCount;     // подсчет строк в таблице.

project.SendInfoToLog($"Количество строк: {countRow}");         // лог в pm.
project.SendInfoToLog($"Количество столбцов: {countColumn}");   // лог в pm.

lock (SyncObjects.TableSyncer)
{
    for (int counterByRow = 0; counterByRow < countRow; counterByRow++)
    {
        for (int counterByColumn = 0; counterByColumn < countColumn; counterByColumn++)
        {
            if (table.GetCell(counterByColumn, counterByRow).Contains(searchText)) table.SetCell(counterByColumn, counterByRow, "");
        }
    }
}
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Если без смещения нужно, то просто можно затереть ячейку :-)
Пример затирания:
var table = project.Tables["Моя зенно таблица"];  // наша зенно таблица.
var searchText = "like";                          // текст по которому будем искать.

//Очистка таблицы перед работой.
table.Clear();

//Добавляю данные в пустую таблицу.
table.AddRow(new[]{"one","two","three","four"});
table.AddRow(new[]{"one","two","like","four"});
table.AddRow(new[]{"one","two","three","four","five"});

var countColumn = table.ColCount;  // подсчет столбцов в таблице.
var countRow = table.RowCount;     // подсчет строк в таблице.

project.SendInfoToLog($"Количество строк: {countRow}");         // лог в pm.
project.SendInfoToLog($"Количество столбцов: {countColumn}");   // лог в pm.

lock (SyncObjects.TableSyncer)
{
    for (int counterByRow = 0; counterByRow < countRow; counterByRow++)
    {
        for (int counterByColumn = 0; counterByColumn < countColumn; counterByColumn++)
        {
            if (table.GetCell(counterByColumn, counterByRow).Contains(searchText)) table.SetCell(counterByColumn, counterByRow, "");
        }
    }
}
Спасибо буду тестировать. Логичный вопрос в продолжение темы, возможно ли сделать тоже самое, но со смещением? Понимаю через C# возможно всё, наверное стоит тогда спросить насколько сложна реализация данной идеи?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Какой смысл заморачиваться со смещением ячейки ? Если надо сместить в одном столбце, то значит столбцы рядом никак не связаны с этими данными и возникает закономерный вопрос, а нафига пихать в один лист несвязанные данные ? Не проще работать с несколькими листами где все данные связанные и достаточно удалить строку ?
 

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Какой смысл заморачиваться со смещением ячейки ? Если надо сместить в одном столбце, то значит столбцы рядом никак не связаны с этими данными и возникает закономерный вопрос, а нафига пихать в один лист несвязанные данные ? Не проще работать с несколькими листами где все данные связанные и достаточно удалить строку ?
Выше писал, что данные в столбцах естественно не связаны между собой, так как появилась идея заменить списки на таблицы, для компактности в определенных задачах. Если списков (листов) не несколько, а несколько десятков? Кто придумал правило, что в таблице столбцы должны быть как-то взаимосвязаны построчно? В таблице может находиться абсолютно любая информация, которая необходима под конкретную задачу, и с этой информацией ZP желательно бы научиться работать. Во всех остальных случаях с информацией можно творить, буквально, что угодно, а в таблицах, сразу костыли.

ZP без преувеличения гениальный софт, страшно представить какое кол-во трудов и времени ушло на него... и чтобы такой софт не мог полноценно работать с ячейками?
 

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Таблицы в любом случае дают больше возможности работы с информацией, чем списки. Нет смысла ограничивать таблицы, чтобы клиенты работали со списками из-за "потому что", "а зачем", "можно иначе". Пусть клиент сам решит, в какому формате ему удобней работать с информацией.
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
331
Благодарностей
243
Баллы
43
'Костыль' - удалить ячейку, со сдвигом влево:
var tb = project.Tables["tb"];

// Координаты ячейки
int row = 1; // Номер строки
int column = 3; // Столбец
List<string> tmp =  tb.GetRow(row).ToList();
tmp.RemoveAt(column);
tmp.Add("");

for (int i = 0; i < tmp.Count; i++){
    tb.SetCell(i,  row, tmp[i]);
}
 
  • Спасибо
Реакции: material

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Выше писал, что данные в столбцах естественно не связаны между собой, так как появилась идея заменить списки на таблицы, для компактности в определенных задачах. Если списков (листов) не несколько, а несколько десятков? Кто придумал правило, что в таблице столбцы должны быть как-то взаимосвязаны построчно? В таблице может находиться абсолютно любая информация, которая необходима под конкретную задачу, и с этой информацией ZP желательно бы научиться работать. Во всех остальных случаях с информацией можно творить, буквально, что угодно, а в таблицах, сразу костыли.

ZP без преувеличения гениальный софт, страшно представить какое кол-во трудов и времени ушло на него... и чтобы такой софт не мог полноценно работать с ячейками?
Дык никто не заставляет делать так или сяк. :ca:
Просто как это часто бывает, пользователь часто придумывает сложные вещи, которые решаются намного проще. В этом варианте, который предлагается к использованию, не будет доступен функционал сортировки, удаления строки , очистки, так как это затронет все данные. Тем более зенка это софт для автоматического оперирования данными, а операции с отдельной ячейкой (именно удаление и вставка) это больше к ручным операциям относится.
Может поэтому и не делают разрабы , так как не укладывается в концепцию единства данных в строке, которая идет как одна запись данных.
В данном случае, намного проще сделать каталог таблиц, и завести там несколько таблиц 1,2,3...N и при работе с таблицей просто перезакреплять одну и ту же таблицу в зенке к разным файлам.
Преимущества очевидны, простая система указателей, удаление "ячеек" в этой глобальной "таблице" очень простое и быстрое , сохраняется весь функционал работы с таблицами.
Даже появляется очевидный плюс, в одной таблице в одном столбце можно логически разместить аналог списков, а тут этот столбец расширяется аж до таблицы, в которой можно хранить множество связанных данных.
 
  • Спасибо
Реакции: material

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Спасибо буду тестировать. Логичный вопрос в продолжение темы, возможно ли сделать тоже самое, но со смещением? Понимаю через C# возможно всё, наверное стоит тогда спросить насколько сложна реализация данной идеи?
Нууу... Это так-то ресурсоёмкий процесс, если много данных. Но, раз тебе так хочется, Сотору, держи вариант:-)
Супер-костыльный вариант затирания ячеек со смещением данных по горизонтали:
var table = project.Tables["Моя зенно таблица"];  // наша зенно таблица.
var searchText = "like";                          // текст по которому будем искать.

//Очистка таблицы перед работой.
table.Clear();

//Добавляю данные в пустую таблицу.
table.AddRow(new[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"0", "1", "2", "like", "3", "4", "like", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"like", "0", "1", "like", "like", "2", "3", "4", "5", "like", "6", "like", "7", "8", "9", "like", "like"});
table.AddRow(new[]{"like1", "like2", "like3", "like4", "like5", "like6", "like7", "like8", "like9"});

var countRow = table.RowCount;     // подсчет строк в таблице.
var countColumn = table.ColCount;  // подсчет столбцов в таблице.

string cellValue;
bool textTrue;
int emptyPosition;

lock (SyncObjects.TableSyncer)
{
    for (int counterByRow = 0; counterByRow < countRow; counterByRow++)
    {
        emptyPosition = -1;
 
        for (int counterByColumn = 0; counterByColumn < countColumn; counterByColumn++)
        {
            cellValue = table.GetCell(counterByColumn, counterByRow);
            textTrue = cellValue.Contains(searchText);
     
            if (textTrue && emptyPosition == -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                emptyPosition = counterByColumn;
            }
            else if (!textTrue && emptyPosition != -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                table.SetCell(emptyPosition, counterByRow, cellValue);
                emptyPosition++;
            }
            else if (textTrue && emptyPosition != -1) table.SetCell(counterByColumn, counterByRow, "");
        }
    }
}
P.S. Есть нюанс: пустые строки и столбцы удалить не смог по неведомым причинам. Скорее всего баг, напишу в тех. поддержку по этому поводу. А так, можно брать столбец/строку, пройтись по всем элементам коллекции и, если они пустые, то удалить данный столбец/строку. У меня почему-то траблы возникли, то с входящим параметром (хотя, он верный был), то индекс выходит за границы коллекции (хотя, он по факту не выходит). А может и мой косяк был, хз:D

UPD: Не баг, по невнимательности, счетчик не тот воткнул *lol*
 
Последнее редактирование:
  • Спасибо
Реакции: material

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
P.S. Есть нюанс: пустые строки и столбцы удалить не смог по неведомым причинам. Скорее всего баг, напишу в тех. поддержку по этому поводу. А так, можно брать столбец/строку, пройтись по всем элементам коллекции и, если они пустые, то удалить данный столбец/строку. У меня почему-то траблы возникли, то с входящим параметром (хотя, он верный был), то индекс выходит за границы коллекции (хотя, он по факту не выходит). А может и мой косяк был, хз:D
потому что надо удаление делать в цикле от максимума к минимуму, так как при удалении строки будут меняться позиция и общее количество строк. и к концу цикла выйдешь за пределы диапазона. да еще и удалишь не все.
 

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
Спасибо буду тестировать. Логичный вопрос в продолжение темы, возможно ли сделать тоже самое, но со смещением? Понимаю через C# возможно всё, наверное стоит тогда спросить насколько сложна реализация данной идеи?
Всё же мой косяк был, по невнимательности, не тот счетчик случайно воткнул при удалении пустых столбцов и строк:D
Супер-костыльный вариант затирания ячеек со смещением данных по горизонтали, удалением пустых столбцов и строк:
var table = project.Tables["Моя зенно таблица"];  // наша зенно таблица.
var searchText = "like";                          // текст по которому будем искать.

//Очистка таблицы перед работой.
table.Clear();

//Добавляю данные в пустую таблицу.
table.AddRow(new[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"0", "1", "2", "like", "3", "4", "like", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"like", "0", "1", "like", "like", "2", "3", "4", "5", "like", "6", "like", "7", "8", "9", "like", "like"});
table.AddRow(new[]{"like1", "like2", "like3", "like4", "like5", "like6", "like7", "like8", "like9"});
table.AddRow(new[]{"0", "1", "2", "like", "3", "4", "like", "5", "6", "7", "8", "9", "10"});
table.AddRow(new[]{"0", "1", "2", "like", "3", "4", "like", "5", "6", "7", "8", "9"});

var countRow = table.RowCount;     // подсчет строк в таблице.
var countColumn = table.ColCount;  // подсчет столбцов в таблице.

string cellValue;
bool textTrue;
int emptyPosition;

lock (SyncObjects.TableSyncer)
{
    for (int counterByRow = 0; counterByRow < countRow; counterByRow++)
    {
        emptyPosition = -1;

        for (int counterByColumn = 0; counterByColumn < countColumn; counterByColumn++)
        {
            cellValue = table.GetCell(counterByColumn, counterByRow);
            textTrue = cellValue.Contains(searchText);

            if (textTrue && emptyPosition == -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                emptyPosition = counterByColumn;
            }
            else if (!textTrue && emptyPosition != -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                table.SetCell(emptyPosition, counterByRow, cellValue);
                emptyPosition++;
            }
            else if (textTrue && emptyPosition != -1) table.SetCell(counterByColumn, counterByRow, "");
        }
    }

    for (int counter = 0; counter < table.RowCount;)
    {
        if (table.GetRow(counter).Any(x => !string.IsNullOrWhiteSpace(x)))
        {
            counter++;
            continue;
        }
        else table.DeleteRow(counter);
    }

    for (int counter = 0; counter < table.ColCount;)
    {
        if (table.GetColumn(counter).Any(x => !string.IsNullOrWhiteSpace(x)))
        {
            counter++;
            continue;
        }
        else table.DeleteColumn(counter);
    }
}
75711
 
Последнее редактирование:

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Тоже интересно стало накинуть кода на вентилятор )))

C#:
var tab = project.Tables["t"];  //таблица
string delete = "value4";         //Ячейки с каким текстом удаляем
string[] rownew = new string[] {};

for(int i=0; i<tab.RowCount; i++)
{
  
    string[] rowold = tab.GetRow(i).ToArray();//взяли строку в массив

    //создали новый массив, удалив из него элементы которые соотв. удаляемому значению
    for(int j=0; j<rowold.Length; j++)
    {
        if(rowold[j].Equals(delete)) continue;
        rownew = rownew.Concat(new string[] {rowold[j]}).ToArray();
    }
  
    //перезаписали в строку таблицы новый массив
    for(int j=0; j<rownew.Length; j++)
    {
        tab.SetCell(j, i, rownew[j]);
    }
  
    //Если в строке таблицы количество ячеек больше чем в новом массиве,
    //удалили все что за пределами нового массива
    string[] rowcheck = tab.GetRow(i).ToArray();
    if(rownew.Length < rowcheck.Length)
    {
        for(int j=rownew.Length; j<rowcheck.Length; j++)     
        {
            tab.SetCell(j, i, "");
        }
    }
  
    //очистили новый массив для след. строки
    rownew = new string[] {};
  
}
 
  • Спасибо
Реакции: material и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
Тоже интересно стало накинуть кода на вентилятор )))
Аналогично)
C#:
string delete = "text";
lock (SyncObjects.TableSyncer){
    var table = project.Tables["table"];
    for(int i = 0; i < table.RowCount; i++){
        var row = new List<string>(table.GetRow(0).Where(x=>!x.Contains(delete))).Where(x=>!string.IsNullOrEmpty(x)).ToList();
        table.DeleteRow(0);
        if(row.Count > 0)
            table.AddRow(row);
    }
}
 
  • Спасибо
Реакции: material и semafor

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Нууу... Это так-то ресурсоёмкий процесс, если много данных. Но, раз тебе так хочется, Сотору, держи вариант:-)
Супер-костыльный вариант затирания ячеек со смещением данных по горизонтали:
var table = project.Tables["Моя зенно таблица"];  // наша зенно таблица.
var searchText = "like";                          // текст по которому будем искать.

//Очистка таблицы перед работой.
table.Clear();

//Добавляю данные в пустую таблицу.
table.AddRow(new[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"0", "1", "2", "like", "3", "4", "like", "5", "6", "7", "8", "9"});
table.AddRow(new[]{"like", "0", "1", "like", "like", "2", "3", "4", "5", "like", "6", "like", "7", "8", "9", "like", "like"});
table.AddRow(new[]{"like1", "like2", "like3", "like4", "like5", "like6", "like7", "like8", "like9"});

var countRow = table.RowCount;     // подсчет строк в таблице.
var countColumn = table.ColCount;  // подсчет столбцов в таблице.

string cellValue;
bool textTrue;
int emptyPosition;

lock (SyncObjects.TableSyncer)
{
    for (int counterByRow = 0; counterByRow < countRow; counterByRow++)
    {
        emptyPosition = -1;

        for (int counterByColumn = 0; counterByColumn < countColumn; counterByColumn++)
        {
            cellValue = table.GetCell(counterByColumn, counterByRow);
            textTrue = cellValue.Contains(searchText);
    
            if (textTrue && emptyPosition == -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                emptyPosition = counterByColumn;
            }
            else if (!textTrue && emptyPosition != -1)
            {
                table.SetCell(counterByColumn, counterByRow, "");
                table.SetCell(emptyPosition, counterByRow, cellValue);
                emptyPosition++;
            }
            else if (textTrue && emptyPosition != -1) table.SetCell(counterByColumn, counterByRow, "");
        }
    }
}
P.S. Есть нюанс: пустые строки и столбцы удалить не смог по неведомым причинам. Скорее всего баг, напишу в тех. поддержку по этому поводу. А так, можно брать столбец/строку, пройтись по всем элементам коллекции и, если они пустые, то удалить данный столбец/строку. У меня почему-то траблы возникли, то с входящим параметром (хотя, он верный был), то индекс выходит за границы коллекции (хотя, он по факту не выходит). А может и мой косяк был, хз:D

UPD: Не баг, по невнимательности, счетчик не тот воткнул *lol*
Спасибо брат Сатору, встретились вот на форуме :D
 
  • Спасибо
Реакции: SHILY

material

Client
Регистрация
23.03.2021
Сообщения
329
Благодарностей
124
Баллы
43
Ребята всем огромное спасибо за то, что решили "накинуть кода на вентилятор" :D Буду всё тестировать, а то чтобы решить данную задачу пришлось столько костылей наделать, что рук не хватает все удерживать.

P.S.
Всё равно было бы интересно услышать мнение разработчиков по данному поводу. Лишней информация не будет, для общего понимания дела.
 
Последнее редактирование:

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63

Stereotip

Client
Регистрация
19.02.2015
Сообщения
9
Благодарностей
0
Баллы
1
Помогите разобраться где ошибка:
"Компиляция кода Ошибка в действии "CS0029" "Cannot implicitly convert type 'string' to 'int'". [Строка: 2; Cтолбец: 11]"

Мне надо очищать ячейку по координатам. Понимаю, что проблема в типах, но синтаксис не знаю сишарпа. Беру переменную со счетчика - по логике вещей, она должна быть инт...
Вот код:

C#:
var tb = project.Tables["tb"]; // Выбрать таблицу
int row = project.Variables["count"].Value; // Номер строки (получаем значение со счётчика)
int column = 0; // Столбец

tb.SetCell(column, row, ""); // Очистить ячейку
 

SHILY

Client
Регистрация
05.06.2016
Сообщения
258
Благодарностей
307
Баллы
63
C#:
var tb = project.Tables["tb"];
int row = int.Parse(project.Variables["count"].Value);
int column = 0;

tb.SetCell(column, row, "");
 
  • Спасибо
Реакции: Stereotip

Stereotip

Client
Регистрация
19.02.2015
Сообщения
9
Благодарностей
0
Баллы
1
@SHILY спасибо за помощь в предыдущий раз!
Извините за наглость, но может подскажите как здесь привести к нужному типу?)

1. проверяю переменную на пустоту
2. создаю список с текста переменной
3. по циклу вставляю в поле на сайте (по пути обрезаю пробелы)

Ошибка - "Argument 1: cannot convert from 'string' to 'char'"


C#:
if (project.Variables["tegs"].Value != "")
{
    // создать список с тегами
    string[] tegsList = project.Variables["tegs"].Value.Split(",");
    
    foreach(var c in tegsList)
    {
        // ставим курсор
        instance.ActiveTab.FindElementByXPath("//input[@label='Add keywords']", 0).Click();

        // записываем теги
        instance.ActiveTab.FindElementByXPath("//input[@label='Add keywords']", 0).Focus();
        instance.SendText(c.Trim(), 0);
        System.Windows.Forms.SendKeys.SendWait("{ENTER}");
    }
    
}
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 285
Благодарностей
624
Баллы
113
@SHILY спасибо за помощь в предыдущий раз!
Извините за наглость, но может подскажите как здесь привести к нужному типу?)

1. проверяю переменную на пустоту
2. создаю список с текста переменной
3. по циклу вставляю в поле на сайте (по пути обрезаю пробелы)

Ошибка - "Argument 1: cannot convert from 'string' to 'char'"


C#:
if (project.Variables["tegs"].Value != "")
{
    // создать список с тегами
    string[] tegsList = project.Variables["tegs"].Value.Split(",");
   
    foreach(var c in tegsList)
    {
        // ставим курсор
        instance.ActiveTab.FindElementByXPath("//input[@label='Add keywords']", 0).Click();

        // записываем теги
        instance.ActiveTab.FindElementByXPath("//input[@label='Add keywords']", 0).Focus();
        instance.SendText(c.Trim(), 0);
        System.Windows.Forms.SendKeys.SendWait("{ENTER}");
    }
   
}
System.Windows.Forms.SendKeys.SendWait("{ENTER}"); вроде бы у нас принимает char, а {enter} - макрос, который может не поддерживаться в сниппете шарпа.
 

Stereotip

Client
Регистрация
19.02.2015
Сообщения
9
Благодарностей
0
Баллы
1
System.Windows.Forms.SendKeys.SendWait("{ENTER}"); вроде бы у нас принимает char, а {enter} - макрос, который может не поддерживаться в сниппете шарпа.
Изменил на
instance.ActiveTab.KeyEvent("Enter", "press", "");
ошибка та же
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 285
Благодарностей
624
Баллы
113

Stereotip

Client
Регистрация
19.02.2015
Сообщения
9
Благодарностей
0
Баллы
1

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 285
Благодарностей
624
Баллы
113
Там у вас в коде, в 4 строке, вообще создание списка и нет аргументов. Возможно, это ошибка, которую вызывает какой-то другой сниппет в проекте? Либо строка не 4...
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 285
Благодарностей
624
Баллы
113
Тю. Я увидел.

.Split(','); Должно быть.
 
  • Спасибо
Реакции: Stereotip

Stereotip

Client
Регистрация
19.02.2015
Сообщения
9
Благодарностей
0
Баллы
1

mig-z

Client
Регистрация
05.12.2014
Сообщения
305
Благодарностей
71
Баллы
28
Только что проверил, работает. Можно просто записать в ячейку Пустоту. В ПМ будет ругаться, что поле не должно быть пустым, но на деле все работает.
114377
 
  • Спасибо
Реакции: Enikson

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