|
Прочитать строки из doc файла....ошибка | ☑ | ||
---|---|---|---|---|
0
Darhon
19.12.13
✎
12:08
|
Добрый день! Подскажите. Есть такой код, он должен перебирать строки и выводить из вордовского файла, код отрабатывает без ошибок, но ничего не выводит. В файле текст есть. Единственно он начинается картинкой, но дальше текст ...
Wk = Новый COMОбъект("Word.Application"); //Покажем открываемый документ Wk.Visible = Истина; Wk.Documents.Open(ИмяФайла); Документ = Wk.ActiveDocument(); // перебирая строки выводим текст Для н = 1 по Документ.Sentences.Count Цикл Текст=Документ.Sentences(н).Text; Сообщить(Текст); КонецЦикла; Документ.Close(); Wk.Quit(); |
|||
1
Apokalipsec
19.12.13
✎
12:09
|
Отладчик не помогает?
|
|||
2
Darhon
19.12.13
✎
12:12
|
А что он мне показывает: количество строк: 234, переменная текст на каждой = '' :((
|
|||
3
Apokalipsec
19.12.13
✎
12:15
|
а что там: Документ.Sentences(н)
и там: Документ.Sentences(н).text ? |
|||
4
Darhon
19.12.13
✎
12:29
|
Документ.Sentences(н).text показывает ''
|
|||
5
Darhon
19.12.13
✎
12:29
|
Документ.Sentences(н) вешает конфигуратор при попытке узнать значение (
|
|||
6
Darhon
19.12.13
✎
12:35
|
Документ.Sentences(н) - COM объект и куча раскрываемых параметров
|
|||
7
Darhon
19.12.13
✎
12:52
|
ясоздал документ просто с цифрами 1234 вывел все ( Может дело в картинке?? или еще где нибудь??
|
|||
8
dk
19.12.13
✎
12:57
|
замени
на
может документ какой-нить подвис в памяти |
|||
9
Torquader
19.12.13
✎
12:59
|
Во-первых, Документ=Wk.Documents.Open(ИмяФайла);
Во-вторых, Лучше использовать Paragraphs(н). Потом, если текста много, то он просто "не влазит" в кадр обмена OLE (насколько я помню, есть такая проблема). Удачи. |
|||
10
dk
19.12.13
✎
13:00
|
можно и просто сообщить(Документ.Текст) вроде
|
|||
11
Darhon
19.12.13
✎
13:01
|
Перезагружал комп не помогло --- врядли подвис.
Заменил, убрал картинку из документа, все равно не читает :(( |
|||
12
Torquader
19.12.13
✎
13:02
|
Предлагается:
Range=Документ.Paragraphs(н); WordList=Range.Words; WordCount=WordList.Count; For i=1 To WordCount Do Word=WordList.Item(i).Text; EndDo; P.S. медленно, но слово больше 255 символов не бывает. |
|||
13
Darhon
19.12.13
✎
13:02
|
(9) а можно ссылку на пример их использования???
|
|||
14
Darhon
19.12.13
✎
13:04
|
(12) а как обрабатывать перевод строки в таком случае??
|
|||
15
dk
19.12.13
✎
13:10
|
(14) параграфы именно переводом строк и разделяются
|
|||
16
Darhon
19.12.13
✎
13:15
|
(12) не взлетело....
|
|||
17
Darhon
19.12.13
✎
13:18
|
Падает вот тут: WordList=Range.Words;
|
|||
18
Torquader
19.12.13
✎
13:19
|
(16) У меня тоже на 2007 не взлетело, но влетело так:
Set Word=CreateObject("Word.Application") Word.Visible=True Set Doc=Word.Documents.Open("C:\WORK\WordTest.doc") Set p=Doc.Paragraphs m=p.Count Set fso=CreateObject("Scripting.FileSystemObject") Set f=fso.CreateTextFile("WordTest.txt",True,0) f.WriteLine("ParCount:" & CStr(m)) For i=1 To m Step 1 Set r=p.Item(i).Range f.WriteLine("Par:" & CStr(i) & vbTab & CStr(r.Text)) Next f.Close() p=Empty Doc.Close Doc=Empty Word.Quit MsgBox "OK",0,"OK" P.S. козлы сделали так, что у Paragraph теперь нету text, а есть только Range, у которой есть Text |
|||
19
Torquader
19.12.13
✎
13:20
|
Кстати, VbScript передал 300 символов без проблем - сейчас попробую сделать поболее.
|
|||
20
Torquader
19.12.13
✎
13:25
|
В общем - 144 килобайта из символов "0123456789" без пробелов пролетело на ура.
Far на такой строке падает с переполнением стека (если её пытаться редактировать). Notepad тормозит просто жутко - а OLE-то передаёт. |
|||
21
Torquader
19.12.13
✎
13:26
|
В общем, в (0) нужно вместо
Текст=Документ.Sentences(н).Text; написать Текст=Документ.Sentences(н).Range.Text; и должно случиться чудо. |
|||
22
Torquader
19.12.13
✎
13:27
|
P.S. в OpenOffice такой проблемы нет - там создаётся "курсор" и бежим по документу, не засоряя память большими кусками.
Мне кажется, самое время - с ним познакомится. |
|||
23
Darhon
19.12.13
✎
13:30
|
(22) Никак не познакомиться, во внутреннем регламенте прописано было микрософт :(((
|
|||
24
Darhon
19.12.13
✎
13:33
|
Текст=Документ.Sentences(н).Range.Text; падает на этой строке
|
|||
25
Torquader
19.12.13
✎
13:33
|
Тогда делай (21) и должно работать.
Только не уверен, что в новом Word-e чего-нить ещё не поменяют. P.S. а наличие свойства объектов, к сожалению, из кода не проверишь - это вам не .Net |
|||
26
Torquader
19.12.13
✎
13:36
|
(24) Отлови исключение через Попытку и посмотри - на всех ли строках падает.
Ну и попробуй через Paragraph как в (18) - у меня текст съели. |
|||
27
Torquader
19.12.13
✎
13:38
|
Картинку в документе "проглотил".
Таблицу тоже (только там чудеса с переводами строк и другими символами). |
|||
28
Darhon
19.12.13
✎
14:21
|
(27) Не-а....не работает :( Можно если ен трудно весь код процедуры?? Может я что-то не так делаю??
|
|||
29
Darhon
19.12.13
✎
14:40
|
Блин.....там текст в таблице :((( И как его вытаскивать :((
|
|||
30
Torquader
19.12.13
✎
14:48
|
(29) Попробуй текст из (18) сначала на VbScript, а потом перепиши в 1С (там только Set стереть, точку с запятой в конце поставить и цикл немного по-другому оформить) - должно взлететь.
Не забываем, что если смотреть на абзацы (Paragraph), то каждая ячейка таблицы может содержать от одного до нескольких параграфов - только вопрос - а что мы хотим прочитать из таблицы ? |
|||
31
Darhon
19.12.13
✎
14:56
|
Нужно вывести документ на форму управляемого приложения. А в виде текста ли или в видк эктивдокумента...в принципе все равно, его редактировать никто не будет из 1с. Думал проще так будет, но что-то не взлетает :) Может есть обходной вариант???
|
|||
32
Torquader
20.12.13
✎
01:08
|
(31) Можно конвертнуть (пересохранить) как html и вывести в поле.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |