姓名 性別 職業 職務
姓名 性別 職業 職務
C(2,1) C(2,2) C(2,3) C(2,4)
C(2,7) C(2,8) C(2,9) C(2,10)
---- 二、 問題分析
---- 從上篇文章陳述的原理來看,就是把數據表的每一條記錄的數據抽取出來形成EXCEL文件,充分利用EXCEL的強大的編輯功能實現報表的設計、打印。由于是每一條記錄占一行,所以利用下面的循環就可以很自然地實現:
For i = 0 To datPrimaryRS.RecordCount - 1
xlSheet.Cells( I+2, 1) =
datPrimaryRS![“字段名”]
……'I+2表示從第二行開始放置記錄
Next I
---- 很顯然用上述方法肯定不能夠實現在一行打印兩條記錄的功能。我們能夠看出在左邊的一排對應的I為 0,2,4,6,8……;在右邊的一排對應的I為:1,3,5,7……。問題似乎很簡單,左排對應的規律應該為:2*I;右邊排對應的規律應該為:(2*I+1)。循環寫成如下的樣子:
For i = 0 To datPrimaryRS.RecordCount - 1
'先打印左排
xlSheet.Cells( 2*I+2, 1) =
datPrimaryRS![“字段名”]
……'I+2表示從第二行開始放置記錄
' 下面打印右排:
xlSheet.Cells((2*I+1)+2, 7) =
datPrimaryRS![“字段名”]
……
Next I
---- 打印結果一看,這種方法是根本行不通的。上面的方法根本沒有考慮行與記錄的對應關系。左右兩條記錄對應同一個行號。
---- 三、問題解決
---- 仔細分析不難發現左排右排的對應關系如下:
左排 0 2 4 6 8
右排 1 3 5 7 9
行號 2+0 2+1 2+2 2+3 2+4
---- 從上表可以看出規律:左排 I/2 對應著行號,右排的行號也應該是I/2。而右邊的記錄號卻是I/2+1的。所以要有一個判斷該記錄號到底是放在左邊還是放在右邊。這時可以利用Mod函數來判斷,程序代碼如下:
For I = 0 To datPrimaryRS.RecordCount - 1
If (i Mod 2) = 0 Then
xlSheet.Cells( 2*I+2, 1) =
datPrimaryRS![“字段名”]
j = i / 2 '取出行號給右排記錄定位
Else
xlSheet.Cells(j+2, 7) =
datPrimaryRS![“字段名”]
End If
Next I
---- 這時就可以按記錄的先后秩序打印出雙排的報表了。
---- 四、 問題總結
---- 利用上述方法實現了雙排打印,又一次證明了這種打印方法的極大的靈活性。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/