Головна » 2020 » Січень » 25 » Використання текстових контейнерів (@Text) для редагування таблиць
01:23
Використання текстових контейнерів (@Text) для редагування таблиць

Про те, що таке текстові контейнери @Text написано тут - Текстові списки.
А в даній статті спробуємо більш детально розібратися, як можна використовувати дані функції для редагування таблиць.

Допустимо, є в нас така таблиця

ЇЇ можна отримати через меню Вставка-Таблиця.

І нам потрібно змінити заголовки цієї таблиці. А також прочитати периметр ділянки з відповідної ячейки.

Для вирішення цієї задачі найперше, що нам треба, це ідентифікувати якось цю таблицю, щоб можна було за допомогою скриптів з нею працювати. Якщо на сторінці тільки одна єдина таблиця і більше нічого немає і не було, то це просто, бо тоді таблиця буде під номером 1. Але, якщо на карті, крім таблиці є ще інші об'єкти (ділянка, суміжники, різні написи тощо), то тоді не відомо, який номер цієї таблиці. Тому, щоб визначити її номер, використовуємо функцію:

$SO=@Map.SelectedObject

В результаті в змінну $SO буде записано номер виділеного на карті об'єкта (перед запуском скрипту таблицю треба буде виділити). Тепер ми вже можемо ідентифікувати наш об'єкт (таблицю), бо знаємо його (її) номер.

Та номера об'єкта нам мало. Нам треба якось прочитати вміст цього об'єкта, тобто, вміст таблиці. Для цього дальше використовуємо ще одну функцію:

$Table=@Map.Object[$SO].TableText

В результаті в змінну $Table буде записано весь вміст нашої ($SO) таблиці.
Дальше нам потрібно якось добратися до радка таблиці, який нас цікавить. Для цього вміст таблиці треба перенести у спеціальний текстовий контейнер під назвою @Text:

@Text[1].Text $Table

1 в скобках - це номер контейнера. В програмі доступно аж 63 таких контейнерів, в кожний з яких можна записати потрібну інформацію.

Чому ми перевели вміст таблиці в текстовий контейнер? Тому, що тут з таблицею зручно працювати. Тепер легко можна отримати значення рядка таблиці, який нас цікавить:

$L1=@Text[1].Line[1]
$L2=@Text[1].Line[2]

Відповідно, змінна $L1 отримає значення рядка 1, а змінна $L2 - значення рядка 2 і т.д.

А щоб добратися до конкретної ячейки (стовпця), нам треба вказати:

$J=@StringPart 1$Tab$L1

що буквально означає - частина (@StringPart) 1 між знаками табуляції такого-то рядка (в даному випадку $L1). Щоб отримати значення ячейки 3 рядка 2:

$J=@StringPart 3$Tab$L2

В коді ми використали нову змінну - $Tab. В неї треба записати спеціальний символ (знак табуляції) який розділяє в таблиці колонки. І це треба обов'язково зробити наперед, ще до того, як дана змінна буде використана у скрипті. Тобто, на самому початку скрипту пишемо:

$Tab=@Calc char(9)
$Tab=@DequoteText $Tab

Отже, щоб прочитати периметр ділянки з даної таблиці, нам потрібно написати такий скрипт:

$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
$SO=@Map.SelectedObject
$Table=@Map.Object[$SO].TableText
@Text[1].Text $Table
$L1=@Text[1].Line[7]
$J=@StringPart 4$Tab$L1

@Dialog.Message $J

Тобто, отримаємо значення 4-тої ячейки в рядку 7. Функція @Dialog.Message $J виводить результат на екран.

А тепер допустимо, що ми хочемо змінити заголовок таблиці на такий:

Щоб присвоїти потрібне значення тому чи іншому рядку таблиці можна використати такий скрипт:

$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
$SO=@Map.SelectedObject
$Table=@Map.Object[$SO].TableText
@Text[1].Text $Table
@Text[1].Line[1] №з/п$TabКоордината X$TabКоордината Y$TabВідстань$TabДирекційний кут$TabВнутрішній кут
$Table=@Text[1].Text
@Map.Object[$SO].TableText $Table
@Map.RefreshObject $SO

Тут все так само просто. Після того, як функцією @Text[1].Text $Table занесли вміст таблиці в контейнер, зразу ж, наступним рядком скрипту міняємо значення потрібного нам рядка в текстовому контейнері на нове:

@Text[1].Line[1] №з/п$TabКоордината X$TabКоордината Y$TabВідстань$TabДирекційний кут$TabВнутрішній кут

А потім йдемо у зворотньому порядку:

$Table=@Text[1].Text

Тут ми уже навпаки зчитуємо вміст контейнера, записуючи його значення (вигляд таблиці) у змінну $Table

Тепер цю змінну переносимо уже безпосередньо у нашу таблицю:

@Map.Object[$SO].TableText $Table

І насамкінець візуально оновлюємо на карті нашу таблицю:

@Map.RefreshObject $SO

 

Переглядів: 1203 | Додав: Микола | Рейтинг: 0.0/0
Всього коментарів: 4
avatar
3 Анонімно • 11:18, 01.06.2021
якщо мова йде про стовпець ? чи можливо в таблиці одразу створити новий стовпець або редагувати таблицю не рядками а стовпцями??
avatar
0
4 Микола • 19:35, 01.06.2021
тільки рядками
avatar
1 mrskorobagatyj • 16:53, 23.06.2020
$J=@StringPart 4$Tab$L1 помилка заменіть $L1 на $L
avatar
0
2 Микола • 20:14, 23.06.2020
дякую, виправив
тільки зробив навпаки $L1, бо вище по опису $L1 як рядок 1
avatar