Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лек 010.doc
Скачиваний:
28
Добавлен:
07.02.2015
Размер:
111.62 Кб
Скачать

Сохранение документов

Сохранять и закрывать документы можно несколькими способами - в зависимости от того, какого результата вы хотите добиться. Для сохранения и закрытия документа вы вызываете методы Save и Close соответственно. Они дают разные результаты в зависимости от того, как именно вы их используете. Если они применяются к объекту Document, их действие распространяется только на соответствущий документ. А если они применяются к набору Documents - на все открытые документы.

  1. Сохранение всех документов Метод Save сохраняет изменения во всех открытых документах, когда применяется к объекту Documents. При этом у вас есть два варианта. Если вы просто вызываете Save набора Documents, пользователю выводится запрос на сохранение всех файлов.

    view source

    print?

    1.' Visual Basic

    2.ThisApplication.Documents.Save()

    3.   

    4.// C#

    5.Object noPrompt = Type.Missing;

    6.Object originalFormat = Type.Missing;

    7.   

    8.ThisApplication.Documents.Save(ref noPrompt, ref originalFormat);

  2. Следующий код устанавливает параметр NoPrompt в True и сохраняет все открытые документы без участия пользователя.

    view source

    print?

    1.' Visual Basic

    2.ThisApplication.Documents.Save(NoPrompt:=True)

    3.   

    4.// C#

    5.Object noPrompt = true;

    6.Object originalFormat = Type.Missing;

    7.ThisApplication.Documents.Save(ref noPrompt, ref originalFormat);

    Совет По умолчанию NoPrompt равен False, поэтому, если вы вызываете Save без NoPrompt в Visual Basic .NET и с указанием вместо него Type.Missing в C#, пользователю выводится запрос на сохранение.

  3. Сохранение единственного документа Метод Save сохраняет изменения в заданном объекте Document. Следующий фрагмент кода показывает два варианта сохранения активного документа:

    view source

    print?

    01.' Visual Basic

    02.' Сохраняем активный документ так…

    03.ThisDocument.Save()

    04.   

    05.' …или так

    06.ThisApplication.ActiveDocument.Save()

    07.   

    08.// C#

    09.// Сохраняем активный документ так…

    10.ThisDocument.Save();

    11.// …или так

    12.ThisApplication.ActiveDocument.Save();

  4. Если вы не знаете точно, активен ли сохраняемый вами документ, ссылайтесь на него по имени. Например:

    view source

    print?

    1.' Visual Basic

    2.ThisApplication.Documents("MyNewDocument.doc").Save()

    3.   

    4.// C#

    5.Object file = "MyNewDocument.doc";

    6.ThisApplication.Documents.get_Item(ref file).Save();

    Совет Хотя разработчики на Visual Basic .NET могут получать элементы различных наборов, используя стандартный синтаксис Visual Basic (вызывая свойство Item или пропуская этот необязательный вызови предоставляя индекс или имя), разработчики на C# этого делать, как правило, не могут. Обычно они должны вызывать скрытый метод get_Item с передачей индекса или имени по ссылке, как в предыдущем примере. Разработчики на C# могут обращаться напрямую лишь к элементам массивов (как в массиве Dialogs, уже показанном в одном из примеров).

  5. Альтернативный синтаксис - использование индекса документа, но он ненадежен по двум причинам. Во-первых, нет уверенности, что индекс вашего документа не изменится, а во-вторых, если документ, на который вы ссылаетесь, еще ни разу не сохранялся, появится диалоговое окно Save As. Следующий код сохраняет первый документ в наборе Documents:

    view source

    print?

    1.' Visual Basic

    2.ThisApplication.Documents(1).Save()

    3.   

    4.// C#

    5.Object file = 1;

    6.ThisApplication.Documents.get_Item(ref file).Save();

  6. SaveAs Метод SaveAs позволяет сохранить документ под другим именем файла. Он требует передачи лишь нового имени файла, а остальные аргументы необязательны. Следующая процедура сохраняет документ в соответствии с "зашитым" в код путем и именем файла. Если файл с таким именем в данной папке уже есть, он "молча" перезаписывается. (Заметьте, что метод SaveAs принимает несколько необязательных параметров, о каждом из которых нужно позаботиться, если вы используете C#.)

view source

print?

01.' Visual Basic

02.' Сохраняем документ. В реальном приложении следует проверять

03.' наличие одноименного файла. В данном случае любой

04.' ранее существовавший документ просто перезаписывается.

05.ThisDocument.SaveAs("c:\test\MyNewDocument.doc")

06.   

07.// C#

08.// Сохраняем документ. В реальном приложении следует проверять

09.// наличие одноименного файла. В данном случае любой

10.// ранее существовавший документ просто перезаписывается.

11.Object fileName = @"C:\Test\MyNewDocument.doc";

12.Object fileFormat = Type.Missing;

13.Object lockComments = Type.Missing;

14.Object password = Type.Missing;

15.Object addToRecentFiles = Type.Missing;

16.Object writePassword = Type.Missing;

17.Object readOnlyRecommended = Type.Missing;

18.Object embedTrueTypeFonts = Type.Missing;

19.Object saveNativePictureFormat = Type.Missing;

20.Object saveFormsData = Type.Missing;

21.Object saveAsAOCELetter = Type.Missing;

22.Object encoding = Type.Missing;

23.Object insertLineBreaks = Type.Missing;

24.Object allowSubstitutions = Type.Missing;

25.Object lineEnding = Type.Missing;

26.Object addBiDiMarks = Type.Missing;

27.   

28.ThisDocument.SaveAs(ref fileName, ref fileFormat, ref lockComments, 

29.  ref password, ref addToRecentFiles, ref writePassword, 

30.  ref readOnlyRecommended, ref embedTrueTypeFonts, 

31.  ref saveNativePictureFormat, ref saveFormsData, 

32.  ref saveAsAOCELetter, ref encoding, ref insertLineBreaks, 

33.  ref allowSubstitutions, ref lineEnding, ref addBiDiMarks);

Закрытие документов

Метод Close позволяет не только закрывать документы, но и сохранять их. Вы можете закрывать документы индивидуально или все сразу.

  1. Закрытие всех документов Применительно к набору Documents метод Close работает аналогично методу Save. При вызове без аргументов он предлагает пользователю сохранить изменения в любых несохраненных документах.

    view source

    print?

    01.' Visual Basic

    02.ThisApplication.Documents.Close()

    03.   

    04.// C#

    05.Object saveChanges = Type.Missing;

    06.Object originalFormat = Type.Missing;

    07.Object routeDocument = Type.Missing;

    08.ThisApplication.Documents.Close(ref saveChanges, 

    09. ref originalFormat, ref routeDocument);

    Как и Save, метод Close принимает необязательный аргумент SaveChanges, у которого есть перечислимое WdSaveOptions с тремя значениями: wdDoNotSaveChanges, wdPromptToSaveChanges и wdSaveChanges. В следующем примере показано, как закрыть все открытые документы с автоматическим сохранением или отбрасыванием изменений:

    view source

    print?

    01.' Visual Basic

    02.' Закрываем все документы с автоматическим сохранением

    03.ThisApplication.Documents.Close( _

    04.  Word.WdSaveOptions.wdSaveChanges)

    05.   

    06.' Закрываем все документы с автоматическим отбрасыванием изменений

    07.ThisApplication.Documents.Close( _

    08.  Word.WdSaveOptions.wdDoNotSaveChanges)

    09.   

    10.// C#

    11.// Закрываем все документы с автоматическим сохранением

    12.Object saveChanges = Word.WdSaveOptions.wdSaveChanges;

    13.Object originalFormat = Type.Missing;

    14.Object routeDocument = Type.Missing;

    15.ThisApplication.Documents.Close(ref saveChanges, 

    16. ref originalFormat, ref routeDocument);

    17.   

    18.// Закрываем все документы с автоматическим отбрасыванием изменений

    19.Object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;

    20.Object originalFormat = Type.Missing;

    21.Object routeDocument = Type.Missing;

    22.ThisApplication.Documents.Close(ref saveChanges, 

    23. ref originalFormat, ref routeDocument);

    Примечание Вызов метода Application.Quit закрывает Word. Но закрытие всех открытых документов не приводит к закрытию Word - он может быть завершен только явным образом.

  2. Закрытие единственного документа Фрагменты кода, приведенные ниже, иллюстрируют, как закрыть активный документ без сохранения изменений и как закрыть документ MyNewDocument, автоматически сохранив изменения:

view source

print?

01.' Visual Basic

02.' Закрываем активный документ без сохранения изменений

03.ThisDocument.Close( _

04.  Word.WdSaveOptions.wdDoNotSaveChanges)

05.   

06.' Закрываем MyNewDocument и "молча" сохраняем изменения

07.ThisApplication.Documents("MyNewDocument.doc").Close( _

08.  Word.WdSaveOptions.wdSaveChanges)

09.   

10.// C#

11.// Закрываем активный документ без сохранения изменений

12.Object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;

13.Object originalFormat = Type.Missing;

14.Object routeDocument = Type.Missing;

15.ThisDocument.Close(ref saveChanges, 

16. ref originalFormat, ref routeDocument);

17.   

18.// Закрываем MyNewDocument и "молча" сохраняем изменения

19.Object name = "MyNewDocument.doc";

20.saveChanges = Word.WdSaveOptions.wdSaveChanges;

21.originalFormat = Type.Missing;

22.routeDocument = Type.Missing;

23.   

24.Word.Document doc = ThisApplication.Documents.get_Item(ref name);

25.ThisDocument.Close(ref saveChanges, 

26. ref originalFormat, ref routeDocument);

Перечисление набора Documents

В большинстве случае вы работаете с индивидуальными документами, и потребности в перечислении всего набора Documents не возникает. Но бывают ситуации, в которых нужно проверять каждый открытый документ и в зависимости от результатов проверки выполнять некую операцию. В таких ситуациях вы можете использовать цикл For Each (в Visual Basic .NET) или foreach (в C#) для перебора всех документов. Внутри этого цикла вы выполняете операции над файлами, если соблюдается какое-то условие или условия. В данном примере код перебирает все открытые документы и, если документ еще не сохранен, сохраняет его.

Вот что делает код в процедуре-примере:

  1. перебирает набор открытых документов;

  2. проверяет значение свойства Saved каждого документа и сохраняет документ, если он еще не сохранен;

  3. получает имя каждого сохраненного документа;

  4. отображает имя каждого сохраненного документа в MessageBox или выводит сообщение о том, что сохранять какие-либо документы не требуется.

view source

print?

01.' Visual Basic

02.Public Sub SaveUnsavedDocuments()

03. ' Перечисляем набор Documents

04. Dim str As String

05. Dim doc As Word.Document

06. Dim sw As New StringWriter

07.   

08. For Each doc In ThisApplication.Documents

09.  If Not doc.Saved Then

10.   ' Сохраняем документ

11.   doc.Save()

12.   sw.WriteLine(doc.Name)

13.  End If

14. Next

15.   

16. str = sw.ToString()

17. If str = String.Empty Then

18.  str = "No documents need saving."

19. End If

20. MessageBox.Show(str, "SaveUnsavedDocuments")

21.End Sub

22.   

23.// C#

24.public void SaveUnsavedDocuments() 

25.{

26. // Перечисляем набор Documents

27. string  str;

28. StringWriter  sw = new StringWriter();

29.   

30. foreach (Word.Document doc in ThisApplication.Documents)

31. {

32.  if (!doc.Saved ) 

33.  {

34.   // Сохраняем документ

35.   doc.Save();

36.   sw.WriteLine(doc.Name);

37.  }

38. } 

39.   

40. str = sw.ToString();

41. if ( str == string.Empty ) 

42. {

43. str = "No documents need saving.";

44. } 

45. MessageBox.Show(str, "SaveUnsavedDocuments");

46.}

Резюме

Word предоставляет богатую объектную модель, которая позволяет программно контролировать Word и создание документов из управляемого кода. Информации, полученной вами, вполне достаточно для решения любой задачи, связанной с созданием документов и их редактированием.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]