|
|
|
VB.net Не определен тип Microsoft.Office.Interop.Word.Application
, Хотя подключены все необходимые компоненты.
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Задача: создание документа Word Код:
Dim w As New Microsoft.Office.Interop.Word.Application w.Documents.Open(«C:test.doc») w.ActiveWindow.Selection.TypeText(«Жили у бабуси два весёлых гуся …») w.Documents.Close() w.Quit() Ошибка: Word установлен 2002, в пакете Office XP. Причем, объектная библиотека msword.olb находится в папке office. |
Viper |
|
Senior Member Рейтинг (т): 28 |
А в Reference библиотека нужная прицеплена? |
alt5000 |
|
Цитата Viper @ 20.06.07, 14:53 А в Reference библиотека нужная прицеплена? Да, но я теперь решил использовать метод CreateObject вместо подключения interop. Код следующий:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ‘Dim w As New Microsoft.Office.Interop.Word.Application Dim xls As Object xls = CreateObject(«Word.Application») xls.Documents.Open(«C:test.doc») xls.ActiveWindow.Selection.TypeText(«Жили у бабуси два весёлых гуся …») ‘xls.Documents.visible() ‘xls.Documents.Close() ‘xls.Quit() End Sub Однако при выполнении строки xls.Documents.Open(«C:test.doc») пишет, что файл отсутствует. А как он может отсутствовать, если он только что создан xls = CreateObject(«Word.Application») ? |
Viper |
|
Senior Member Рейтинг (т): 28 |
alt5000, кто тебе сказал, что командой xls = CreateObject(«Word.Application») непременно должен создаться файл «C:test.doc»? Ты всего лишь создаешь соотвествующий объект |
alt5000 |
|
Цитата Viper @ 21.06.07, 06:50 alt5000, кто тебе сказал, что командой xls = CreateObject(«Word.Application») непременно должен создаться файл «C:test.doc»? Ты всего лишь создаешь соотвествующий объект Хорошо, а как создать документ, непосредственно перед его открытием? Не подскажешь… |
Отшельник |
|
отшельник Рейтинг (т): 81 |
Цитата alt5000 @ 22.06.07, 10:51 Хорошо, а как создать документ правда на C#, думаю без проблем переведешь на VB…
Microsoft.Office.Interop.Word.ApplicationClass cWordApp = null; cWordApp = new Microsoft.Office.Interop.Word.ApplicationClass(); // предоставляет доступ к текущему документу Microsoft.Office.Interop.Word.Document cWordDocument = null; cWordDocument = new Microsoft.Office.Interop.Word.DocumentClass(); object msi = System.Reflection.Missing.Value; object cObject = (object) «c:\1.doc»; // ссылка на готовый документ word // открыть готовый документ ( предполагаем что он пустой ) //cWordDocument = cWordApp.Documents.Open2000(ref cObject, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi, ref msi); cWordDocument.Activate(); // активизируем его cWordApp.Visible = true; |
Pit-Bul |
|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xls As Object xls = CreateObject(«Word.Application») xls.Visible = True xls.Documents.Add() xls.ActiveWindow.Selection.TypeText(«Жили у бабуси два весёлых гуся …») xls.Documents.Save(«c:») xls.Documents.Close() xls.Quit() End Sub вот твой вариант |
RDAlex |
|
Full Member Рейтинг (т): 25 |
alt5000 Привет!
Хорошо, а как создать документ, непосредственно перед его открытием? Не подскажешь… Можно так еще
using System.Runtime.InteropServices; using System.Reflection; string appProgID; Type wordType; object obWord; object obDocWord; object obDoc; object[] argsShablon = new object[1]; //используется для открытия готового документа Word argsShablon[0] = @»C:1.doc»; //используется для открытия готового документа Word appProgID = «Word.Application»; wordType = Type.GetTypeFromProgID(appProgID); obWord = Activator.CreateInstance(wordType); obWord.GetType().InvokeMember(«Visible», BindingFlags.SetProperty, null, obWord, new object[] { true }); obDoc = obWord.GetType().InvokeMember(«Documents», BindingFlags.GetProperty, null, obWord, null); obDocWord = obDoc.GetType().InvokeMember(«Add», BindingFlags.InvokeMethod, null, obDoc, argsShablon); //Если используется готовый документ obDocWord = obDoc.GetType().InvokeMember(«Add», BindingFlags.InvokeMethod, null, obDoc, null); //Новый документ Marshal.ReleaseComObject(obWord); Marshal.ReleaseComObject(obDocWord); Marshal.ReleaseComObject(obDoc); GC.GetTotalMemory(true); |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- .NET: Общие вопросы
- Следующая тема
[ Script execution time: 0,0627 ] [ 16 queries used ] [ Generated: 17.04.23, 04:29 GMT ]
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||||||
1 |
||||||||
18.10.2013, 17:23. Показов 6966. Ответов 28 Метки нет (Все метки)
здравствуйте, есть код
на строке Добавлено через 44 минуты
какую надо?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
18.10.2013, 17:23 |
28 |
Заблокирован |
|
18.10.2013, 17:25 |
2 |
Ципихович Эндрю, нам предлагаете догадаться, в какой среде вы запускаете этот код?
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 17:44 [ТС] |
3 |
неа, просто у меня кругозор маленький… далее Visual Basic не юзаю, извините меня пожалуйста Добавлено через 17 минут
0 |
11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
18.10.2013, 17:46 |
4 |
Set ObjectWord = ThisDocument.Application Ну такое пройдёт разве что в макросе ворда, но никак не VB6 Добавлено через 1 минуту
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||
18.10.2013, 17:50 [ТС] |
5 |
|||
ThisDocument — тыщу раз меня к этому приучают, ну не взлетает….??? и как писать Добавлено через 2 минуты
и как писать
так, да??
0 |
Alex77755 11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||||||||||
18.10.2013, 17:52 |
6 |
|||||||||||
Изначально док надо открыть или создать? Добавлено через 35 секунд
Добавлено через 45 секунд
Добавлено через 34 секунды
1 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 17:54 [ТС] |
7 |
а активный как в разработку брать?
0 |
Alex77755 11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||
18.10.2013, 17:59 |
8 |
|||
Там что-то типа Create вроде Добавлено через 2 минуты
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 18:00 [ТС] |
9 |
спасибо, чтобы не гадать может кто другой…
0 |
11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
18.10.2013, 18:01 |
10 |
Значит GetObject
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||||||||||
18.10.2013, 19:35 [ТС] |
11 |
|||||||||||
ну не прёт
Добавлено через 16 минут
Set objDoc = GetObject(, » Word.Application») главное ошибка 429 компонет активХ не может создать объект Добавлено через 1 час 9 минут
тогда на строке
ошибка 13 — несоответствие типов
0 |
Alex77755 11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||
18.10.2013, 19:46 |
12 |
|||
Добавлено через 39 секунд
0 |
Ципихович Эндрю 1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
||||||||
18.10.2013, 20:10 [ТС] |
13 |
|||||||
спасибо пока проверю Добавлено через 14 минут
всё тоже несоответствие типов
0 |
es geht mir gut 11264 / 4746 / 1183 Регистрация: 27.07.2011 Сообщений: 11,437 |
|
18.10.2013, 20:14 |
14 |
Dim objAsWordDocument As Word.Document К чему эти подробности? As Object вполне хватит.
1 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 20:21 [ТС] |
15 |
вроде пошло, а тут objAsObject.ScreenUpdating = False ошибки 438 ещё никогда не было — объект не поддерживает это свойство или метод
0 |
Alex77755 11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
||||||||
18.10.2013, 21:21 |
16 |
|||||||
As Object вполне хватит При раннем связывании, вроде, как помогает с синтаксисом. ошибаюсь? Добавлено через 12 минут As Object вполне хватит. можно даже вообще не объявлять тип!
Добавлено через 2 минуты
0 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 21:24 [ТС] |
17 |
как насчёт
0 |
11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
18.10.2013, 21:38 |
18 |
Так определись сначала: есть ли открытый документ? Если открыт, то проверь в диспетчере задач сколько открыто вордов.
1 |
1508 / 478 / 56 Регистрация: 10.04.2009 Сообщений: 8,008 |
|
18.10.2013, 21:40 [ТС] |
19 |
Сначала закрой все. это обязательно, без этого почему никак? Добавлено через 34 секунды
Так определись сначала: есть ли открытый документ? ну глазам то я верю — есть открытый
0 |
11483 / 3774 / 677 Регистрация: 13.02.2009 Сообщений: 11,148 |
|
18.10.2013, 21:44 |
20 |
По идее можно попробовать программно проверить: если в объекте нет документов, то закрыть его и снова запустить Get. Но это уже для самостоятельной разработки Добавлено через 1 минуту Добавлено через 1 минуту
1 |
Вам необходимо добавить ссылку на библиотеку объектов Microsoft Word (находится в разделе «Параметры проекта» -> «Ссылки» -> «Добавить новую ссылку», а затем на вкладке «Ссылка на COM»).
Делая это, в дополнение к вашему текущему Imports
заявления, должны позаботиться об этом.
Обратите внимание, что после добавления ссылки, оставаясь на странице ссылок в свойствах вашего проекта, вы можете прокрутить список импортированных пространств имен и установить флажок рядом с Microsoft.Office.Interop.Word
и не нужно добавлять Imports
заявления (хотя это все еще хорошая идея использовать их, для удобства чтения).
Кроме того, как Пол упомянул в комментариях выше, вам понадобится Word, установленный на компьютере, на котором вы разрабатываете, и на любом компьютере, на котором запущена ваша программа (не можете открыть Word, если его там нет!).
Как автоматизировать Word из Visual Basic .NET для создания нового документа
Hi Paw,
Welcome to MSDN forums!
You can try Late Binding at runtime to create the component instance/object, which will make your application automatically reference to the new version of the component.
Late Binding means that you don’t need to Add Reference COM component to your project and Import namespace at design time. It will determine the latest version of COM component to create instance at runtime.
Take Word Automation for example:
‘ Create a Word Application instance via late binding
Dim oWord As Object = CreateObject(«Word.Application»)
‘ Create Word Application via early binding
Imports Microsoft.Office.Interop.Word
Dim oWord As Word.Application = New Word.Application
Some tutorials:
Writing Automation clients for multiple Office versions
http://support.microsoft.com/kb/244167
Using early binding and late binding in Automation
http://support.microsoft.com/kb/245115
Trackback: http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/a0d3183d-3ce5-449d-b67d-1fb631a29b23
Best regards,
Martin Xie
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
-
Marked as answer by
Friday, November 27, 2009 3:24 AM
Я не могу открыть документ Microsoft Word на vb.net. У меня есть следующий импорт:
Imports Microsoft.Office
Imports Microsoft.Office.Core
Imports Microsoft.Office.Interop.Word
Когда я пытаюсь вызвать Word в своем коде, я получаю следующую ошибку:
Тип Word.Application не определен
Dim appWord As New Word.Application
Dim docWord As New Word.Document
Мне нужно скачать библиотеку или что-то еще?
2 ответа
Лучший ответ
Вам необходимо добавить ссылку на библиотеку объектов Microsoft Word (находится в разделе «Параметры проекта» -> «Ссылки» -> «Добавить новую ссылку», затем выбрав вкладку «Ссылка на COM»).
Это должно позаботиться об этом в дополнение к вашим текущим операторам Imports
.
Обратите внимание, что после добавления ссылки, все еще находясь на странице ссылок в свойствах проекта, вы можете прокрутить список импортированных пространств имен и установить флажок рядом с Microsoft.Office.Interop.Word
и не должны добавлять операторы Imports
( хотя по-прежнему рекомендуется использовать их для удобства чтения).
Кроме того, как Пол упомянул в комментариях выше, вам понадобится установленный Word на машине, на которой вы разрабатываете, и на любой машине, на которой выполняется ваша программа (нельзя открыть Word, если его там нет!).
Как автоматизировать Word из Visual Basic .NET для создания нового документа
1
RianBattle
10 Авг 2015 в 15:16
Если у вас есть
Imports Microsoft.Office.Interop.Word
Но нет
Imports Microsoft.Office.Interop
Он сообщит, что Word.Application не определен.
Так что либо измените импорт на
Imports Microsoft.Office.Interop
Или измените экземпляр на
Dim appWord as New Application
2
Andrew Mortimer
10 Авг 2015 в 14:49