序列不包含任何元素-WordManipulation

时间:2020-09-08 13:18:28

标签: vb.net report

我有一个功能,可以从Word模板将报告创建为pdf。函数通过SQL查询从数据库获取数据,将其转换为自定义类,然后创建报告。我有这个奇怪的错误sequence contains no elements。它在wmO.CreateWord(data, outFile + docxExt)行上中断,我无法获得有关此错误的任何更多详细信息。我检查了所有返回的数据,数据一切正常。还有另一个问题,如果有人知道,我如何使用代码(例如徽标或签名)从数据库动态插入图像?

这是我上面做的所有功能。

        Dim list As List(Of Int32) = HelperFunctions.GetGridSelection(idlist)
        Dim podjetjeId As Integer = Session("IDPodjetja")
        Dim izvajalecId As Integer = Session("IDIzvajalec")

        Dim vpdPodjetje As vpdPodjetje = db.vpdPodjetje.Find(podjetjeId)
        Dim vpdIzvajalec As vpdIzvajalec = db.vpdIzvajalec.Find(izvajalecId)
        Dim vpdEvakuacijaGL As vpdEvakuacijaGL = db.vpdEvakuacijaGL.Find(list(0))

        Dim query = $"SELECT Z.ImePriimek
                            ,Z.DatumRojstva
                            ,PO.NazivFirme
                            ,PO.Naslov AS NaslovPodjetja
                            ,CONVERT(NVARCHAR,Z.PostnaSt) AS PostnaSt_p
                            ,Z.Kraj AS Kraj_p
                            ,DM.NazivDM 
                            ,GL.Kraj
                            ,GL.ProgramUsp AS ProgramUsp
                            ,GL.Periodika
                      FROM [vpd_razvoj02a].[dbo].[vpdEvakuacijaGL] AS GL INNER JOIN vpdEvakuacija AS E
                          ON GL.IDEvakGL = E.IDEvakGL LEFT JOIN vpdZaposleni AS Z
                          ON E.IdZaposleni = Z.IDZaposl LEFT JOIN vpdDelovnaMesta AS DM
                          ON Z.IDDm = DM.IDDm INNER JOIN vpdPodjetje AS PO
                          ON Z.IDPodj = PO.IDPodj "

        Dim queryBuilder As StringBuilder = New StringBuilder()
        Dim cond = Nothing
        queryBuilder.Clear()
        queryBuilder.Append(query)

        cond = HelperFunctions.BuildSqlCondition(False, String.Format("Z.IDPodj={0}", podjetjeId))
        queryBuilder.AppendFormat(cond)

        cond = HelperFunctions.BuildSqlCondition(True, String.Format("GL.IDEvakGL={0}", list(0)))
        queryBuilder.AppendFormat(cond)

        Dim result = db.Database.SqlQuery(Of EvakuacijaReport2ExtendedModel)(queryBuilder.ToString).ToList()

        Dim dtIzv As dsCommon.IzvajalecDataTable = HelperFunctions.GetIzvajalec(HttpContext.Session("IDIzvajalec"), True)
        Dim dtPodj As dsCommon.PodjetjeDataTable = HelperFunctions.GetPodjetje(HttpContext.Session("IDPodjetja"))
        Dim filename As String = Guid.NewGuid().ToString()
        Dim file As String = ""
        Dim outFile As String = Server.MapPath(HelperFunctions.g_tempFiles) + filename
        Dim wm As New WordManipulation

        Dim item2 = wm.GetWordPredloga(word, dtIzv(0).ID)
        If item2 Is Nothing Then
            Return ""
        End If
        file = Server.MapPath(g_Wordpredloge) + item2.Predloga

        Dim first As Boolean = True
        Dim wmO As New ESNETWordManipulation.WordManipulation()
        Dim wordL As New List(Of ESNETWordManipulation.ESNETWordData)

        Dim fieldsObjects As New Dictionary(Of String, Object)
        Dim fields As Dictionary(Of String, Object) = New Dictionary(Of String, Object)()

        Dim Datum = Now.Date.ToString(HelperFunctions.g_dateFormat)
        Dim StPotrdila = vpdEvakuacijaGL.StZapisnika
        Dim Direktor = vpdPodjetje.Direktor
        Dim NaslovPodj = vpdPodjetje.Naslov
        Dim KrajPodj = vpdPodjetje.Kraj
        Dim Izvajalec = vpdIzvajalec.NazivFirme
        Dim OdlocbaMinistObramba = vpdIzvajalec.OdlocbaMinistObramba
        Dim PostnaSt_i = "", Kraj_i = "", PE_i = "", TelSt_i = ""

        If Not IsNothing(vpdIzvajalec.PostnaSt) Then
            PostnaSt_i = vpdIzvajalec.PostnaSt
        End If
        If Not IsNothing(vpdIzvajalec.Kraj) Then
            Kraj_i = vpdIzvajalec.Kraj
        End If
        If Not IsNothing(vpdIzvajalec.PE) Then
            PE_i = vpdIzvajalec.PE
        End If
        If Not IsNothing(vpdIzvajalec.TelSt) Then
            TelSt_i = vpdIzvajalec.TelSt
        End If

        Dim ImePriimek1 = "", ImePriimek2 = ""
        If Not IsNothing(vpdEvakuacijaGL.IDPodpisnik1) Then
            ImePriimek1 = db.vpdPodpisnik.Find(vpdEvakuacijaGL.IDPodpisnik1)?.ImePriimek
        End If
        If Not IsNothing(vpdEvakuacijaGL.IDPodpisnik2) Then
            ImePriimek2 = db.vpdPodpisnik.Find(vpdEvakuacijaGL.IDPodpisnik2)?.ImePriimek
        End If

        fields.Add("Datum", Datum)
        fields.Add("StPotrdila", StPotrdila)
        fields.Add("Izvajalec", Izvajalec)
        fields.Add("Direktor", Direktor)
        fields.Add("ImePriimek1", ImePriimek1)
        fields.Add("ImePriimek2", ImePriimek2)
        fields.Add("NaslovPodj", NaslovPodj)
        fields.Add("KrajPodj", KrajPodj)
        fields.Add("OdlocbaMinistObramba", OdlocbaMinistObramba)
        fields.Add("DatumUsp", vpdEvakuacijaGL.DatumUsp)
        fields.Add("DatumPotekaVeljavnosti", vpdEvakuacijaGL.DatumPotekaVeljavnosti)
        fields.Add("PostnaSt_i", PostnaSt_i)
        fields.Add("Kraj_i", Kraj_i)
        fields.Add("Kraj_i_1", Kraj_i)
        fields.Add("PE_i", PE_i)
        fields.Add("TelSt_i", TelSt_i)

        Dim tableData = New ESNETWordManipulation.TableFieldData()
        tableData.PropertyKeyMapping = New Dictionary(Of String, String)()
        tableData.PropertyKeyMapping.Add("ImePriimek", "ImePriimek")
        tableData.PropertyKeyMapping.Add("DatumRojstva", "DatumRojstvaView")
        tableData.PropertyKeyMapping.Add("NazivFirme", "NazivFirme")
        tableData.PropertyKeyMapping.Add("NaslovPodjetja", "NaslovPodjetja")
        tableData.PropertyKeyMapping.Add("PostnaSt_p", "PostnaSt_p_String")
        tableData.PropertyKeyMapping.Add("Kraj_p", "Kraj_p")
        tableData.PropertyKeyMapping.Add("NazivDM", "NazivDM")
        tableData.PropertyKeyMapping.Add("Kraj", "Kraj")
        tableData.PropertyKeyMapping.Add("ProgramUsp", "ProgramUsp")
        tableData.PropertyKeyMapping.Add("Periodika", "Periodika")
        tableData.Values = New List(Of Object)()

        Dim i As Integer = 0
        For Each item In result
            i = i + 1
            If IsNothing(item.PostnaSt_p) Then
                item.PostnaSt_p = ""
            End If
            tableData.Values.Add(item)
        Next

        Dim data As New ESNETWordManipulation.ESNETWordData
        data.TableFields = New List(Of ESNETWordManipulation.TableFieldData)()
        data.Table2DFields = New List(Of ESNETWordManipulation.Table2DFieldData)()
        data.Images = New List(Of String)()
        data.ImageBookmarks = New Dictionary(Of String, String)()

        data.TableFields.Add(tableData)
        data.Fields = fields
        data.FilePath = file
        wmO.CreateWord(data, outFile + docxExt)

        Dim tmp = New WordMistery.WordManage("")
        tmp.convert2(outFile + docxExt, outFile + pdfExt)
        Return HelperFunctions.g_tempFiles + filename + pdfExt

这是单词模板的布局:enter image description here

1 个答案:

答案 0 :(得分:0)

我发现了问题。它是在Word模板中,而不是在代码中。在模板中,图片的这一部分不是桌子。在我的代码中,我正在创建 tableData ,并且期望在Word模板内的表格中包含这些字段。如果有人要执行1名以上员工的报告,则需要Word模板中的表格。

enter image description here