高分求助vb.net中使用msflexgrid问题

yuantaolzu 2012-08-02 01:54:35
各位达人:
情况是这样的。我在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
...全文
304 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixuqun2012 2013-02-06
  • 打赏
  • 举报
回复
vs2005中有msflexgrid吗
ytmonkey2000 2012-08-03
  • 打赏
  • 举报
回复
将.TextMatrix(hsV, i)改成 .get_TextMatrix(hsV, i)。.NET中将方法进一步细化了。
yuantaolzu 2012-08-02
  • 打赏
  • 举报
回复
下班之前再次求高手
yuantaolzu 2012-08-02
  • 打赏
  • 举报
回复
自己顶,别沉了,求高手啊
yuantaolzu 2012-08-02
  • 打赏
  • 举报
回复
If m < 26 Then

ex1.Range(Chr(Asc("A") + m) & "3")._Default = .TextMatrix(hsV, i)
Else

ex1.Range(hhV1 & Chr(Asc("A") + N) & "3")._Default = .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)))._Default = "'" & .TextMatrix(i, k)
Else
ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2)))._Default = .TextMatrix(i, k)
End If
End If
Else

ex1.Range(hhV & Chr(Asc("A") + l Mod 26) & Trim(Str(J + 2)))._Default = .TextMatrix(i, k)
End If
l = l + 1
End If
Next k
cw1:
Next i
End With
ex1.Range("a" & Trim(Str(i + 3)))._Default = ywzjV



其中的一段自动升级过来以后是这个样子的(_Default),value是我自己后来试着改的值,还是不对。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧