1 (изменено: Крепыш, 2011-07-19 14:51:07)

Тема: JScript: Открытие файла MS Word

Добрый день!

Помогите, пожалуйста, написать скрипт, который:
1) Вызывает диалоговое окно MS Word "Открыть"
2) Открывает (в фоне) выбранный документ
3) Копирует в переменную "Text" весь текст внутри документа (с потерей форматирования, естественно)
4) Закрывает открытый документ

PS: Можно и на VBS (попробую на JScrpt переписать)

2

Re: JScript: Открытие файла MS Word

Примерно так:

Option Explicit

Const wdDialogFileOpen   = 80
Const wdDoNotSaveChanges = 0


Dim strText

With WScript.CreateObject("Word.Application")
    If .Dialogs(wdDialogFileOpen).Show() = -1 Then
        .Visible = False
        
        With .ActiveDocument
            strText = .Range.Text
            .Close wdDoNotSaveChanges
        End With
    End If
    
    .Quit wdDoNotSaveChanges
End With

WScript.Echo strText

WScript.Quit

3

Re: JScript: Открытие файла MS Word

alexii, спасибо!

Можно ли добавить?
1) Чтобы в диалоговом окне сразу был указан путь по умолчанию и маска файла (например, <дата>.docx)
2) При запуске скрипта диалоговое окно открывается позади того окна, из которого был запущен скрипт. Как вывести его на первый план?

4

Re: JScript: Открытие файла MS Word

не надо так делать "ActiveDocument" можно налететь

Я конечно далек от мысли... (с)

5

Re: JScript: Открытие файла MS Word

smaharbA пишет:

не надо так делать "ActiveDocument" можно налететь

А так вот нормально будет?

var FileName;
with (WScript.CreateObject('Word.Application')) {
  with (Documents.Open(FileName)) {
    var strText = Range().Text;
    Close(0)
  }
  Quit()
}
WScript.Echo(strText)

Только надо как-то получить имя открываемого файла из диалогового окна открытия файлов.

6

Re: JScript: Открытие файла MS Word

Крепыш пишет:

1) Чтобы в диалоговом окне сразу был указан путь по умолчанию и маска файла (например, <дата>.docx)

Не вижу ни «пути по умолчанию», ни символов маски в приведённом имени.

Крепыш пишет:

2) При запуске скрипта диалоговое окно открывается позади того окна, из которого был запущен скрипт. Как вывести его на первый план?

Откажитесь от:

…(в фоне)

With WScript.CreateObject("Word.Application")
    .Visible = True
    
    If .Dialogs(wdDialogFileOpen).Show() = -1 Then
        With .ActiveDocument
            …
smaharbA пишет:

не надо так делать "ActiveDocument" можно налететь

Моя твоя не панимай.

7

Re: JScript: Открытие файла MS Word

alexii пишет:

Откажитесь от:

…(в фоне)

With WScript.CreateObject("Word.Application")
    .Visible = True
    
    If .Dialogs(wdDialogFileOpen).Show() = -1 Then
        With .ActiveDocument
            …

Не помогло:
- неудобно
- окно word всё равно открывается позади

alexii пишет:

Не вижу ни «пути по умолчанию», ни символов маски в приведённом имени.

В диалоговом окне, например, путь по умолчанию для открытия файлов должен быть strPath, а имя файла strFileName. Какие именно - не важно, вопрос в другом: надо, чтобы можно было их задавать.

alexii пишет:
smaharbA пишет:

не надо так делать "ActiveDocument" можно налететь

Моя твоя не панимай.

Я думаю, smaharbA хотел сказать, что таким образом скрипт может считать содержимое из другого активного в этот момент документа. Так?

8

Re: JScript: Открытие файла MS Word

Крепыш пишет:

- окно word всё равно открывается позади

У меня — на переднем плане. Хорошо, давайте попробуем ещё «углубить» (см. ниже).

Крепыш пишет:

В диалоговом окне, например, путь по умолчанию для открытия файлов должен быть strPath, а имя файла strFileName. Какие именно - не важно, вопрос в другом: надо, чтобы можно было их задавать.

Ясно. Пробуйте:

Option Explicit

Const msoFileDialogOpen  = 1
Const wdDoNotSaveChanges = 0

Dim strText
Dim strPath
Dim strFileName


strPath     = "C:\Temp\"
strFileName = "*.doc"


With WScript.CreateObject("Word.Application")
    .Visible = True
    .Activate
    
    With .FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .InitialFileName  = strPath & strFileName
        
        If .Show() = -1 Then
            With .Application.Documents.Open(.SelectedItems.Item(1))
                strText = .Range.Text
                .Close wdDoNotSaveChanges
            End With
        End If
    End With
    
    .Quit wdDoNotSaveChanges
End With

WScript.Echo strText

WScript.Quit
Крепыш пишет:

…из другого активного в этот момент документа. Так?

Откуда возьмётся другой активный документ при единственном открытом документе в этом экземпляре WinWord'а? Впрочем, нынче сие уже не важно.

9 (изменено: Крепыш, 2011-07-25 16:40:39)

Re: JScript: Открытие файла MS Word

Попрбовал: Word открывается позади и мигает кнопкой на панели задач (MS Windows 7, MS Office 2007)
Маска для имени файла не применяется. А так хотелось, чтобы в поле "Имя файла" можно было задать маску, типа: "*25.07.2011.doc".
Получилось только задать фильтр:

    With .FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .InitialFileName  = strPath
        .FilterIndex = 2

...

или так:

    With .FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .InitialFileName  = strPath
        .Filters.Add "Свой фильтр", "*.doc; *.docx", 2
        .FilterIndex = 2

...

10

Re: JScript: Открытие файла MS Word

Крепыш, к сожалению, у меня нет доступа к Microsoft Office 2007. Возможно, там сменилась объектная модель в этом отношении. У меня-то как раз маска:

strPath     = "C:\Temp\"
strFileName = "*.doc"
…
        .InitialFileName  = strPath & strFileName

отрабатывает.

Крепыш пишет:

Word открывается позади и мигает кнопкой на панели задач

Значит, таковы настройки Вашей ОС: «запретить «похищать» фокус у активного окна». Как раз вместо этого ОС мигает на панели задач кнопкой приложения, просящего активацию окна.

11

Re: JScript: Открытие файла MS Word

var msoFileDialogOpen  = 1;
var wdDoNotSaveChanges = 0;
var objFSO = WScript.CreateObject('Scripting.FileSystemObject');
var strPath = objFSO.GetParentFolderName(WScript.ScriptFullName);
var strFileName = '*.doc';

with (WScript.CreateObject('Word.Application'))
{
  Visible = true;
  Activate();
  WScript.CreateObject('WScript.Shell').AppActivate('Microsoft Word');
  with (FileDialog(msoFileDialogOpen))
  {
    AllowMultiSelect = false;
    InitialFileName  = objFSO.BuildPath(strPath, strFileName);
    Filters.Clear();
    Filters.Add('Все файлы', '*.*', 1);
    Filters.Add('Документы Word', '*.doc; *.docx', 2);
    FilterIndex = 2;
    if (Show() == -1)
      with (Application.Documents.Open(SelectedItems.Item(1)))
      {
        var strText = Range().Text;
        Close(wdDoNotSaveChanges)
      }
  }
  Quit(wdDoNotSaveChanges)
}
WScript.Echo(strText)

Окно MS Word открывается на первом плане, но заполнить поле "Имя файла" так и не получилось.

12

Re: JScript: Открытие файла MS Word

Окно MS Word открывается на первом плане, но заполнить поле "Имя файла" так и не получилось.

Сожалею. У меня на коде из #8:

Option Explicit

Const msoFileDialogOpen  = 1
Const wdDoNotSaveChanges = 0

Dim strText
Dim strPath
Dim strFileName


strPath     = "C:\Documents and Settings\User\Мои документы\"
strFileName = "Some*.doc"


With WScript.CreateObject("Word.Application")
    .Visible = True
    .Activate
    
    With .FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .InitialFileName  = strPath & strFileName
        
        If .Show() = -1 Then
            With .Application.Documents.Open(.SelectedItems.Item(1))
                strText = .Range.Text
                .Close wdDoNotSaveChanges
            End With
        End If
    End With
    
    .Quit wdDoNotSaveChanges
End With

WScript.Echo strText

WScript.Quit

и окно на переднем плане, и маска работает:
http://img283.imagevenue.com/loc363/th_97414_SomePatternDocs_122_363lo.jpg

13

Re: JScript: Открытие файла MS Word

Крепыш пишет:

Окно MS Word открывается на первом плане, но заполнить поле "Имя файла" так и не получилось.

Судя по вот этой статье это проблема 2007 офиса, если он установлен на Vista и на, исходя из

Крепыш пишет:

Попрбовал: Word открывается позади и мигает кнопкой на панели задач (MS Windows 7, MS Office 2007)

Windows 7. Про hotfix или workaround в статье что-то ничего не сказано.
Крепыш у вас сервис-пак 2 на офис установлен?

14

Re: JScript: Открытие файла MS Word

Spy00000 пишет:

Крепыш у вас сервис-пак 2 на офис установлен?

Не, нету. Windows 7 и Office 2007 без SP.

Сейчас проверил: на Windows XP SP2 и MS Office 2010 открывается на первом плане и поле "Имя файла"заполнено. Вот как-то так.

15

Re: JScript: Открытие файла MS Word

Крепыш пишет:
Spy00000 пишет:

Крепыш у вас сервис-пак 2 на офис установлен?
Не, нету. Windows 7 и Office 2007 без SP.

Стоит попробовать поставить.

16

Re: JScript: Открытие файла MS Word

megaroweb, добро пожаловать на форум! Ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на оформление кода и ссылок, заглавные буквы в начале и точки в конце предложений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder