Работа с таблицей *.xlsx в многопотоке.

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
Здравствуйте. Есть код для работы со списками
C#:
IZennoList accs = project.Lists["accounts"];

lock(SyncObjects.ListSyncer) //Блокируем список для работы в многопотоке
{
    string acc = accs[0];
    project.Variables["account"].Value = acc; //Помещаем аккаунт из списка в переменную проекта
    accs.RemoveAt(0); //Удаляем первую строку из списка аккаунтов
    accs.Add(acc); //Добавляем эту же строку в конец списка
}
Я попытался его переработать для работы с таблицей
C#:
IZennoTable accs = project.Tables["Таблица 1"];

lock(SyncObjects.TableSyncer) //Блокируем таблицу для работы в многопотоке
{
    string acc = accs[0];
    project.Variables["account"].Value = acc; //Помещаем аккаунт из списка в переменную проекта
    accs.RemoveAt(0); //Удаляем первую строку из списка аккаунтов
    accs.AddRow(acc); //Добавляем эту же строку в конец списка
}
К сожалению выпадают две ошибки
"Компиляция кода Ошибка в действии "CS0021" "Невозможно применить индексирование через [] к выражению типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoTable"". [Строка: 4; Cтолбец: 18]"]

"Компиляция кода Ошибка в действии "CS1061" ""ZennoLab.InterfacesLibrary.ProjectModel.IZennoTable" не содержит определение для "RemoveAt". Не удалось найти метод расширения "RemoveAt", принимающий первый аргумент типа "ZennoLab.InterfacesLibrary.ProjectModel.IZennoTable" (пропущена директива using или ссылка на сборку?)". [Строка: 6; Cтолбец: 10]"]

Помогите подправить код для работы в многопотоке.
 

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Здравствуйте. Есть код для работы со списками.
Для начала нужно понимать, что ты делаешь ) У листов и таблиц разные методы работы со строками.
для таблиц идёт DeleteRow, во вторых у таблиц не просто string, а string row и надо брать весь массив - GetRow // или GetCell...

Я тебя вижу уже не в первый раз, поэтому: https://zennolab.com/discussion/threads/posilnaja-pomosch-novichkam.81689/ ))

P.S. А ещё бытует мнение, что если работать кубиками экшнов таблицы - там всё залочено по дефолту.. но это не точно ) я тоже всегда через шарп лочу)
 

PROforum

Client
Регистрация
17.08.2014
Сообщения
252
Благодарностей
19
Баллы
18
В многопотоке работает. Сделал так. Правки по коду принимаются.
C#:
IZennoTable accs = project.Tables["Таблица 1"];

lock(SyncObjects.TableSyncer) //Блокируем таблицу для работы в многопотоке
{
    string acc = String.Join(";", accs.GetRow(0)); //Разделяем ячейки
    project.Variables["account"].Value = acc; //Помещаем аккаунт из таблицы в переменную проекта
    accs.DeleteRow(0); //Удаляем первую строку из таблицы аккаунтов
    accs.ColSeparator = ";"; //Собираем ячейки
    accs.AddRow(acc); //Добавляем эту же строку в конец списка
    }
 
  • Спасибо
Реакции: Nike59

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