如何删除两家公司之间的空行。
{.....some code for calling excel template and write
Dim lsvw As NotesView, lsdoc As NotesDocument, lsdc As NotesDocumentCollection
Dim savw As NotesView, sadoc As NotesDocument, sadc As NotesDocumentCollection
Dim firmvw As NotesView, firmdoc As NotesDocument
Dim firmve As NotesViewEntry
Dim firmvc As NotesViewEntryCollection
Dim tmpve As NotesViewEntry ' temporary use
Dim firmArr ' array that contain Company ID
Dim firmid ' firm id to store all firm
Set firmvw = db.Getview("Company Information by Co_ID")
Set lsvw = db.Getview("(LS sort by Co_ID)")
Set savw = db.Getview("SA sort by LS Num")
Set firmvc = firmvw.Allentries ' get all entries
If firmvc.Count = 0 Then ' if all view entry collection is empty
Print "No Company information!"
Exit Sub
End If
Set firmve = firmvc.Getfirstentry()
firmArr = ""
firmid = ""
Do While Not firmVe Is Nothing
Set firmdoc =firmve.Document
firmid = firmid + firmdoc.Co_ID(0) + ";" ' put all co Id store inside firmID
Set tmpve = firmvc.Getnextentry(firmVe)
Set firmVe = tmpve
Loop
firmArr = FullTrim(ArrayUnique(Split(firmid, ";"))) ' split all firm with ";" so become array
' ForAll refvar In container
' [statement]
' End ForAll
row = 2
ForAll firm In firmArr
Dim codoc As NotesDocument
Set codoc = firmvw.Getdocumentbykey(firm,True)
If Not codoc Is Nothing Then
xlsht.Cells(row, 1) = Codoc.Co_Name(0)
End If
Set lsdc = lsvw.GetAllDocumentsByKey(firm,True)
Set lsdoc = lsdc.GetFirstDocument
Do While Not lsdoc Is Nothing
xlsht.Cells(row, 2) = lsdoc.Name(0)
Set sadc = savw.GetAllDocumentsByKey(lsdoc.Reg_Num_LS(0),True)
Set sadoc = sadc.GetFirstDocument
Do While Not sadoc Is Nothing
xlsht.Cells(row, 3) = sadoc.Name(0)
xlsht.Cells(row, 4) = sadoc.NRIC(0)
xlsht.Cells(row, 5) = sadoc.Date_Apprv_Cr(0)
row = row +1
Set sadoc = sadc.GetNextDocument(sadoc)
Loop
row = row +1
Set lsdoc = lsdc.GetNextDocument(lsdoc)
Loop
row = row + 1 ' write every row during pass one company
End ForAll
Call xlWbk.Save
Call xlWbk.Close
Set xlWbk = Nothing
Call xl.Quit
Set xl = Nothing
Set rtitem = New NotesRichTextItem(doc, "Attachment")
Call rtitem.Embedobject(EMBED_ATTACHMENT, "", template)
If template <> "" And Dir$(template, 0) <> "" Then Kill template
Call doc.Save(True, False)
代码正在做:
答案 0 :(得分:1)
在三个嵌套循环中,您有三条不同的行说row = row + 1
。如果你追踪你的第一个案例的逻辑,你会遇到三个测量助手(sadoc)中的一个,一个用于土地测量员(lsdoc),然后一个用于公司。这是您执行row = row + 1
的五倍,但您只生成了三行数据,因为lsdoc信息和公司信息与第一个sadoc信息位于同一行。
如果总是每个lsdoc至少有一个sadoc,总是每个公司只有一个土地测量员,那么答案很简单:只需摆脱两条额外的row = row + 1
行。不幸的是,我看到你有一个案例,一个公司有一个以上的lsdoc,在同样的情况下,公司的第二个lsdoc没有sadoc所以它不会那么简单。
您将不得不跟踪并仅在必要时执行row = row + 1
。即,改变这个
row = row +1
Set sadoc = sadc.GetNextDocument(sadoc)
到此
Set sadoc = sadc.GetNextDocument(sadoc)
If not sadoc is Nothing then
row = row +1
End If
也为lsdoc做同样的伎俩。