.GetCellText() в спецификации

Автор Тема: .GetCellText() в спецификации  (Прочитано 3808 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
.GetCellText() в спецификации
« : 20-09-2019, 12:55:27 »
В спецификации в ячейки указано 25,0
.GetCellText()  возвращает просто 25, откидывая ,0.
Почему так возвращает?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #1 : 20-09-2019, 13:12:04 »
Да вроде всё хорошо, возвращает текст в правильном формате:


Надо больше информации

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: .GetCellText() в спецификации
« Ответ #2 : 21-09-2019, 12:12:44 »


как то так

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: .GetCellText() в спецификации
« Ответ #3 : 22-09-2019, 14:02:52 »
Потому что 25.0 - это число 25, а точка и ноль появляются вследствие настроек отображения чисел. Точно не скажу настройки это Ревита или ОС. Так что метод вам возвращает правильно - число 25 будет выглядеть как "25"

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #4 : 22-09-2019, 22:50:53 »
Так, кажется, теперь понятно.

Смотрите, GetCellText возвращает форматированный текст но так, как отображается при вставке на лист, а не в таблице в режиме просмотра спецификации



В свою очередь формат определяется либо в единицах проекта (вкладка "Управление"), либо переопределяется для конкретного столбца в спецификации



Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: .GetCellText() в спецификации
« Ответ #5 : 23-09-2019, 08:42:49 »
Александр Пекшев aka Modis, в таблице он отображает 25,0. Если к элементу обращаться и забирать значение диаметра - возвращает 25,0. А считывание текста из ячейки просто 25.

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: .GetCellText() в спецификации
« Ответ #6 : 23-09-2019, 08:52:06 »
Александр Игнатович,

из-за вот этого кривит так?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #7 : 23-09-2019, 10:41:43 »
Ну тут баг (?) именно в отображении в строках спецификации в табличном представлении. Потому как метод всё правильно возвращает в соответствии с настройками единиц измерения. Вытащите спецификацию на лист, будет отображать "25"

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: .GetCellText() в спецификации
« Ответ #8 : 23-09-2019, 14:03:03 »
Александр Игнатович, только с диаметра он забирает в другом месте 25,0, в итоге ключи не совпадают. Если в форматировании делать округление до 1 знака после запятой, пустая строка остается.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #9 : 23-09-2019, 14:04:39 »
В каком другом месте?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: .GetCellText() в спецификации
« Ответ #10 : 23-09-2019, 14:06:41 »
Вообще в апи два метода GetCellText - один принимает два параметра, а другой три параметра.
Так вот если почитать справку про первый из них (а я чувствую, что его и использовали), то там приписано:
Цитировать
For standard view schedules, to read the formatted text of the cell regardless of cell type, use [!:Autodesk::Revit::DB::ViewSchedule::GetCellText()] .

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #11 : 23-09-2019, 14:17:04 »
Ну вообще-то, это методы разных объектов. Первый, про который говорим, у самого ViewSchedule, второй - у TableSectionData, причем у второй работает только для типов ячеек CellType.Text или CellType.ParameterText.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: .GetCellText() в спецификации
« Ответ #12 : 23-09-2019, 14:24:53 »
Ну можно сделать как-то так:
Код - C# [Выбрать]
  1. if (double.TryParse(v, out var d))
  2.     return $"{d:0.0}";
  3. else return v;

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: .GetCellText() в спецификации
« Ответ #13 : 23-09-2019, 14:34:56 »
Александр Игнатович, в элементе (lookupparameter("Диаметр"))  забирает 25,0. Даже если форматирования столбцы поставить галочку использовать параметры проекта, все равно считывает 25 просто..
Магия какая-то...

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: .GetCellText() в спецификации
« Ответ #14 : 23-09-2019, 14:38:36 »
Эээ... Метод возвращает форматированный текст в соответствии с настройками единиц измерения в проекте или переопределенными настройками в столбце. Гляньте пример выше, там ещё и "25 мм" возвращает. Значение параметра - double, к тому же во внутренних единицах измерения, это как тёплое с мокрым сравнивать