Список в в таблицу

Chingis

Client
Регистрация
09.09.2016
Сообщения
107
Благодарностей
20
Баллы
18
Подскажите как добавить список (например 10 строк) в таблицу,
Проблема в том что при добавлении в таблице постоянно перезаписываются ячейки
upload_2017-10-22_10-17-22.png

то есть записываются всегда только первые 10 строк
а мне нужно чтобы записались первые 10 строк таблицы, потом с 11 по 20 и т.д
каждый раз записывается разное кол-во строк
 

copper12

Client
Регистрация
26.11.2016
Сообщения
1 111
Благодарностей
260
Баллы
63
Строки добавляются из одного и того же списка или из разных?
 

Chingis

Client
Регистрация
09.09.2016
Сообщения
107
Благодарностей
20
Баллы
18
из 1 списка
 

copper12

Client
Регистрация
26.11.2016
Сообщения
1 111
Благодарностей
260
Баллы
63
Таблица привязана к какому либо файлу? Сохраняются изменения в ней?
 

Chingis

Client
Регистрация
09.09.2016
Сообщения
107
Благодарностей
20
Баллы
18
Таблица привязана к какому либо файлу? Сохраняются изменения в ней?
Да таблица привязана к .xls документу, изменения в нем сохраняются, но строки в необходимых столбцах постоянно перезаписываются
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
Да таблица привязана к .xls документу, изменения в нем сохраняются, но строки в необходимых столбцах постоянно перезаписываются
По всей видимости, проблема в логике.
 

Chingis

Client
Регистрация
09.09.2016
Сообщения
107
Благодарностей
20
Баллы
18
Логика проста, берем список (без привязки к txt файлу), далее кладем этот список в таблицу в указанный столбец.
По идее все строки должны ложиться по порядку то есть 1-10 строка, при повторной попытке 11-20 и т.п
Но по факту все время перезаписываются первые 10 строк
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
По идее все строки должны ложиться по порядку то есть 1-10 строка, при повторной попытке 11-20 и т.п
Не факт! С чего Вы вообще решили, что должно быть именно так?
То что Вам нужно можно реализовать в коде. Если в списке не бывает пустых строк, то примерно так:
C#:
IZennoList list = project.Lists["List"];
IZennoTable table = project.Tables["Table"];
string column = "B";

lock (SyncObjects.TableSyncer) {
    int i;
    for (i = 0; i < table.RowCount; i++)
        if (string.IsNullOrEmpty(table.GetCell(column, i))) break;
    for (int j = 0; j < list.Count; j++)
        table.SetCell(column, i + j, list[j]);
}
 
Последнее редактирование:

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
А если бывают пустые ячейки, то логику можно так применить (хотя может это через попу метод):
Берем столбец таблицы в "список_0". Вроде реально так, если верить форуму.
Объединяем "список_0" + "наш список". (тема на форуме)
Возвращаем в таблицу (с заменой) полученный список.
 
  • Спасибо
Реакции: Chingis

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Если могут присутствовать пустые строки или нет:
C#:
IZennoList list = project.Lists["List"];
IZennoTable table = project.Tables["Table"];
string column = "B";

lock (SyncObjects.TableSyncer) {
    int i;
    for (i = table.RowCount; i > 0; i--)
        if (!string.IsNullOrEmpty(table.GetCell(column, i - 1))) break;
    for (int j = 0; j < list.Count; j++)
        table.SetCell(column, i + j, list[j]);
}
 
Последнее редактирование:

Chingis

Client
Регистрация
09.09.2016
Сообщения
107
Благодарностей
20
Баллы
18
C#:
IZennoList list = project.Lists["List"];
IZennoTable table = project.Tables["Table"];
string column = "B";

lock (SyncObjects.TableSyncer) {
    int i;
    for (i = table.RowCount; i > 0; i--)
        if (!string.IsNullOrEmpty(table.GetCell(column, i - 1))) break;
    for (int j = 0; j < list.Count; j++)
        table.SetCell(column, i + j, list[j]);
}
Воспользовался этим способом и все прекрасно стало! Спасибо!
 
  • Спасибо
Реакции: Yuras и Dimionix

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Искал список в таблицу переместить целиком.
Dimionix
Я хочу вас почитать! Подписываюсь!
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Не факт! С чего Вы вообще решили, что должно быть именно так?
То что Вам нужно можно реализовать в коде. Если в списке не бывает пустых строк, то примерно так:
C#:
IZennoList list = project.Lists["List"];
IZennoTable table = project.Tables["Table"];
string column = "B";

lock (SyncObjects.TableSyncer) {
    int i;
    for (i = 0; i < table.RowCount; i++)
        if (string.IsNullOrEmpty(table.GetCell(column, i))) break;
    for (int j = 0; j < list.Count; j++)
        table.SetCell(column, i + j, list[j]);
}
А как этот код переписать, чтобы из Table столбец брался в List?
 
Последнее редактирование:

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Сохраню для себя здесь обратный код, перемещение из таблицы столбца в список.
C#:
string tablename = "Table 1";
string listname = "List";
int column = 0;
project.Lists[listname].Clear();
Enumerable.Range(0, project.Tables[tablename].RowCount).ToList().ForEach(i=>project.Lists[listname].Add(project.Tables[tablename].GetCell(column, i)));
 

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