Войти

Показать полную графическую версию : Импорт данных из Word в textbox


Ali002
02-05-2014, 15:00
Доброго времени суток, господа программисты, есть кто шарит в импорте с Word? Импортировать данные только из конкретных поляей, не из таблицы: есть поле и напротив него слова или предложение, вот его то мне и надо получить и вставить в textBoxы. Может подскажете ссылкой пожалуйста!!!!

Iska
02-05-2014, 16:46
Используйте Automation.
Импортировать данные только из конкретных поляей, не из таблицы: есть поле и напротив него слова или предложение, вот его то мне и надо получить »
Образец документа. В нём выделите то, что нужно получить.

Ali002
02-05-2014, 20:56
А можно по подробнее пожалуйста, я просто ни разу не сталкивался с таким

Iska
02-05-2014, 21:31
А можно по подробнее пожалуйста, »
Для этого нужно как минимум понять, что означает:
только из конкретных поляей, не из таблицы: есть поле и напротив него слова или предложение »
Я потому и прошу документ с указанным в нём диапазоном.

Ali002
02-05-2014, 22:34
113104 вот заявка там отмечены поля откуда брать информацию

Iska
02-05-2014, 23:18
Ali002, не очень понятно.

Ладно. Возьмём для примера эту часть:
http://img843.imageshack.us/img843/2834/9pc2.png
Как видно, нам надо получить текст, начинающийся сразу следом за первым полем формы и до конца абзаца. Это может выглядеть так (примеры кода будут на VBScript, но перевести их на любой .Net, поняв общий принцип, труда Вам не составит):
Option Explicit

Const wdCollapseEnd = 0
Const wdParagraph = 4


Dim strDocument

Dim objFSO

Dim objWord
Dim objDocument
Dim objRange


strDocument = "E:\Песочница\0375\заявкаq.doc"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strDocument) Then
Set objWord = WScript.CreateObject("Word.Application") ' Создаём объект Automation
Set objDocument = objWord.Documents.Open(strDocument) ' Открываем документ

Set objRange = objDocument.FormFields.Item(1).Range ' Получаем диапазон поля формы
objRange.Collapse wdCollapseEnd ' Сворачиваем диапазон к его концу
objRange.MoveEnd wdParagraph, 1 ' Перемещаем конец диапазона к концу абзаца

WScript.Echo objRange.Text ' Получаем и выводим текст

Set objRange = Nothing ' Очищаем объект

objDocument.Close ' Закрываем документ
Set objDocument = Nothing ' Очищаем объект

objWord.Quit ' Закрываем Word
Set objWord = Nothing ' Очищаем объект
Else
WScript.Echo "Source document [" & strDocument & "] not found."
WScript.Quit 1
End If

Set objFSO = Nothing

WScript.Quit 0

Можно ориентироваться на номер абзаца, какой-либо опорный текст, оформление и т.п. Главное — найти способ, позволяющий однозначно определять искомый диапазон в документе.

Ali002
03-05-2014, 00:01
Огромное спасибо, вот только с VBScript я вообще не дружу а есть у вас какой нибудь мануал по импорту с ворда ато в инете вообще нету заискался просто даж обычного примерчика

Iska
03-05-2014, 00:09
Не надо дружить. Достаточно просто читать документацию по программному интерфейсу Word.

2003: Microsoft Word Visual Basic Reference (http://msdn.microsoft.com/en-us/library/aa272078(v=office.11).aspx)
2013: Welcome to the Word 2013 developer reference (http://msdn.microsoft.com/en-us/library/office/ee861527(v=office.15).aspx)

Ali002
03-05-2014, 00:14
Благодарю буду ознакамливаться

Ali002
05-05-2014, 14:55
Уважаемый Iska, я пытался переделать ваш код в c # но только у меня это не очень получается , вот вы работаете с полями и там доступ к конкретному полю а я не нашел эквивалента Formfields кроме как Range, только вот что то результата ннету помогите пожалста разобраться

Word.Application application = new Word.Application();
Word.Document document = application.Documents.Open("D:zayavka.doc");
Word.Range rng = document.Paragraphs[1].Range;
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rng.MoveEnd(wdParagraph,1);
name_kompleksTextBox.Text=rng.Text;
rng=null;
document.Close();

// Close word.
application.Quit();

Ali002
05-05-2014, 16:00
Как видно, нам надо получить текст, начинающийся сразу следом за первым полем формы и до конца абзаца. Это может выглядеть так (примеры кода будут на VBScript, но перевести их на любой .Net, поняв общий принцип, труда Вам не составит):
читать дальше » »
Уважаемый Iska, я пытался переделать ваш код в c # но только у меня это не очень получается , вот вы работаете с полями и там доступ к конкретному полю а я не нашел эквивалента Formfields кроме как Range, только вот что то результата ннету помогите пожалста разобраться

Код:
Word.Application application = new Word.Application();
Word.Document document = application.Documents.Open("D:zayavka.doc");
Word.Range rng = document.Paragraphs[1].Range;
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rng.MoveEnd(wdParagraph,1);
name_kompleksTextBox.Text=rng.Text;
rng=null;
document.Close();

// Close word.
application.Quit();

Iska
05-05-2014, 22:04
Ali002, я не знаком с C#.




© OSzone.net 2001-2012