Word Interop (COM) Стиль LanguageID не работает - PullRequest
0 голосов
/ 14 октября 2019

У меня есть различные документы, которые имеют определенные стили с неправильным Style.LanguageID. У меня есть код, который должен перебрать все стили в документе и установить для каждого LanguageID значение EnglishUK.

Решено:

        oWord = CreateObject("Word.Application")
        If oWord IsNot Nothing Then
            oWord.Visible = False
            If oWord.Documents IsNot Nothing Then
                Try
                    oDocument = oWord.Documents.Open(strFilePath)
                Catch ex As Exception
                    iCouldntOpen += 1
                    bFailedToOpen = True
                End Try
                If Not bFailedToOpen Then
                    If oDocument IsNot Nothing Then
                        If oDocument.ReadOnly Then
                            iReadonly += 1
                        ElseIf oDocument.HasPassword Then
                            iPassword += 1
                        Else
                            For Each s As Style In oDocument.Styles
                              s.LanguageID = WdLanguageID.wdEnglishUK
                            Next

                            ' save the document
                            oDocument.Save()
                        End If

                        ' close the document
                        oDocument.Close()
                        oDocument = Nothing
                    End If
                    oWord.Quit()
                    oWord = Nothing

                    bFailedToOpen = False
                End If
            Else
                iUnknown += 1
            End If
        Else
            iUnknown += 1
        End If

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Используйте Style.Type, чтобы получить соответствующие стили.

    oWord = CreateObject("Word.Application")
    If oWord IsNot Nothing Then
        oWord.Visible = False
        If oWord.Documents IsNot Nothing Then
            Try
                oDocument = oWord.Documents.Open(strFilePath)
            Catch ex As Exception
                iCouldntOpen += 1
                bFailedToOpen = True
            End Try
            If Not bFailedToOpen Then
                If oDocument IsNot Nothing Then
                    If oDocument.ReadOnly Then
                        iReadonly += 1
                    ElseIf oDocument.HasPassword Then
                        iPassword += 1
                    Else
                        For Each s As Style In oDocument.Styles
                            Select Case s.Type
                                Case WdStyleType.wdStyleTypeCharacter, WdStyleType.wdStyleTypeParagraph, WdStyleType.wdStyleTypeTable
                                    s.NoProofing = False
                                    s.LanguageID = WdLanguageID.wdEnglishUK
                            End Select
                        Next

                        ' save the document
                        oDocument.Save()
                    End If

                    ' close the document
                    oDocument.Close()
                    oDocument = Nothing
                End If
                oWord.Quit()
                oWord = Nothing

                bFailedToOpen = False
            End If
        Else
            iUnknown += 1
        End If
    Else
        iUnknown += 1
    End If
0 голосов
/ 14 октября 2019

Вы создаете приложение Word как объект с поздней привязкой. Это означает, что у вас не будет доступа к intellisense для Word в вашем коде. Это имеет следующие последствия:

Стиль не определен. У вас нет определения того, что такое стиль объекта. Ваш код не может определить, что вы имеете в виду стиль слова из-за позднего связывания. Следовательно, вы видите ошибку.

WdLanguageID.wdEnglishUK является константой Word, которая имеет значение 2507 (& H809), но из-за позднего связывания ваш код не будет знать об этом, и вместо этого у вас будет значение 0.

Решение обеих ваших проблем - правильно определить Style и WdEnglishUK.

...