Почему я получаю ошибку: System.Runtime.InteropServices.COMException? - PullRequest
2 голосов
/ 21 января 2009

Я использую VB.NET для создания ярлыков в Microsoft. Это мой код:

Public Sub CreateLabel(ByVal StrFilter As String, ByVal Path As String)
    WordApp = CreateObject("Word.Application")
    ''Add a new document.
    WordDoc = WordApp.Documents.Add()
    Dim oConn As SqlConnection = New SqlConnection(connSTR)
    oConn.Open()

    Dim oCmd As SqlCommand
    Dim oDR As SqlDataReader
    oCmd = New SqlCommand(StrFilter, oConn)
    oDR = oCmd.ExecuteReader

    Dim intI As Integer
    Dim FilePath As String = ""
    With WordDoc.MailMerge
        With .Fields
            Do While oDR.Read
                For intI = 0 To oDR.FieldCount - 1
                    .Add(WordApp.Selection.Range, oDR.Item(intI))
                Next
            Loop
        End With
        Dim objAutoText As Word.AutoTextEntry = WordApp.NormalTemplate.AutoTextEntries.Add("MyLabelLayout", WordDoc.Content)
        WordDoc.Content.Delete()
        .MainDocumentType = Word.WdMailMergeMainDocType.wdMailingLabels
        FilePath = CreateSource(StrFilter)
        .OpenDataSource(FilePath)
        Dim NewLabel As Word.CustomLabel = WordApp.MailingLabel.CustomLabels.Add("MyLabel", False)
        WordApp.MailingLabel.CreateNewDocument(Name:="MyLabel", Address:="", AutoText:="MyLabelLayout")
        objAutoText.Delete()

        .Destination = Word.WdMailMergeDestination.wdSendToNewDocument
        WordApp.Visible = True
        .Execute()
    End With
    oConn.Close()
    WordDoc.Close()
End Sub


Private Function CreateSource(ByVal StrFilter As String) As String
    Dim CnnUser As SqlConnection = New SqlConnection(connSTR)
    Dim sw As StreamWriter = File.CreateText("C:\Mail.Txt")
    Dim Path As String = "C:\Mail.Txt"
    Dim StrHeader As String = ""
    Try
        Dim SelectCMD As SqlCommand = New SqlCommand(StrFilter, CnnUser)
        Dim oDR As SqlDataReader
        Dim IntI As Integer
        SelectCMD.CommandType = CommandType.Text
        CnnUser.Open()
        oDR = SelectCMD.ExecuteReader
        For IntI = 0 To oDR.FieldCount - 1
            StrHeader &= oDR.GetName(IntI) & " ,"
        Next
        StrHeader = Mid(StrHeader, 1, Len(StrHeader) - 2)
        sw.WriteLine(StrHeader)
        sw.Flush()
        sw.Close()
        StrHeader = ""
        Do While oDR.Read
            For IntJ As Integer = 0 To oDR.FieldCount - 1
                StrHeader &= oDR.GetString(IntJ) & " ,"
            Next
        Loop
        StrHeader = Mid(StrHeader, 1, Len(StrHeader) - 2)
        sw = File.AppendText(Path)
        sw.WriteLine(StrHeader)
        CnnUser.Close()
        sw.Flush()
        sw.Close()
    Catch ex As Exception
        MessageBox.Show(ex.Message, "TempID", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    Return Path
End Function

Теперь, когда я запускаю программу, я получаю эту ошибку. Я старался, но не смог определить, в чем может быть проблема:

System.Runtime.InteropServices.COMException -> Горизонтальный и вертикальный шаг должен быть больше или равен ширине и высоте этикетки, соответственно.

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2013

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

0 голосов
/ 01 октября 2010

Установили ли вы основные сборки взаимодействия Office? (Соответственно сокращено до PIA)

Попробуйте это

...