VB.NET - Создать исключение, когда документ открывается во время каждого цикла * .doc. - PullRequest
0 голосов
/ 27 мая 2011

Хорошо, поэтому я делаю небольшой инструмент, который в основном стирает свойства документа каждого. * Doc файла в указанной папке. Код работает, однако, если документ уже открыт, я получаю текстовое поле, спрашивающее, хочу ли я открыть копию только для чтения и т. Д. Я хочу, чтобы код прерывался, если это произошло, и лучше записать его в файл журнала или что-то. И просто перейдите к следующему файлу. Как я могу это сделать? Я говорю о редактировании тысяч документов.

Это код, который у меня есть:

Импорт Office = Microsoft.Office.Core Импортирует Word = Microsoft.Office.Interop.Word Импортирует System.IO

Public Class Form1
    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Dim oBuiltInProps As Object

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        oWord = CreateObject("Word.Application")
        oWord.Visible = False
    End Sub

    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 fi As IO.FileInfo

        For Each fi In aryFi
            RunRenameProcess(txtBoxRootpath.Text & "\" & fi.ToString)
        Next
    End Sub

    Private Sub RunRenameProcess(ByVal strFile)


        'Create instance of Word and make it visible

        oDoc = oWord.Documents.Open(strFile)

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

        'Set the value of the properties
        oBuiltInProps.Item("Company").Value = "Nothing"

        oDoc.Save()
        oDoc.Close()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        findDocLoop()
    End Sub

1 Ответ

0 голосов
/ 27 мая 2011

Исправлено с помощью этой маленькой функции:)

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...