高分求助vb.net中使用msflexgrid问题
各位达人:
情况是这样的。我在vb6中用msflexgrid 读取数据库中的数据,然后导出到用户桌面的excel中,并已经定义好打印格式,用户保存后可以直接打印的。vb6中功能是好用的。后来因为项目需要,我将他到了vs2005中(VB.NET),然后发现问题来了,目前在VB.NET中msflexgrid仍然可以读取出数据库中的数据,也仍然可以导出为excel表格,但是其中的数据没有了,也就是说在从msflexgrid导入EXCEL的 过程中丢失了单元格中的数据。源码如下(无用的方法我暂且删除),还请哪位大哥帮忙,分不够可以开帖另加,十分紧急。在线等。
Option Strict Off
Option Explicit On
Friend Class 通用打印
'这是一个将表格数据导出为EXCEL文件的类,使用的机器上必须安装有EXCEL。
Dim BBGrid As Object
Dim btbtV, btV, ywzjV As Object
Dim zzdxV, ywbtV, dylxV As String
Dim bbkdV As Double
Dim dymsV, hsV, dyfxV As Short
Dim fontsizeV, tt As Short
Public Sub Excel打印()
Dim m, J, l, k, N As Short
Dim i As Double
Dim hhV, hhV1 As String
On Error Resume Next
Dim ex1 As Microsoft.Office.Interop.Excel.Application
ex1 = CreateObject("Excel.Application")
'判断机器上是否安装了EXCEL
If ex1 Is Nothing Then
MsgBox("您的电脑还没有安装Excel,无法将数据导出为EXCEL文件!", MsgBoxStyle.Critical, "注意")
ex1.Quit()
ex1 = Nothing
End If
ex1.Visible = True
ex1.Workbooks.Add()
With BBGrid
hhV1 = ""
m = 0
N = 0
If NotnullN(hsV) = 0 Then
hsV = 0
End If
For i = 0 To .Cols - 1
If .ColWidth(i) <> 0 Then
If NotnullN(bbkdV) = 0 Then
If (m Mod 26) = 0 And m <> 0 Then
hhV1 = Chr(Asc("A") + Int(m / 26) - 1)
N = 0
End If
If m < 26 Then
ex1.Range(Chr(Asc("A") + m) & "3").ColumnWidth = .ColWidth(i) / 35
Else
ex1.Range(hhV1 & Chr(Asc("A") + N) & "3").ColumnWidth = .ColWidth(i) / 35
N = N + 1
End If
Else
If (m Mod 26) = 0 And m <> 0 Then
hhV1 = Chr(Asc("A") + Int(m / 26) - 1)
N = 0
End If
If m < 26 Then
ex1.Range(Chr(Asc("A") + m) & "3").ColumnWidth = .ColWidth(i) / bbkdV
Else
ex1.Range(hhV1 & Chr(Asc("A") + N) & "3").ColumnWidth = .ColWidth(i) / bbkdV
N = N + 1
End If
End If
m = m + 1
End If
Next i
ex1.Range("a1")._Default = btV
If hhV1 = "" Then
ex1.Range("a1:" & Chr(Asc("A") + m - 1) & "1").MergeCells = True
Else
ex1.Range("a1:" & hhV1 & Chr(Asc("A") + N - 1) & "1").MergeCells = True
End If
ex1.Range("a2")._Default = btbtV
If hhV1 = "" Then
ex1.Range("a2:" & Chr(Asc("A") + m - 1) & "2").MergeCells = True
Else
ex1.Range("a2:" & hhV1 & Chr(Asc("A") + N - 1) & "2").MergeCells = True
End If
hhV = ""
J = 0
m = 0
N = 0
For i = 0 To .Cols - 1
If .ColWidth(i) <> 0 Then
If (m Mod 26) = 0 And m <> 0 Then
hhV1 = Chr(Asc("A") + Int(m / 26) - 1)
N = 0
End If
If m < 26 Then
ex1.Range(Chr(Asc("A") + m) & "3").Value = .TextMatrix(hsV, i)
Else
ex1.Range(hhV1 & Chr(Asc("A") + N) & "3").Value = .TextMatrix(hsV, i)
N = N + 1
End If
m = m + 1
End If
Next i
For i = hsV To .Rows - 1
Select Case Trim(dylxV)
Case "", "全部"
Case "未接收"
If Trim(.TextMatrix(i, 19)) <> "" And i > 0 Then
GoTo cw1
End If
Case "已接收"
If Trim(.TextMatrix(i, 19)) = "" And i > 0 Then
GoTo cw1
End If
End Select
J = J + 1
hhV = ""
l = 0
For k = 0 To .Cols - 1
If .ColWidth(k) > 0 Then
If l Mod 26 = 0 And l > 0 Then
If hhV = "" Then
hhV = "A"
Else
hhV = Chr(Asc(hhV) + l)
End If
End If
If k > 0 Then
If InStr(1, .TextMatrix(i, k), ".") Then
ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2)))._Default = .TextMatrix(i, k)
Else
If Len(.TextMatrix(i, k)) > 7 Then
ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2))).Value = "'" & .TextMatrix(i, k)
Else
ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2))).Value = .TextMatrix(i, k)
End If
End If
Else
ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2))).Value = .TextMatrix(i, k)
End If
l = l + 1
End If
Next k
cw1:
Next i
End With
ex1.Range("a" & Trim(Str(i + 3))).Value = ywzjV
If hhV1 = "" Then
ex1.Range("a" & Trim(Str(i + 3)) & ":" & Chr(Asc("A") + m - 1) & Trim(Str(i + 3))).MergeCells = True
Else
ex1.Range("a" & Trim(Str(i + 3)) & ":" & hhV1 & Chr(Asc("A") + N - 1) & Trim(Str(i + 3))).MergeCells = True
End If
With ex1.Workbooks(1).Styles.Add(Name:="bookman top border") '定义边框风格1
.Borders(Microsoft.Office.Interop.Excel.Constants.xlTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash
.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash
.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash
.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash
If NotnullN(fontsizeV) = 0 Then
.Font.Size = 9
Else
.Font.Size = fontsizeV
End If
.Font.Name = "宋体"
End With
With ex1.Workbooks(1).Styles.Add(Name:="bookman top border1") '定义边框风格2
.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlDash
If NotnullN(fontsizeV) = 0 Then
.Font.Size = 9
Else
.Font.Size = fontsizeV
End If
.Font.Name = "宋体"
End With
If NotnullC(zzdxV) = "" Then
ex1.Worksheets(1).PageSetup.PaperSize = Microsoft.Office.Interop.Excel.XlPaperSize.xlPaperA4
Else
ex1.Worksheets(1).PageSetup.PaperSize = zzdxV
End If
If hhV1 = "" Then
ex1.Worksheets(1).Range("A3:" & Chr(Asc("A") + m - 1) & Trim(Str(i + 2))).Style = "bookman top border" '实现边框风格
Else
ex1.Worksheets(1).Range("A3:" & hhV1 & Chr(Asc("A") + N - 1) & Trim(Str(i + 2))).Style = "bookman top border" '实现边框风格
End If
If hhV1 = "" Then
ex1.Worksheets(1).Range(Chr(Asc("A") + m) & "3:" & Chr(Asc("A") + m) & Trim(Str(i + 2))).Style = "bookman top border1" '实现边框风格1
End If
If hhV1 = "" Then
With ex1.Worksheets(1).Range("A3:" & hhV1 & Chr(Asc("A") + N) & "3") '定义单元格内居中风格
.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignDistributed
.AddIndent = True
End With
End If
If hhV1 = "" Then
ex1.Columns._Default("a:" & Chr(Asc("A") + m - 1)).AutoFit() '自动调整列宽
Else
ex1.Columns._Default("a:" & hhV1 & Chr(Asc("A") + N - 1)).AutoFit()
End If
ex1.ActiveSheet.PageSetup.PrintTitleRows = ex1.ActiveSheet.Rows("1:3").Address '定义表头所用行
If hhV1 = "" Then
ex1.ActiveSheet.PageSetup.PrintTitleColumns = ex1.ActiveSheet.Columns("A:" & Chr(Asc("A") + m)).Address '定义标题所用列
End If
If NotnullN(dymsV) = 0 Then
dymsV = 0
End If
End Sub
End Class