|
Нужны идеи по заполнению шаблона word в качестве печатной формы документа | ☑ | ||
---|---|---|---|---|
0
happysan
06.11.12
✎
18:08
|
Выдаёт ошибку при заполнении шаблона word и формировании внешней печ формы документа:
Ошибка при установке значения атрибута контекста (Text) Find.Replacement.Text = СокрЛП(ТекстЗамены); по причине: Произошла исключительная ситуация (Microsoft Word): Слишком длинный строковый параметр. Функция замены: Функция WordFindReplace(ОбъектВорд, ТекстПоиска, ТекстЗамены) ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@"; wdReplaceAll = 2; wdFindContinue = 1; Find = ОбъектВорд.Content.Find; Find.Text = ТекстПоиска; Find.Replacement.Text = СокрЛП(ТекстЗамены); Find.Forward = True; Find.Wrap = wdFindContinue; Find.Format = False; Find.MatchCase = False; Find.MatchWholeWord = False; Find.MatchWildcards = False; Find.MatchSoundsLike = False; Find.MatchAllWordForms = False; Find.Execute(, , , , , , , , , , wdReplaceAll) КонецФункции Как обойти проблему? |
|||
1
happysan
06.11.12
✎
18:10
|
пробовал делить строку в цикле по 255 символов, но в итоге результат получается последний кусок текста из 255 символов.
|
|||
2
IamAlexy
06.11.12
✎
18:10
|
не очень понимаю смысла ворда когда табличный документ в формат майкрософтворда может быть успешно сохраненным..
|
|||
3
happysan
06.11.12
✎
18:11
|
вот замена в цикле:
ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@"; wdReplaceAll = 2; wdFindContinue = 1; Find = ОбъектВорд.Content.Find; Find.Text = ТекстПоиска; Если СтрДлина(ТекстЗамены) > 255 Тогда ОстатокТекстаЗамены = СтрДлина(ТекстЗамены); i = 1; Пока ОстатокТекстаЗамены > 255 Цикл ПорцияТекстаНаЗамену255 = Сред(ТекстЗамены, i, 255); Find.Replacement.Text = СокрЛП(ПорцияТекстаНаЗамену255); i = i + 255; ОстатокТекстаЗамены = СтрДлина(ТекстЗамены) - i; КонецЦикла; КонецЕсли; //Find.Replacement.Text = СокрЛП(ТекстЗамены); Find.Forward = True; Find.Wrap = wdFindContinue; Find.Format = False; Find.MatchCase = False; Find.MatchWholeWord = False; Find.MatchWildcards = False; Find.MatchSoundsLike = False; Find.MatchAllWordForms = False; Find.Execute(, , , , , , , , , , wdReplaceAll) |
|||
4
happysan
06.11.12
✎
18:12
|
(2) каким образом?
|
|||
5
acsent
06.11.12
✎
18:12
|
(2) сам то пробовал хоть раз?
|
|||
6
IamAlexy
06.11.12
✎
18:12
|
(5) да.. более чем здорово.
раньше тоже заморачивался всякие трудовые через шаблоны ворда хреначить... а результат тот же что и табличный документ сохраненный в нужном формате |
|||
7
alex-pro
06.11.12
✎
18:13
|
Че-то очень сложно.
Я делал обработку по заполнению договора, с проблемами как в (0) не сталкивался.... могу поискать кусок кода |
|||
8
alex-pro
06.11.12
✎
18:14
|
(6)Попробовал.
"Документ Word 2007 не может содержать более 63 колонок и 32767 строк" |
|||
9
hhhh
06.11.12
✎
18:16
|
(3) так вы Find.Execute не включили в цикл. Чего издеваетесь?
|
|||
10
happysan
06.11.12
✎
18:16
|
(2) сохранять в формате html?
|
|||
11
happysan
06.11.12
✎
18:20
|
(9) если сразу сделать в цикле Find.Execute, то цикл один раз отработает и строка поиска затрётся
|
|||
12
Живой Ископаемый
06.11.12
✎
18:22
|
2(10) почему?
|
|||
13
Живой Ископаемый
06.11.12
✎
18:23
|
2(8) а для ворд-документа очень важно содержать 63 колонки и 32767 строк? Чтобы можно было наверное распечатать все это дело?
|
|||
14
happysan
06.11.12
✎
18:24
|
Может где-то в коде не хватает ПС?
|
|||
15
happysan
06.11.12
✎
18:25
|
(3)Может где-то в коде не хватает ПС?
|
|||
16
acsent
06.11.12
✎
18:26
|
Делай. Заменить(СтрокаПоиска, ТекстЗамены+СтрокаПоиска)
|
|||
17
happysan
06.11.12
✎
18:31
|
(16) применительно к моему коду в (3), можно продемонстрировать?
|
|||
18
sttt
06.11.12
✎
18:40
|
делать людям нечего...
|
|||
19
happysan
06.11.12
✎
18:43
|
(16)у объекта word нет такого метода
|
|||
20
Живой Ископаемый
06.11.12
✎
18:45
|
2(19) поэтому его и не использууют.
а используют только те кто знает как пользоваться find и replace |
|||
21
happysan
06.11.12
✎
18:47
|
(20) ну подсказывайте, коль есть способ решить проблему
|
|||
22
acsent
06.11.12
✎
18:48
|
(17) ну ты совсем обнаглел.
-Вы что и есть за меня будете? -Ага! |
|||
23
Живой Ископаемый
06.11.12
✎
18:49
|
в 2 и 5 подсказали
|
|||
24
happysan
06.11.12
✎
18:53
|
(22) не думаю, просто, этот кусок кода какая-то абстракция в данном случае.
|
|||
25
Живой Ископаемый
06.11.12
✎
18:58
|
надо думать.. если не думать, то ничего не получится.
|
|||
26
happysan
06.11.12
✎
19:02
|
вообщем, решений, не меняя принцип формирования печатной формы, нет?
|
|||
27
zladenuw
06.11.12
✎
19:18
|
c.Find.Execute
While c.Find.Found Debug.Print c.Text '~~> I am assuming that the start word and the end word will only '~~> be in the start and end respectively and not in the middle Debug.Print Replace(Replace(c.Text, StartWord, ""), EndWord, "") c.Find.Execute Wend |
|||
28
KAO111
06.11.12
✎
20:13
|
||||
29
happysan
07.11.12
✎
10:44
|
вообщем сделал так:
ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@"; wdReplaceAll = 2; wdFindContinue = 1; Find = ОбъектВорд.Content.Find; Если СтрДлина(ТекстЗамены) > 231 Тогда ОстатокТекстаЗамены = СтрДлина(ТекстЗамены); i = 1; Пока ОстатокТекстаЗамены > 231 Цикл ПорцияТекстаНаЗамену255 = Сред(ТекстЗамены, i, 231); Find.Forward = True; Find.Wrap = wdFindContinue; Find.Format = False; Find.MatchCase = False; Find.MatchWholeWord = False; Find.MatchWildcards = False; Find.MatchSoundsLike = False; Find.MatchAllWordForms = False; Find.Execute(ТекстПоиска, , , , , , , , ,СокрЛП(ПорцияТекстаНаЗамену255) + ТекстПоиска, wdReplaceAll); i = i + 231; ОстатокТекстаЗамены = СтрДлина(ТекстЗамены) - i; КонецЦикла; КонецЕсли; осталось перенести в word перевод строки как изначально в строке замены, как это можно организовать? |
|||
30
happysan
07.11.12
✎
10:54
|
Как из 1с скомандовать word, чтобы он перенёс строку?
|
|||
31
happysan
07.11.12
✎
11:04
|
получилось:
ТекстПоиска = "@" + СокрЛП(ТекстПоиска) + "@"; wdReplaceAll = 2; wdFindContinue = 1; Find = ОбъектВорд.Content.Find; ОстатокТекстаЗамены = СтрДлина(ТекстЗамены); i = 1; Для Счетчик = 1 По СтрЧислоСтрок(ТекстЗамены) Цикл ТекСтрока = СтрПолучитьСтроку(ТекстЗамены, Счетчик); Find.Forward = True; Find.Wrap = wdFindContinue; Find.Format = False; Find.MatchCase = False; Find.MatchWholeWord = False; Find.MatchWildcards = False; Find.MatchSoundsLike = False; Find.MatchAllWordForms = False; Если Счетчик = СтрЧислоСтрок(ТекстЗамены) Тогда Find.Execute(ТекстПоиска, , , , , , , , ,"" + СокрЛП(ТекСтрока), wdReplaceAll); Иначе Find.Execute(ТекстПоиска, , , , , , , , ,СокрЛП(ТекСтрока) + Символ(13)+Символ(10) + ТекстПоиска, wdReplaceAll); КонецЕсли; КонецЦикла; теперь осталось организовать отступы абзацев, если кто в курсе подсказывайте, буду признателен. |
|||
32
mikecool
07.11.12
✎
11:09
|
(31) поиск в гугле "Объектная модель Word" спасет отца русской демократии
|
|||
33
happysan
07.11.12
✎
12:18
|
тема закрыта, всем благодарен за участие.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |