Автозамена двойного пробела на одинарный во всех ячейках таблицы

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
Здравствуйте уважаемые форумчане!
Есть потребность зеннопостером пройтись по всем ячейкам таблицы и сделать автозамену двойного пробела на одинарный.
Сходу прикрутить на C# не получилось, хотя кажется решение должно быть простым и изящным (циклом на пару строк кода)

Может быть у кого-то есть готовое решение или кто-то знает как его сделать?
Желательно на C#
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 440
Благодарностей
8 672
Баллы
113
Если таблица в текстовом .csv формате, то можно взять содержимое файла в переменную и в ней сделать замену через Обработка текста. На C# тоже можно сделать, как раз наверное двумя строками кода.
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
Если таблица в текстовом .csv формате, то можно взять содержимое файла в переменную и в ней сделать замену через Обработка текста. На C# тоже можно сделать, как раз наверное двумя строками кода.
Увы, не .csv
Google Sheets
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
А, разве гуглотаблицы чем-то отличаются от наших обычных? Хоть и не приходилось с ними сталкиваться, но, думаю, там то же самое. Попробуйте так - должно сработать по обычной таблице, а значит, и по щитсам тоже, я так думаю.
Вы правы, в цикле 2 строки
C#:
for(int i = 0; i < table.RowCount; i++){
    table.AddRow(string.Join(table.ColSeparator, table.GetRow(0)).Replace("  ", " "));
    table.DeleteRow(0);
}
 
  • Спасибо
Реакции: Rimen

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
А, разве гуглотаблицы чем-то отличаются от наших обычных? Хоть и не приходилось с ними сталкиваться, но, думаю, там то же самое. Попробуйте так - должно сработать по обычной таблице, а значит, и по щитсам тоже, я так думаю.
Вы правы, в цикле 2 строки
C#:
for(int i = 0; i < table.RowCount; i++){
    table.AddRow(string.Join(table.ColSeparator, table.GetRow(0)).Replace("  ", " "));
    table.DeleteRow(0);
}
Спасибо, но чуть не то
В моем кейсе сломало таблицу.

возможно из-за переносов строк внутри ячеек таблицы.
т.е. нужно не построчно перебирать (как реализовано в коде который вы предложили) — а по каждой конкретной ячейке
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Попробуйте такую перегрузку. Мое решение было навеяно желанием уместить код в 2 строки и основывалось на прекрасной идее, предложенной sergodjan
C#:
for(int i = 0; i < table.RowCount; i++){
    List<string> row = table.GetRow(0).ToList();
    for(int k=0; k < row.Count; k++){
        row[k] = row[k].Replace("  ", " ");
    }
    table.AddRow(row);
    table.DeleteRow(0);
}
 
  • Спасибо
Реакции: Rimen

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
Получилось финально так:
C#:
IZennoTable table = project.GoogleSpreadsheets["название таблицы"]; //получаю таблицу

for(int i = 0; i < table.RowCount; i++){
    for(int j = 0; j < table.ColCount; j++){
        string stringReplace = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringReplace
        sringReplace = stringReplace.Replace("  "," ");
        //если нужно по регулярке, тогда так: stringReplace = System.Text.RegularExpressions.Regex.Replace(stringReplace, @"\s\s", @"\s");
        table.SetCell(j, i, stringReplace); //записываю измененные данные в ту же ячейку таблицы
    }
}
сработало.
 
  • Спасибо
Реакции: Sergej

Sergej

Client
Регистрация
19.04.2015
Сообщения
38
Благодарностей
4
Баллы
8
Получилось финально так:
C#:
IZennoTable table = project.GoogleSpreadsheets["название таблицы"]; //получаю таблицу

for(int i = 0; i < table.RowCount; i++){
    for(int j = 0; j < table.ColCount; j++){
        string stringReplace = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringReplace
        sringReplace = stringReplace.Replace("  "," ");
        //если нужно по регулярке, тогда так: stringReplace = System.Text.RegularExpressions.Regex.Replace(stringReplace, @"\s\s", @"\s");
        table.SetCell(j, i, stringReplace); //записываю измененные данные в ту же ячейку таблицы
    }
}
сработало.
А к таблице Zennotable это должно сработать?
Нужно удалить определенные слова в таблице. Если сохраняю таблицу в переменную, то потом не могу нормально ее импортировать обратно в таблицу зенки, поэтому вынужден использовать код для этой задачи.

У меня выходит ошибка:
Компиляция кода Ошибка в действии "CS0103" "The name 'sringReplace' does not exist in the current context". [Строка: 6; Cтолбец: 9]


Код:
C#:
IZennoTable table = project.Tables["result_with_original"]; //получаю таблицу

for(int i = 0; i < table.RowCount; i++){
    for(int j = 0; j < table.ColCount; j++){
        string stringReplace = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringReplace
        sringReplace = stringReplace.Replace("Original"," ");
        //если нужно по регулярке, тогда так: stringReplace = System.Text.RegularExpressions.Regex.Replace(stringReplace, @"\s\s", @"\s");
        table.SetCell(j, i, stringReplace); //записываю измененные данные в ту же ячейку таблицы
    }
}
 

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