Ограничение в OLE
Clarion, Clarion 7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ограничение в OLE
Clarion 5.5EE
Доброго времени суток всем!
Есть проблема и ничего не лезет в голову
имеется поле Cstring(1000), так вот при попытке вывода этого поля в word генерит ошибку "слишком длинный строковый параметр"
Посоветуйте как обойти?
Доброго времени суток всем!
Есть проблема и ничего не лезет в голову
имеется поле Cstring(1000), так вот при попытке вывода этого поля в word генерит ошибку "слишком длинный строковый параметр"
Посоветуйте как обойти?
GuestSS
Re: Ограничение в OLE
Пользуюсь шаблонами SoftMasters при работе c Word
функция Replace имеет ограничение 255 символов
пришлось написать свой метод в классе MSWordClass.ReplaceM
работаю через CLIPBOARD при этом ограничений по размеру нет.
Размер ограничен объемом CLIPBOARD.
нужно добавить эти строки в файл abword.clw
а в файл abword.inc в описание класса MSWordClass добавить эту строку.
шаблоны SoftMasters были ftp.
функция Replace имеет ограничение 255 символов
пришлось написать свой метод в классе MSWordClass.ReplaceM
работаю через CLIPBOARD при этом ограничений по размеру нет.
Размер ограничен объемом CLIPBOARD.
нужно добавить эти строки в файл abword.clw
Код: Выделить всё
MSWordClass.ReplaceM PROCEDURE(STRING Search,STRING Replace)
CODE
SETCLIPBOARD(Replace)
SELF.Search(Search,False,True,False,False,False,False,False,False)
SELF.Paste()
Код: Выделить всё
ReplaceM PROCEDURE(STRING Search,STRING Replace),BYTE,VIRTUAL
С уважением Larion.
Larion
GuestSS
Re: Ограничение в OLE
Все не надо, разобрался без шаблона 
вот кусок текста может кому понадобится
feqOLE=create(0,CREATE:Ole)
feqOLE{Prop:Create}='Word.Application'
feqOLE{Prop:ReportException}=TRUE
feqOLE{'Visible'}=1
feqOLE{'Documents.Open("'&clip(loc:WordFileName)&'")'}
loc:FindStr='[метка]'
setclipboard(ПОЛЕ)
feqOLE{'Selection.Find.ClearFormatting'}
feqOLE{'Selection.Find.Replacement.ClearFormatting'}
feqOLE{'Application.Selection.Find.Execute("'&clip(loc:FindStr)&'", , , , , , 1, 1, ,)'}
feqOLE{'Application.Selection.Paste("'&clip(clipboard())&'")'}
...

вот кусок текста может кому понадобится
feqOLE=create(0,CREATE:Ole)
feqOLE{Prop:Create}='Word.Application'
feqOLE{Prop:ReportException}=TRUE
feqOLE{'Visible'}=1
feqOLE{'Documents.Open("'&clip(loc:WordFileName)&'")'}
loc:FindStr='[метка]'
setclipboard(ПОЛЕ)
feqOLE{'Selection.Find.ClearFormatting'}
feqOLE{'Selection.Find.Replacement.ClearFormatting'}
feqOLE{'Application.Selection.Find.Execute("'&clip(loc:FindStr)&'", , , , , , 1, 1, ,)'}
feqOLE{'Application.Selection.Paste("'&clip(clipboard())&'")'}
...
GuestSS
- Игорь Столяров
- Ветеран движения
- Сообщения: 8081
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Re: Ограничение в OLE
Столкнулся с следующей проблемой.GuestSS писал(а):feqOLE{'Application.Selection.Find.Execute("'&clip(loc:FindStr)&'", , , , , , 1, 1, ,)'}
Если loc:FindStr = 'Название ООО Свисток' - то все работает правильно.
Если loc:FindStr = 'Название ООО "Свисток"' - то операция не работает и это правильно, т.к. кавычки не отрабатываются в строке.
Здесь видимо нужно использовать какой-то символ для замены кавычек на макроподстановку или код, что то вроде {34} или %34% вместо кавычек,
только вот какой ее формат при экспорте в MS Word ? Никто не сталкивался с таким вопросом ?
Заранее спасибо !
Make Clarion Great Again ! 
Игорь Столяров
-
- ✯ Ветеран ✯
- Сообщения: 1040
- Зарегистрирован: 08 Июль 2005, 6:48
- Откуда: Россия
- Поблагодарили: 1 раз
Re: Ограничение в OLE
что-то такое было - надо рыться, а так помнится - в одном случае заменял на какие-то другие символы - типа ` или ``, причем при выводе в ОО и в ворд отображ по разному; в другом случае просто можно было обойтисьт без xls - делал вывод в cvs/xml и проч.
ps
както так
ps
както так
Код: Выделить всё
CheckNameProduct routine ! обработка " кавычек для OpenOff
data
ii long
Simvol string(1)
code
if instring('"',VRD:NameProduct) ! есть хотя бы одни 1 " в наименовании
loop ii = 1 to len(clip(VRD:NameProduct)) !1024
Simvol = sub(VRD:NameProduct,ii,1)
if Simvol = '"'
VRD:NameProduct[ii] = ''''
VRD:NameProduct = sub(VRD:NameProduct,1,ii-1)&''''''&sub(VRD:NameProduct,ii+1,1024)
else
VRD:NameProduct[ii] = Simvol
.
if ~instring('"',VRD:NameProduct) ! есть ещё " в наименовании
break ! нет - выходим
.
.
! stop(VRD:NameProduct)
.
exit
Последний раз редактировалось Ал 08 Июнь 2011, 10:48, всего редактировалось 1 раз.
Ал
- morkovin
- Ветеран
- Сообщения: 936
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
Re: Ограничение в OLE
При работе с MS Word через OfficeTemplates (SoftMaster) всегда использую функцию QuoteOT( входит в OfficeTemplates)Здесь видимо нужно использовать какой-то символ для замены кавычек на макроподстановку или код, что то вроде {34} или %34% вместо кавычек,
Можно посмотреть и из VSA_STR.CLW (free шаблоны от Vincento Sorrenta, кажется):
Код: Выделить всё
vsStringClass.WrapQuotes PROCEDURE(*STRING pText)
CODE
SELF.StripQuotes(pText)
IF INSTRING(' ',(pText & ' '),1)<LEN(CLIP(pText)) OR INSTRING('/',pText,1) OR INSTRING('\',pText,1) OR INSTRING('|',pText,1) OR INSTRING(',',pText,1)
pText = '"' & CLIP(LEFT(pText)) & '"'
RETURN
END
IF NOT(pText)
pText= '""'
RETURN
END
vsStringClass.StripQuotes PROCEDURE(*STRING pText)
CODE
IF pText='""'
pText=''
RETURN
END
IF SUB(pText,1,1)='"' AND SUB(pText,LEN(CLIP(pText)),1)='"' ! There must be a matching quote
pText=SUB(pText,2,LEN(CLIP(pText))-2)
END
WBR, morkovin
morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 8081
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Re: Ограничение в OLE
К чему эта функция ? Ну убрали кавычки и проставили кавычки. Сущность не меняется - при экспорте в MS Word кавычки приводят к сбою экспорта ...
Make Clarion Great Again ! 
Игорь Столяров
- morkovin
- Ветеран
- Сообщения: 936
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
- Контактная информация:
Re: Ограничение в OLE
Если не использую QuoteOT - то действительно 100% сбой.При работе с MS Word через OfficeTemplates (SoftMaster) всегда использую функцию QuoteOT
WBR, morkovin
morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 8081
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Игорь Столяров
-
- ✯ Ветеран ✯
- Сообщения: 5183
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Ограничение в OLE
Я использую двойные кавычки. Типа loc:FindStr = 'Название ООО ""Свисток""'. Ессно, такую строку надо сделать до вставки в Word. Сейчас подниму текст, выложу.
We are hard at work… for you. 

kreator
- Игорь Столяров
- Ветеран движения
- Сообщения: 8081
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Re: Ограничение в OLE
Все супер ! Мне текст не нужен - я его и сам за 5 сек. напишу, мне нужна идея или технология ...
Огромное спасибо ! Это то, что нужно, все работает как и требуется ...
Огромное спасибо ! Это то, что нужно, все работает как и требуется ...

Make Clarion Great Again ! 
Игорь Столяров
-
- ✯ Ветеран ✯
- Сообщения: 5183
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Ограничение в OLE
Вдогонку. Из хелпа.
Value parameters are passed to OLE/OCX objects as strings (except Boolean parameters). Since OLE/OCX objects are supposed to cast their input to the correct data types using a VARIANT mechanism (similar to Clarion's data type conversion), this allows the most compatibility with the least work. Any string which requires a double quote mark (") needs to include two ("").
Value parameters are passed to OLE/OCX objects as strings (except Boolean parameters). Since OLE/OCX objects are supposed to cast their input to the correct data types using a VARIANT mechanism (similar to Clarion's data type conversion), this allows the most compatibility with the least work. Any string which requires a double quote mark (") needs to include two ("").
We are hard at work… for you. 

kreator
Вернуться в «CLARION for Windows»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)