Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   VB, закрытие открытого файла (http://forum.oszone.net/showthread.php?t=254597)

meateron 21-02-2013 17:56 2096066

VB, закрытие открытого файла
 
Мучаемся часть 2 :)

Имеем открытие файла шаблона .dotx с заполнением bookmark'ов в нем заполненными в форме данными:

Код:

        Dim wApp As Object = CreateObject("Word.Application")
        Dim wdocpath As String = IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "data\pattern_01.dotx")
        FileCopy(wdocpath, Environ("temp") & "\pattern_temp.dotx")
        Dim wDoc As Object = wApp.Documents.Open(Environ("temp") & "\pattern_temp.dotx")
        wDoc.Bookmarks("company").Range.Text = CompanyBox.Text
        wApp.Visible = True
        wApp.ActiveDocument.SaveAs(Environ("userprofile") & "\Documents\" & CompanyBox.Text &  " Документ.docx")

Имена файлов присваиваются в зависимости от внесенного имени фирмы. Так вот, сгенерив на основе шаблона файл, лицезрим его, и ежели опять жамкнуть "ок" (запустить суб создания того же самого файла), то оно понятное дело не сохранит его с этим же самым именем, т.к. такой файл в данный момент открыт и занят. Закрывать файл по окончании нельзя - должен быть открыт.
Вопрос: как закрыть файл при попытке сохранить его (если имена будут совпадать?)

wApp.ActiveDocument.Close не спасает, ещё раз доказывая кривизну рук =(

Iska 21-02-2013 19:09 2096139

meateron, очень непонятно изложено.

meateron 21-02-2013 23:05 2096329

ну.....окей, попроще:

1. имеется textbox, в него вносим значение "кошка", жамкаем на кнопку "ок"
2. создается(открывается из шаблона) файл ворда, сохраняется он "кошка.docx", файл кошка.dotx должен быть в конце открыт перед юзером для его печати/ознакомления
3. если ещё раз запустить создание документа не изменяя значение textbox'a, то откроется вордовский шаблон, не сохранив файл, т.к. он открыт в данный момент.

4(?) как закрыть документ, имя которого задано, учитывая значения в textbox, чтобы внести изменения (по факту в форме много полей для заполнения, имя присваивается пусть по одному полю) и сохранить его с таким же именем?

Iska 21-02-2013 23:31 2096347

Цитата:

Цитата meateron
1. имеется textbox, »

Где имеется? На форме в каком-то другом документе?

Цитата:

Цитата meateron
открывается из шаблона »

Из далее упомянутого шаблона «кошка.dotx»?

Цитата:

Цитата meateron
файл кошка.dotx должен быть в конце открыт перед юзером для его печати/ознакомления »

Зачем? И откуда взялся открытый шаблон?

Или здесь описка и речь про документ «кошка.docx»?

Цитата:

Цитата meateron
если ещё раз запустить создание документа не изменяя значение textbox'a, то откроется вордовский шаблон, не сохранив файл, т.к. он открыт в данный момент. »

Запретите создание нового документа до закрытия созданного (например, сделав недоступной кнопку для запуска процесса создания). Привяжитесь для этого к событию Quit созданного объекта Application.

meateron 22-02-2013 08:07 2096447

имеется на форме,
шаблон не кошка, шаблон пусть шаблон.dotx,
речь всё же уже про кошка.docx, описался %)

запретить создание документа до закрытия созданного.....иногда нужно меняя лишь один из textbox(который участвует в формировании имени файла), сделать несколько разных документов, что выполняется без закрытия получившихся файлов, открывая по новому экземпляру ворда.

VB умеет понимать имена открытых файлов? в autoit'e это всё решилось бы проверкой: а открыт ли файл с именем "$texbox1", если да, то завершить процесс и выполнить действие.

Iska 22-02-2013 15:34 2096744

Цитата:

Цитата meateron
иногда нужно меняя лишь один из textbox(который участвует в формировании имени файла), сделать несколько разных документов, что выполняется без закрытия получившихся файлов, открывая по новому экземпляру ворда. »

Используйте коллекцию, следите за создаваемыми документами.

P.S. Создавать новые экземпляры Word'а необязательно.


Время: 00:21.

Время: 00:21.
© OSzone.net 2001-