VB.NET - Изменить свойство файла "Компания" и т. Д.? - PullRequest
2 голосов
/ 27 мая 2011

Мне было интересно, как я могу установить свойства файла?Я говорю о полях, авторе, компании и т. Д. Я нашел способ сделать это с помощью встроенных свойств Word.Но это немного глючит.Поэтому мне было интересно, возможно ли сделать это другими способами?

У меня есть этот код, который работает для всех файлов документов Word, кроме формата * .doc.Это код, который у меня есть, одно текстовое поле и одна кнопка.Кнопка запускает findDocLoop ()

    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Dim oBuiltInProps As Object

  Public Sub findDocLoop()
        Dim strRootPath As String
        strRootPath = txtBoxRootpath.Text

        Dim di As New IO.DirectoryInfo(strRootPath)
        Dim aryFi As IO.FileInfo() = di.GetFiles("*.doc")
        Dim aryFi2 As IO.FileInfo() = di.GetFiles("*.dot")
        Dim aryFi3 As IO.FileInfo() = di.GetFiles("*.doc*")

        Dim fi As IO.FileInfo


        For Each fi In aryFi
            If Not fi.FullName.Contains("~$") Then
                RunRenameProcess(txtBoxRootpath.Text & "\" & fi.ToString)
            End If
        Next

        For Each fi In aryFi2
            If Not fi.FullName.Contains("~$") Then
                RunRenameProcess(txtBoxRootpath.Text & "\" & fi.ToString)
            End If
        Next

        For Each fi In aryFi3
            If Not fi.FullName.Contains("~$") Then
                RunRenameProcess(txtBoxRootpath.Text & "\" & fi.ToString)
            End If
        Next

        oDoc = Nothing

        lblDone.Text = "Finished"

    End Sub

    Public Function FileInUse(ByVal sFile As String) As Boolean
        Dim thisFileInUse As Boolean = False
        If System.IO.File.Exists(sFile) Then
            Try
                Using f As New IO.FileStream(sFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
                    thisFileInUse = False
                End Using
            Catch
                thisFileInUse = True
                writeToLog(sFile)
            End Try
        End If
        Return thisFileInUse
    End Function

    Public Sub writeToLog(ByVal strFile As String)
        Dim sContents As String
        sContents = strFile & " - " & DateTime.Now.ToLongTimeString
        SaveTextToFile(sContents, Directory.GetCurrentDirectory & "\errorlog.txt")
    End Sub

    Private Sub RunRenameProcess(ByVal strFile)

        If FileInUse(strFile) = False Then
            'Create instance of Word and make it visible
            'On Error Resume Next
            oDoc = oWord.Documents.Open(strFile)

            'Get the properties collection in file
            oBuiltInProps = oDoc.BuiltInDocumentProperties

            'Set the value of the properties
            oBuiltInProps.Item("Company").Value = txtBoxCompany.Text
            ' AT THIS POINT, THE PROPERTY IS ACTUALLY SET (IF I CHECK IN WORD)

            oDoc.Save()
            ' AT THIS POINT, THE PROPERTY IS RESET TO THE DEFAULT WORD COMPANY VALUE(DOMAIN)
            oDoc.Close()
        End If

    End Sub

Я знаю, что, вероятно, это можно сделать лучше, но я спешу.Я только заметил, когда я устанавливаю точку останова сразу после того, как код устанавливает значение свойства.Я установил Word для открытия, попал туда и проверил значение свойства.И это было на самом деле установлено!Но после фазы сохранения он, похоже, потерян.Или "сбросить" до некоторых значений по умолчанию Office.Какое название моей компании.

1 Ответ

1 голос
/ 27 мая 2011

Думаете, это делает то, что вам нужно? http://msdn.microsoft.com/en-us/magazine/cc163637.aspx

...