[SOLVED]Ошибка при переносе строки "Символ новой строки в константе"

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
Весь день убил на эту долбаную ошибку и не могу найти решения, подскажите пожалуйста!!!

На 1 скрине вроде все отрабатывает 22 строка добавляем перенос на новую строку (без него все работает без ошибок)

1 кубик.png


В коде из 2го скрина и выходит ошибка 23 строка

2 кубик где ошибка.png


ну и скрин самой ошибки

Сама ошибка.png


нужно просто переносить строку внутри ячейки после каждого номера

Excel.png
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
В коде переменные нужно указывать в виде project.Variables["имя переменной"].Value, использование {-Variable.имя переменной-} недопустимо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
странно в одном коде и project.Variables["имя переменной"].Value используется и тут же {-Variable.имя переменной-} как так ?
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
В коде переменные нужно указывать в виде project.Variables["имя переменной"].Value, использование {-Variable.имя переменной-} недопустимо.
я понимаю, но я когда использую {-Variable.имя переменной-}, я же не обращаюсь к ней, а просто собираю строку, для дальнейшей записи данных в excel, чтобы в итоге получилась строка типа {-Variable.cur_company_name-}{-String.Tab-}{-Variable.cur_company_adress-}{-String.Tab-}{-Variable.cur_company_phones-}
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
странно в одном коде и project.Variables["имя переменной"].Value используется и тут же {-Variable.имя переменной-} как так ?
{-Variable.имя переменной-} я тут не обращаюсь к переменной, а записываю в строку, чтобы позднее записать в excel
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
я понимаю, но я когда использую {-Variable.имя переменной-}, я же не обращаюсь к ней, а просто собираю строку, для дальнейшей записи данных в excel, чтобы в итоге получилась строка типа {-Variable.cur_company_name-}{-String.Tab-}{-Variable.cur_company_adress-}{-String.Tab-}{-Variable.cur_company_phones-}
таких записей нет в c# , это формат макросов зенки.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
  • Спасибо
Реакции: meriin

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18

Phoenix78

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

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
изначально так и пробовал, та же самая ошибка
Сбросьте весь код с этих двух кубиков - проверю (шаблон не подойдёт, Вы используете другую версию, чем у меня).
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
2й код. попробуй заменить - на \- или фигурки по этому же принципу
 
  • Спасибо
Реакции: Onizuka

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
Сбросьте весь код с этих двух кубиков - проверю (шаблон не подойдёт, Вы используете другую версию, чем у меня).
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
51995

Попробуйте, может быть сразу в коде добавлять данные в табличку, не используя макросы.
Код:
IZennoTable  table = project.Tables["Таблица 1"];
string person = "Вася";
string phone = "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";

lock (SyncObjects.TableSyncer) {

    table.AddRow(new[]{person, phone});
}
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Посмотрел код.
Всё там сводится к формированию нескольких переменных для дальнейшего добавления в табличку.
Сокращённо это выглядеть должно примерно так:
Код:
string str_phones = "+38555556646546;" + "\n" + "+38465456346489" + "; " + "\n";
string str_all_socials  =  "vk.com; " + "\n" +  "fb.com"+ ";"+ "\n";

IZennoTable  table = project.Tables["Таблица 1"];
string[] data = new[] {str_phones, str_all_socials};
lock (SyncObjects.TableSyncer) {
    table.AddRow(data);
}
 
  • Спасибо
Реакции: Onizuka

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
2й код. попробуй заменить - на \- или фигурки по этому же принципу
че-то нето в итоге выходит :

Лесной бункер{/-String.Tab/-}{/-Variable.cur_company_phones/-} все в 1 колонку идет в екселе
 

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
Посмотреть вложение 51995
Попробуйте, может быть сразу в коде добавлять данные в табличку, не используя макросы.
Код:
IZennoTable  table = project.Tables["Таблица 1"];
string person = "Вася";
string phone = "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";
phone += "+1274465465" + ";" + "\n";

lock (SyncObjects.TableSyncer) {

    table.AddRow(new[]{person, phone});
}
ща попробую разобраться, ато я строку добавляю в ексель кубиком "{-Variable.str_for_excel-}" , вот все эти манипуляции и делал чтобы получить строку и ее добавить
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
ща попробую разобраться, ато я строку добавляю в ексель кубиком "{-Variable.str_for_excel-}" , вот все эти манипуляции и делал чтобы получить строку и ее добавить
Избавьтесь от макросов полностью в коде. Как это можно сделать на примере Вашего кода - вот пример реализации:
C#:
string str_for_excel = string.Empty;
string query_fields = project.Variables["query_fields"].Value;
string name = "Название";
string adress = "адрес";
string phones = "телефоны";
string website = "сайт";
string email = "email";
string social = "социальные сети"; 
string mid_rating = "средняя оценка";
string advertisement_link = "ссылка объявления";
string str_all_socials = string.Empty;

string vk = project.Variables["cur_company_vk"].Value;
string fb = project.Variables["cur_company_facebook"].Value;
string inst = project.Variables["cur_company_instagramm"].Value;

List<string> temp = new List<string>();
//Проверяем какие поля ввел пользователь во входящих настройках
if(query_fields.Contains(name)) temp.Add(project.Variables["cur_company_name"].Value);
if(query_fields.Contains(adress)) temp.Add(project.Variables["cur_company_adress"].Value);
if(query_fields.Contains(phones))  temp.Add(project.Variables["cur_company_phones"].Value);
if(query_fields.Contains(website))  temp.Add(project.Variables["cur_company_website"].Value);
if(query_fields.Contains(email))    temp.Add(project.Variables["cur_company_email"].Value);
if(query_fields.Contains(social)){
    List<string> all = new List<string>();
    if(!string.IsNullOrEmpty(vk)) all.Add(vk);//проверяем есть ли вк 
    if(!string.IsNullOrEmpty(fb)) all.Add(fb); //проверяем есть ли фб
    if(!string.IsNullOrEmpty(inst)) all.Add(inst); //проверяем есть ли инстаграм  
    str_all_socials = string.Join(";" , all);
    temp.Add(str_all_socials);
  
}
if(query_fields.Contains(mid_rating))  temp.Add(project.Variables["cur_company_mid_rating"].Value);
if(query_fields.Contains(advertisement_link))  temp.Add(project.Variables["cur_link"].Value);

IZennoTable  table = project.Tables["Таблица 1"];
lock (SyncObjects.TableSyncer) table.AddRow(temp.ToArray());
Но, если Вы настаиваете на использовании макросов - тогда ничем помочь не могу - там тогда нужно экранировать символы, и какие нужно экранировать, какие не нужно - сложно разобраться - в результате такой код будет считаться не надёжным - из-за этого не рекомендуется использовать макросы от слова СОВСЕМ в коде.
Если уж очень хочется - тогда нужно создать отдельные переменные, в которых хранить макросы, и тогда уже эти переменные использовать в нужных местах кода в нормальном виде.
 
  • Спасибо
Реакции: Onizuka

Onizuka

Client
Регистрация
04.09.2019
Сообщения
54
Благодарностей
27
Баллы
18
Избавьтесь от макросов полностью в коде. Как это можно сделать на примере Вашего кода - вот пример реализации:
C#:
string str_for_excel = string.Empty;
string query_fields = project.Variables["query_fields"].Value;
string name = "Название";
string adress = "адрес";
string phones = "телефоны";
string website = "сайт";
string email = "email";
string social = "социальные сети";
string mid_rating = "средняя оценка";
string advertisement_link = "ссылка объявления";
string str_all_socials = string.Empty;

string vk = project.Variables["cur_company_vk"].Value;
string fb = project.Variables["cur_company_facebook"].Value;
string inst = project.Variables["cur_company_instagramm"].Value;

List<string> temp = new List<string>();
//Проверяем какие поля ввел пользователь во входящих настройках
if(query_fields.Contains(name)) temp.Add(project.Variables["cur_company_name"].Value);
if(query_fields.Contains(adress)) temp.Add(project.Variables["cur_company_adress"].Value);
if(query_fields.Contains(phones))  temp.Add(project.Variables["cur_company_phones"].Value);
if(query_fields.Contains(website))  temp.Add(project.Variables["cur_company_website"].Value);
if(query_fields.Contains(email))    temp.Add(project.Variables["cur_company_email"].Value);
if(query_fields.Contains(social)){
    List<string> all = new List<string>();
    if(!string.IsNullOrEmpty(vk)) all.Add(vk);//проверяем есть ли вк
    if(!string.IsNullOrEmpty(fb)) all.Add(fb); //проверяем есть ли фб
    if(!string.IsNullOrEmpty(inst)) all.Add(inst); //проверяем есть ли инстаграм 
    str_all_socials = string.Join(";" , all);
    temp.Add(str_all_socials);
 
}
if(query_fields.Contains(mid_rating))  temp.Add(project.Variables["cur_company_mid_rating"].Value);
if(query_fields.Contains(advertisement_link))  temp.Add(project.Variables["cur_link"].Value);

IZennoTable  table = project.Tables["Таблица 1"];
lock (SyncObjects.TableSyncer) table.AddRow(temp.ToArray());
Но, если Вы настаиваете на использовании макросов - тогда ничем помочь не могу - там тогда нужно экранировать символы, и какие нужно экранировать, какие не нужно - сложно разобраться - в результате такой код будет считаться не надёжным - из-за этого не рекомендуется использовать макросы от слова СОВСЕМ в коде.
Если уж очень хочется - тогда нужно создать отдельные переменные, в которых хранить макросы, и тогда уже эти переменные использовать в нужных местах кода в нормальном виде.
Сделал немного иначе все заработало, спасибо! Ваш код тоже просмотрю и опробую=) Да использовать макросы и не хотелось, просто добавлял строки в ексель через кубик, а там разделитель столбцов и есть максрос, из-за этого без них собрать строку невозможно было и получился такой геморой, надо было просто разобраться как добавлять данные в таблицу через С#, в другом блоке вообще убрал 6 кубиков и заменил ровно 2 строчками кода )))) учиться и учиться еще )

C#:
//Проверяем какие поля ввел пользователь во входящих настройках
if(query_fields.Contains(name)) {
    str_for_excel = project.Variables["cur_company_name"].Value;
}

if(query_fields.Contains(adress)&&project.Variables["cur_company_adress"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_company_adress"].Value;
    
}

if(query_fields.Contains(phones)&&project.Variables["cur_company_phones"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_company_phones"].Value;
    
}

if(query_fields.Contains(website)&&project.Variables["cur_company_website"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_company_website"].Value;
}

if(query_fields.Contains(email)&&project.Variables["cur_company_email"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_company_email"].Value;
}

if(query_fields.Contains(social)) {
    //проверяем есть ли вк
    if(project.Variables["cur_company_vk"].Value!="") {
        str_all_socials = project.Variables["cur_company_vk"].Value;
    }
    //проверяем есть ли фб
    if(project.Variables["cur_company_facebook"].Value!="") {
        str_all_socials = str_all_socials + ";"  + Environment.NewLine + project.Variables["cur_company_facebook"].Value;
    }
    //проверяем есть ли инстаграм
    if(project.Variables["cur_company_instagramm"].Value!=""){
        str_all_socials = str_all_socials + ";"  + Environment.NewLine + project.Variables["cur_company_instagramm"].Value;
    }
    //формируем строку с соц. сетями, // добавить перенос строки
    
    str_for_excel = str_for_excel + "tab" + str_all_socials;
    
}

if(query_fields.Contains(mid_rating)&&project.Variables["cur_company_mid_rating"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_company_mid_rating"].Value;
}

if(query_fields.Contains(advertisement_link)&&project.Variables["cur_link"].Value!="") {
    str_for_excel = str_for_excel + "tab" + project.Variables["cur_link"].Value;
}

table_res.AddRow(str_for_excel);
 
  • Спасибо
Реакции: BAZAg

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