Имя: Пароль:
1C
1С v8
Прочитать строки из 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
замени

Wk.Documents.Open(ИмяФайла);
Документ = Wk.ActiveDocument();

на

Документ = Wk.Documents.Open(ИмяФайла);

может документ какой-нить подвис в памяти
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 и вывести в поле.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн