VB.net Не определен тип Microsoft.Office.Interop.Word.Application
, Хотя подключены все необходимые компоненты.
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.141] |
|
|
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() Ошибка: Type 'Microsoft.Office.Interop.Word.Application' is not defined. Word установлен 2002, в пакете Office XP. Есть библиотека Interop.Microsoft.Office.Core.dll и Interop.word.dll Причем, объектная библиотека msword.olb находится в папке office. |
|
Сообщ.
#2
,
|
|
|
|
А в Reference библиотека нужная прицеплена?
|
|
|
|
|
|
Цитата Viper @ А в 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") ? |
|
Сообщ.
#4
,
|
|
|
|
alt5000, кто тебе сказал, что командой xls = CreateObject("Word.Application") непременно должен создаться файл "C:\test.doc"? Ты всего лишь создаешь соотвествующий объект
|
|
Сообщ.
#5
,
|
|
|
|
Цитата Viper @ alt5000, кто тебе сказал, что командой xls = CreateObject("Word.Application") непременно должен создаться файл "C:\test.doc"? Ты всего лишь создаешь соотвествующий объект Хорошо, а как создать документ, непосредственно перед его открытием? Не подскажешь... |
|
Сообщ.
#6
,
|
|
|
|
Цитата alt5000 @ Хорошо, а как создать документ правда на 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; |
|
Сообщ.
#7
,
|
|
|
|
![]() ![]() 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 вот твой вариант |
|
Сообщ.
#8
,
|
|
|
|
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); |