Работа с таблицами

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Всем привет!

Обрабатываю таблицу с более чем 20 полями. Таблицу, для удобства, загнал в Excel.
Как бы вытягивать значения в переменные, не прибегая к именам столбцов (A,B,C). Это крайне неудобно при большом количестве полей и если таблица "живая" и развивается - добавляются новые поля. В этом случае, их приходится добавлять только в конец, чтобы не сбить считывание переменных. При этом, логичнее некоторые поля по таблице переместить.
Можно ли как то обращаться по заголовку таблицы?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Ищи заголовок, по нему вычислишь столбец
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
я не знаю, можно ли. можно задать строку ABCDE... и брать оттуда символ по номеру столбца
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Предполагаю, что выход может быть таким:
1. Вводим переменные, по количеству столбцов таблицы (field_var1, field_var2..)
2. Рисуем матрицу - количество столбцов на количество переменных
3. По очереди читаем значение строки 0 по столбцам A,B,C.. и определяем экшенами if, в каком столбце лежат значения конкретной переменной
4. При нахождении нужного значения, в новые переменные пишем значение буквы столбца
5. Присваиваем основным переменным значения через экшен "Прочитать ячейку", в поле "Столбец" ставим нужную переменную field_var..

Невероятно криво и невероятно громоздко, но более элегантное решение пока в голову не лезет.
Для чего есть галка в настройках таблицы "Первая строка - заголовки", вроде бы, логичный ответ - чтобы по заголовкам обращаться к элементам.. И даже обращение по номеру столбца, а не по букве был бы значительно удобнее.

Буду завтра снова ломать мозг, если у кого то есть решение - поделитесь плс.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
Можно через код читать ячейки первой строки, получать их заголовки и потом уже отправлять нужные данные в нужные переменные.

Опция "Первая строка - заголовки" предназначена для того, чтобы в рабочей таблице не удалялись заголовки. Чтобы программа просто пропускала эту строку и работала с остальными.
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
93
Вот такая тестовая таблица.




Дальше пишем код
Код:
var table = project.Tables["cities"];

var names = table.GetRow(0).ToList();
table.DeleteRow(0);

var row = table.GetRow(5).ToList();

for( var i = 0; i < names.Count; i++)
{
    var name = names[i];
    var value = row[i];
  
    if(!project.Variables.Keys.Contains(name))
    {
        //хрен добавишь переменную через код
        //throw(new Exception("Не найдена переменная соотвествующая названию колонки " + name));
        project.SendErrorToLog("Не найдена переменная соотвествующая названию колонки "+ name);
        continue;
    }
  
    project.Variables[name].Value = value;
    project.SendInfoToLog(string.Format("{0} = {1}", name, value), false);
}
Что делаем, читам первую строчку, это будут заголовки.
Удаляем ее, она больше не нужна.

Дальше берем какую то строку, которая нам нужна.
Теперь в цикле проходим по именам, и проверяем, есть ли переменная с таким именем.
Если нет, то или мессага в лог или throw, чтобы шаб остановился.
Как оказалось переменную через код добавить нельзя.))

Ну а дальше получается индекс имени столбца и значения в таблице совпадают.
Поэтому по индексу берем значение из row и кладем в соответствующую переменную.

Имена столбцов в таблице должны совпадать с именами переменных.
Добавил спец. только две переменных, чтобы видно было как отрабатывает код, когда не находит переменную.
 

Вложения

  • 17,5 КБ Просмотры: 167
Регистрация
09.11.2015
Сообщения
264
Благодарностей
10
Баллы
18
Подскажите пожалуйста что делаю не так. В таблице эксель в ячейке пишу 20:25, экшеном беру в переменную, но в переменную падает значение вот такое 30.12.1899 20:25:00
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
нуужно формат ячеек поменять на текстовый. В самой таблице через эксель
 
  • Спасибо
Реакции: Евгений30.85

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