Данная команда недоступна так как не открыт ни один документ word

I am Generating XPS document from Word document recursively but I am getting the error below:

Error:

This command is not available because no document is open. at Miscrosoft.office.interop.Word.ApplicationClass.get_ActiveDo‌​cument at Line 65

which is:

wordApp.ActiveDocument.SaveAs2(xpsFile, FileFormat: Word.WdSaveFormat.wdFormatXPS);

I am using the Following Code to convert the Word Files to XPS files

public static string convertWordToXps(string path, string wordDocName)
{
    Word.Application wordApp = new Word.Application();
    wordApp.Documents.Open(string.Concat(path, "\", wordDocName), ConfirmConversions: false, ReadOnly: false);

    string xpsFile = string.Concat(path, "\", Path.GetFileNameWithoutExtension(wordDocName), ".xps");

    try
    {
        //wordApp.ActiveDocument.ExportAsFixedFormat(xpsFileName, WdExportFormat.wdExportFormatXPS, false, WdExportOptimizeFor.wdExportOptimizeForOnScreen, WdExportRange.wdExportAllDocument, 1, 1, WdExportItem.wdExportDocumentContent, false, true, WdExportCreateBookmarks.wdExportCreateNoBookmarks, false, true, false, nullObject);
        wordApp.ActiveDocument.SaveAs2(xpsFile, FileFormat: Word.WdSaveFormat.wdFormatXPS);
        return xpsFile;
    }
    catch (Exception e)
    {
        MessageBox.Show(e.getDetailedErrorMessage());
    }
    finally
    {
        wordApp.Quit(SaveChanges: false, OriginalFormat: Type.Missing, RouteDocument: Type.Missing);
    }
    return null;
}

Search Function

private void SearchDocuments(string directoryPath)
{
    try
    {
        foreach (string fullName in Directory.GetFiles(directoryPath, "*.odt"))
        {
            InstructionsViewModel.convertWordToXps(System.IO.Path.GetDirectoryName(fullName), System.IO.Path.GetFileNameWithoutExtension(fullName));
        }
        foreach (string nestedDirectory in Directory.GetDirectories(directoryPath))
        {
            SearchDocuments(nestedDirectory);
        }
    }
    catch (System.Exception error)
    {

    }
}

I want to convert all the Word files to XPS inside all the folders.

Проблема

При попытке использовать Microsoft Visual Basic for Applications (VBA) для изменения свойств документа появляется одно из приведенных ниже сообщений об ошибке.

Ошибка при выполнении ‘4248’:

Команда недоступна, так как нет открытых документов

Ошибка при выполнении ‘4605’:
Метод или свойство недоступны, поскольку окно документа не активно

или

Ошибка при выполнении ‘5941’:
Запрашиваемый номер семейства не существует

Причина

Проблема возникает, когда нет открытых документов или не открыт документ, на который сделана ссылка. В программе Word предусмотрено изменение свойств только открытых документов.

Примечание. Такие сообщения об ошибках могут появиться также в том случае, если открыт документ, у которого свойство Видимый имеет значение Ложь.

Временное решение

Корпорация Microsoft предлагает примеры программного кода только для иллюстрации и не предоставляет явных или подразумеваемых гарантий относительно их корректной работы в конкретных случаях и в пользовательских приложениях. Примеры в данной статье рассчитаны на пользователя, имеющего достаточный уровень знаний соответствующего языка программирования, а также необходимых средств разработки и отладки. Специалисты служб технической поддержки Microsoft могут пояснить назначение тех или иных конструкций кода в конкретном примере, но модификация примеров и их адаптация к задачам разработчика не поддерживается. Если вам требуется дополнительная консультация по вопросам программирования, вы можете обратиться в службу консалтинга Microsoft или связаться с сертифицированными партнерами компании Microsoft. Дополнительную информацию о партнерах корпорации Microsoft можно найти в Интернете по следующему адресу:

http://www.microsoft.com/partner/referral/ За дополнительной информацией обратитесь к веб-узле корпорации Microsoft по адресу:

http://support.microsoft.com/default.aspx?scid=fh;RU;CNTACTMSЗа дополнительной информацией об использовании приведенных в этой статье примеров обратитесь к следующей статье Microsoft Knowledge Base:

290140 How to Run Sample Code from Knowledge Ниже приведен пример макроса на языке Visual Basic for Applications для изменения значения поля Заголовок в диалоговом окне Свойства. Пример содержит специальный программный код для перехвата ошибок на случай, если нет открытых документов, и вывода соответствующего сообщения.

Sub ChangeDocProperties()

On Error GoTo ErrHandler
ActiveDocument.BuiltInDocumentProperties("Title") = "My Title"
Exit Sub

ErrHandler:
If Err <> 0 Then
'
' Display an error message.
'
MsgBox Err.Description
'
' Clear the error.
'
Err.Clear
Resume Next

End If

End Sub

Приведенный ниже программный код предусмотрен для выполнения следующих целей.

  • Перехват ошибок, если нет открытых документов

    и

  • Создание нового документа при перехвате ошибки

    и

  • Возобновление нормальной работы в строке, вызвавшей появление ошибки

Sub ChangeDocProperties()

On Error GoTo ErrHandler
ActiveDocument.BuiltInDocumentProperties("Title") = "My Title"
Exit Sub

ErrHandler:
If Err <> 0 Then
'
' Add a document.
'
Documents.Add
'
' Clear the error.
'
Err.Clear
'
' Run the code that caused the error.
'
Resume

End If

End Sub

Ссылки

Для получения помощи по работе с Visual Basic обратитесь к следующей статье Microsoft Knowledge Base:

305326 Programming Resources for Visual Basic for Applications

Нужна дополнительная помощь?

Всем привет! Печ. форма формируется через Word. Открывается файл Word, там делаются замены после чего он сохраняется. Все отлично работало, пока не перенес базу на SQL. Причем, если на этом сервере развернуть эту же базу в файловом варианте — все работает. А на SQL — нет. Пробовал давать какие-угодно права пользователю, от имени которого запускается Агент сервера. Запускал его и под встроенной учеткой и под админом… нифига. Вот фрагмент кода, который перестает работать на SQL: по причине: Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ.» Пожалуйста, помогите разобраться в чем дело.

ну а путь к файлу у тебя какой? файл сам где лежит?

Сам Word установлен? Что выдаст ПолучитьCOMОбъект(«», «Word.Application») или ПолучитьCOMОбъект(«d: emp emp.docx»)

ИмяФайлаШаблона — существует ли файл по этому пути, и доступен ли?

Сначала делал так: Потом переделал жестко: ИмяФайлаШаблона = «C:UsersPublicDocuments» + «ШаблонДоговора.docx»; Но не помогло.

Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.

Только выполни на сервере

Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про «C:UsersPublicDocuments» терминального сервера или локальной машины?

Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. Запускаю я все на одном и том же сервере. И Word и 1C установлены на той машине, на которой я работаю. Насчет : в первом случае результат тот же — «ни открыт ни один документ», во втором случае другая ошибка: «{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект) по причине: Ошибка получения объекта COM: Фильтр сообщений выдал диагностику о занятости приложения.»

У тебя и сервер 1С на той же машине стоит?

может как вариант повис на сервере COMОбъект Ворда. посмотри в процессах.

Vladal, Да, я когда разбирался с проблемой, установил все на одну машину. Сервер 1С, SQL и Word. На ней и разбираюсь. zladenuw, ты прав. Там висела целая пачка процессов Word. Я их выбил, но теперь другая ошибка: {ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)    Word = ПолучитьCOMОбъект(ИмяФайлаШаблона); по причине: Ошибка получения объекта COM: Операция прервана

Значит что-то из дочерних процессов может висеть и блокировать. Скорее всего, он ответил на твой последний запрос com-объекта, что его прервали. Повтори через время или для верности перегрузи компьютер.

Я с проблемой второй день бьюсь и не раз перезагружал и даже переустанавливал платформу. Если использовать «Word = Новый COMОбъект(«Word.Application»);», то COM объект создается. Т.е. по идее с СОМ все в порядке. Для полной ясности скажу что стоит: Печатная форма для УТ 11. Хотя непонятно, какое это все имеет отношение к COM объекту… Короче, танцы с бубном продолжаются, спасибо за участие!

Если танцы с бубном не помогут, есть вариант без ворда если у тебя простая замена по тексту на нужные значения. Переименовываешь файл docx в zip, извлекаешь в папку, находишь в подпапках файл с данными в формате xml, производишь в нем замены и назад выполняешь упаковку и переименование.

Pashkaa, это всем бубнам бубен ))) Я уж лучше на файловой версии все оставлю, чем так. Думаю, решение рано или поздно найдется. Буду с разными платформами экспериментировать. Вряд ли я единственный пытаюсь документ Word сформировать из базы 1С на SQL. А судя по тому, что в поиске ничего подобного нет, то ситуация не популярная и легко все может заработать на другой системе или конфигурации. Такие мысли у меня.

напиши сетевую папку. Диск С: лучше не писать. Там есть такая фигня в правах как передача прав подчиненным папкам. Наследование. То есть если ваш админ для диска С: задал неполные права твоему пользователю, то хоть ты застрелись, но хотя и будешь «давать какие-угодно права пользователю» на папку C:UsersPublicDocuments всё равно приоритет у прав на диск С:, которые и применятся.

Посмотри пути. Выполняется наверняка на сервере, значит далеко не факт, что у учетки запуска rphost-a есть права на путь-файл.

Разобрался. Кто бы мог подумать… Как я уже писал, это УТ 11 — т.е. управляемые формы. Перенес выполнение всех операций с объектом «Word = Новый COMОбъект(«Word.Application»)» с сервера на клиент — все заработало. Не спешите кидать тухлыми помидорами типа «конечно, Word не откроется на стороне сервера». Но раньше-то как-то открывался. Именно это меня и пустило по ложному следу. Выходит, доступность методов COM объектов на файловом сервере и SQL — разная. Какой я сделал вывод: Что касается конкретно метода Word.Documents.Open — если база файл-серверная, методу все равно где выполняться, на клиенте или на сервере. Документ открывается и показывается ни смотря ни на что. Но когда я перешел на SQL, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера — ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента — открывает.

сколько можно на эти грабли наступать.

МихаилМ, по-моему не совсем по теме. Сом объект-то создается и остальные методы у него работают. Вы читали ветку или только последнее сообщение? Сколько можно на эти грабли наступать… Сейчас-то конечно все сразу умные станут. )) Что раньше молчали? Давайте без этого.

из >Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. не стыкуется с

Чем же не стыкуется? В я мудрил с самим файлом, а в перенес выполнение кода с сервера на клиент. Короче, флуд пошел…

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

  • Remove From My Forums
  • Question

  • Hello when i am saving word file as a Save as format using c# i got error below i written my code.

              objWord.Documents.Open(ref FileName, ref readOnly, ref missing, ref missing, ref missing, ref missing,
              ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing,
              ref missing, ref missing);
    
              
    
    
              Microsoft.Office.Interop.Word.Document oDoc = objWord.ActiveDocument;
    
              
              
                //For doc
    
              oDoc.ExportAsFixedFormat(filesaveas, WdExportFormat.wdExportFormatPDF, false, WdExportOptimizeFor.wdExportOptimizeForPrint,
                WdExportRange.wdExportAllDocument,1,1,
                WdExportItem.wdExportDocumentWithMarkup, 
                true, true, WdExportCreateBookmarks.wdExportCreateHeadingBookmarks, true, true, true, ref missing);


    Amitsp

    • Moved by

      Wednesday, September 1, 2010 2:30 PM
      not VSTO technology (From:Visual Studio Tools for Office)

Answers

  • Hi Amit,

    Automating Office on the Server is not recommended and supported. Microsoft Office was not designed to accommodate server side automation and, therefore, it is untested and unsupported.

    Please refer to the following knowledge Base article:
    257757 INFO: Considerations for Server-Side Automation of Office
    http://support.microsoft.com/?id=257757


    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.

    • Marked as answer by
      Sidharth Sh — MSFT
      Tuesday, September 7, 2010 9:34 AM

  • Without third party tools means using office automation is possible?

    I think you’re sort of answering that with the problems you’re seeing… I made a couple of suggestions, earlier, how you
    might be able to work around the error message you’re getting. You apparently didn’t try them, as your next post complained about why it works locally, but not from the server. However, if Word is putting up any kind of message and is waiting for user
    input, it’s pretty much a lost cause because you’re not going to be able to solve that reliably, server-side. This is exactly why MS introduced the new file formats — so you wouldn’t need to do this server-side.

    BTW I’m going to move this discussion to the Word Developer forum since you’re definitely not using VSTO. VSTO runs in-process with an Office application, so the kind of issues you’re encountering aren’t really a topic in the VSTO forum.


    Cindy Meister, VSTO/Word MVP

    • Marked as answer by
      Amy Li
      Tuesday, September 7, 2010 7:55 AM

Студворк — интернет-сервис помощи студентам

Возникла проблема. Пишу библиотеку, реализующую взаимодействие документов Word с системой электронного документооборота. Споткнулся на банальной вещи — сохранение текущего документа Word.
Используется Word 2010, PIA 2010, Microsoft.Office.Interop.Word
1)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using Word = Microsoft.Office.Interop.Word
//
 
try
{
        Word.Application WordApp = new Word.Application();
        WordApp.Visible = true;
        Document DocWord = WordApp.Application.ActiveDocument;
        DocWord.SaveAs2(@"D:Test.doc");
        WordApp.Quit();
}
catch(System.Exception ex)
{
        MessageBox.Show(ex.ToString());
}

При выполнении создаёт новый документ и пишет пишет ошибку:
System.Runtime.InteropServices.COMException (0x800A1098). Данная команда недоступна, т.к. не открыт ни один документ.

1) Если инициализацию документа выполнить так:

C#
1
Document DocWord = WordApp.Application.Documents.Add();

То при сохранении с документа, который был только что создан, файл D:Test.doc создаётся, но изменения в нём не сохраняются.

Если открыть уже сохранённый файл D:Test.doc, то будет выведена ошибка:
System.Runtime.InteropServices.COMException (0x800A14EC). Приложению Word не удалось сохранить данный файл, т.к. он используется другим процессом.

2) Если использовать метод Save();

То при выполнении, создаётся новый пустой документ и в нём выдаётся диалог, чтобы его сохранить. Что не корректно. Новый документ ведь не должен создаваться.
Не важно на каком документе выполнять, вновь созданном или уже сохранённом.

3) Если использовать метод SaveAs();

C#
1
DocWord.SaveAs(@"D:Test.doc");

То при выполнении результат одинаков с 1) пунктом.

Может быть кто-нибудь сталкивался с данной проблемой? Подскажите пожалуйста, ибо при гуглении корректных примеров не нашлось.

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

Добрый вечер, уважаемые форумчане.  
Столкнулся со следующей проблемой.  
В 2007 офисе мой код прекрасно работает и выполняет свои функции.  
В 2010 же почему-то не становится документ активным и соответственно макрос вызывает ошибку  
Код прикладываю в файле.  
Буду благодарен любой помощи.  
Заранее спасибо.

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

Вариант 1: не подключена библиотека Microsoft Word 14

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

Подключенные библиотеки:  
Microsoft forms 2.0  
Microsoft Word 14.0  
Microsoft Office 14.0

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

У меня была подобная проблема: делал в Word Закладки и подставлял данные из Excel. При тестировании на домашнем 2007 всё было нормально, а на чужом 2010 что-то не шло (не помню уже что). Победить проблему мне помог ZVI. Сейчас попробую найти тот файл.

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

Через Bookmark когда делал, ошибок не возникало, но сейчас условия изменились и приходится пользоваться find and replace  
Юрий, большое спасибо за помощь.

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

Попробуйте для начала этот код:  
Sub Test()  
 Dim objWord As Object  
 Set objWord = CreateObject(«Word.Application»)  
 objWord.Visible = True  
 objWord.Tasks(«Microsoft Word»).Activate  
 Set objWord = Nothing  
End Sub  
Создаётся новый экземпляр Word и активируется

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

СТранно, добавил часть кода, все равно не работает. Вроде и окно стало активным.  
Sub Test()  
Dim objWord As Object  
Set objWord = CreateObject(«Word.Application»)  
objWord.Visible = True  
objWord.Tasks(«Microsoft Word»).Activate  
objWord.Documents.Add  
   For i = 0 To 1  
               With ActiveDocument.Content.Find  
                   .Text = «1»  
                   .Forward = True  
                   .Execute  
               If .Found = True Then  
               .Replacement.Text = «2»  
               .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue  
               End If  
                End With  
   Next i  
Set objWord = Nothing  
End Sub

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

Но главную задачу — активировать Word — решили? :-)  
А в каком документе искать? Не вижу, чтобы открывался конкретный документ.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Мож я чего…  
objWord.Documents.Add — мы создаем новый док. А дальше:  
For i = 0 To 1  
With ActiveDocument.Content.Find  
.Text = «1» — откуда такому тексту взяться в новом доке?

Я сам — дурнее всякого примера! …

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

К сожалению нет, Word 2010 ругается, что «Данная команда не доступна, так как не открыт ни один документ»  

    В оригинале:  
Set oDoc = oWord.Documents.Add(CurrentPath & «» & Form) ‘запускаем форму  
Для быстроты проверки создал новый файл  
objWord.Documents.Add — мы создаем новый док. А дальше:  
For i = 0 To 1  
With ActiveDocument.Content.Find  
.Text = «1» — откуда такому тексту взяться в новом доке?

 

Юрий М

Модератор

Сообщений: 60577
Регистрация: 14.09.2012

Контакты см. в профиле

Вы сам документ, в котором нужно искать видите? Он должен быть заранее создан.

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

Всем спасибо за помощь. Проблема решена.  
oWord.Tasks(«Microsoft Word»).Activate ‘ делает видимым окно, но не активным  
Этот кусок  
With ActiveDocument.Content.Find  
Заменил на    
With oDoc.Content.Find  
и все заработало.  
Спасибо за помощь

 

Spare

Пользователь

Сообщений: 121
Регистрация: 01.01.1970

{quote}{login=Юрий М}{date=08.09.2012 07:51}{thema=}{post}Вы сам документ, в котором нужно искать видите? Он должен быть заранее создан.{/post}{/quote}  
Да вижу, просто не могу полностью рабочий код выложить, поэтому извините, что немного запутал Вас.

 

EducatedFool

Пользователь

Сообщений: 3631
Регистрация: 23.12.2012

#14

09.09.2012 01:12:03

Если надумаете реализовать более сложное заполнение документов Word (или других файлов) из Excel,  
можете воспользоваться этой надстройкой:  

http://excelvba.ru/programmes/FillDocuments

Понравилась статья? Поделить с друзьями:
  • Данная команда не применима при выделении нескольких диапазонов excel
  • Данная команда не применима для перекрывающихся диапазонов excel
  • Данная команда не применима для нескольких фрагментов excel
  • Данная команда не применима для несвязных диапазонов excel что это
  • Данная команда не применима для несвязанных диапазонов excel