Показать сообщение отдельно
Старый 01.12.2011, 13:38   #10  
mandrake is offline
mandrake
Участник
 
18 / 10 (1) +
Регистрация: 30.06.2010
Цитата:
Сообщение от Predatore Посмотреть сообщение
Цитата:
Сообщение от mandrake Посмотреть сообщение
Всем, привет!
Собственно вопрос в теме: как прочитать длинный текст из Excel?

В ячейке excel - текст длиной > 1024 символов. Как его правильно оттуда достать\прочитать из MAV?

С самим excel я работаю через Automation
Следующий код
FORMAT(xlWorkSheet.Range(X+FORMAT(Y)).Text)
вываливается с ошибкой:

---------------------------
Microsoft Dynamics NAV Classic
---------------------------
Длина текстовой строки превосходит размер буфера строки.

---------------------------
OK
---------------------------

Спасибо!
Вообще, одно из требований работы с Automation: принимаемые и возвращаемые типы данных должны соответствовать типам данных в Навижн.
Так написано в документации, т.е. по идее задача не решаема в том виде, в котором поставлена. Но. Во-первых: есть обходной путь позволяющий Наву работать с текстовыми переменными длиннее 1024 символов, копать здесь: http://forum.mazzy.ru/index.php?showtopic=1477
А во-вторых: и именно этот вариант выбрал бы я, можно предварительно разбить переменную на части длинной не более 1024 символов и читать её по частям. Разбивать можно прямо из Нава. Весь код приводить не буду, но мейнстрим подкину. В примере рассматриваю случай строки больше 1024 символов, но меньше 2048. Если строка ещё длиннее, то дальше сами доработаете алгоритм.
С помощью Automation создаёте в экселе формулу, которая вычисляет длину строки =ДЛСТР(X+FORMAT(Y))
и записываете значение в переменную, назовём её strlen.
Далее, с помощью Automation создаёте в экселе, где-нибудь в свободных ячейках формулы
=ЗАМЕНИТЬ (X+FORMAT(Y);1025;strlen;'') //это скопирует в ячейку первые 1024 символа
=ЗАМЕНИТЬ (X+FORMAT(Y);1;1024;'') //это скопирует в ячейку оставшиеся символы
Ну вот собственно и всё, дальше читаете данные без проблем кусками по 1024 символа.

P.S. Есть ещё третий путь. Можно написать свой Automation, который сам будет делить строку на блоки по 1024 символа и возвращать данные через переменные переданные в него по ссылке.
Спасибо! Я как раз в этом направлении формул и работал )))