Msflexgrid中的数据导出至Excell(绝对有挑战性)

4103796 2004-05-06 08:21:29
我现在做这样的导出,我的过程有三种处理方式,直接打印,导出,以Excell方式打开。
已经实现了,但调用。BOOK.close.EXcel.QUIT SHEET。CLose 已经全部关闭。然后将三个对象全部置成NOTHING 。但EXcell进程依然存在(Ctrl+ALT+DEl能够发现)。导致再调用这个过程时,无法往EXCELL对象的表格中写入数据了。必须退出我的程序(即使Ctrl+ALT+DEl还能够发现EXCELL存在)再启动才能再使用该过程一次。再想用,还得退出。是不是我的程序中什么对象没退干净呢????
...全文
41 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
4103796 2004-05-06
明白,明白。我明天再试试!!!看来问题解决有希望了。
  • 打赏
  • 举报
回复
junwhj 2004-05-06
我用VB6 + Excel2000,上面那段程序测试时没有问题。
  • 打赏
  • 举报
回复
4103796 2004-05-06
确实是这样,但我象你这样写第一次就出错了。所以把exsheet去掉了,第一次通过,但后果是出现我所说的情况。我的机器连VB也卸掉了。所以不能试。但下面这句为什么会出错呢???难道要用一下Activet???我记得我曾用过也不好使。
  • 打赏
  • 举报
回复
junwhj 2004-05-06
你原来程序中的下列程序是不能运行通过的,可能也正是因为这个原因才导致程序出错,而且出错后你没有做任何的清理工作,所以Excel的进程仍未结束:

Range(Cells(3, 1), Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray

改成:

exsheet.Range(exsheet.Cells(3, 1), exsheet.Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray
  • 打赏
  • 举报
回复
junwhj 2004-05-06
你的程序我测试时不能运行,我删除了设置格式的那一部分:

Private Sub Command1_Click()
Dim I As Integer
Dim J As Integer
Dim ex As Object
Dim exwbook As Object
Dim exsheet As Object

Set ex = CreateObject("Excel.Application")
Set exwbook = Nothing
Set exsheet = Nothing
Set exwbook = ex.Workbooks().Add
Set exsheet = exwbook.Worksheets("sheet1")

'写数据
Dim MyArray() As String
ReDim MyArray(WgMc.Rows, WgMc.Cols)
For I = 0 To WgMc.Rows - 1 '行
For J = 0 To WgMc.Cols - 1 '列
MyArray(I, J) = WgMc.TextMatrix(I, J)
Next J
Next
exsheet.Range(exsheet.Cells(3, 1), exsheet.Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray

sfile = "c:\test.xls"
exwbook.SaveAs sfile

exwbook.Close
ex.Quit
Set ex = Nothing
Set exwbook = Nothing
Set exsheet = Nothing

MsgBox "OK"
End Sub

Private Sub Form_Load()
Dim I As Long, J As Long

With WgMc
.Rows = 20
.Cols = 6
For I = 1 To 19
For J = 1 To 5
.TextMatrix(I, J) = CLng(Rnd() * 1000)
Next J
Next I
End With
End Sub
  • 打赏
  • 举报
回复
4103796 2004-05-06
Dim i As Integer
Dim j As Integer
Dim ex As Object
Dim exwbook As Object
Dim exsheet As Object

Set ex = CreateObject("Excel.Application")
Set exwbook = Nothing
Set exsheet = Nothing
Set exwbook = ex.Workbooks().Add
Set exsheet = exwbook.Worksheets("sheet1")


'写数据
Dim MyArray() As String
ReDim MyArray(WgMc.Rows, WgMc.Cols)
For i = 0 To WgMc.Rows - 1 '行
For j = 0 To WgMc.Cols - 1 '列
' exsheet.Cells(i + 3, j + 1).Value = wgmc.TextMatrix(i, j)
MyArray(i, j) = WgMc.TextMatrix(i, j)
Next j
Next
Range(Cells(3, 1), Cells(WgMc.Rows + 2, WgMc.Cols)).Value = MyArray

'设置首行字体
For j = 1 To WgMc.Cols
exsheet.Columns(j).HorizontalAlignment = WgMc.CellAlignment
Next
exsheet.Rows("3:1").EntireColumn.AutoFit '首行自动宽度
exsheet.Rows("3:1").Font.Bold = True '粗体
exsheet.Rows("3:1").HorizontalAlignment = 3 '1右,2左3中

Range(Cells(1, 1), Cells(2, WgMc.Cols)).MergeCells = True '先合并单元格
With exsheet.Cells(1, 1)
.Value = BiaoTop '传过来的报表标题
.Font.Bold = True '粗体
.Font.Underline = xlUnderlineStyleDoubleAccounting '下划线
.HorizontalAlignment = 3 '1右,2左3中
.VerticalAlignment = 2
.Font.Size = 18
End With
exwbook.SaveAs sFile

exwbook.Close
ex.Quit
Set ex = Nothing
Set exwbook = Nothing
Set exsheet = Nothing
  • 打赏
  • 举报
回复
4103796 2004-05-06
这位仁兄,咱俩的写法大部分一样我那些代码也没什么问题(在我看来),只是下面这几句和你的思路不同。
strFileName = "c:\test.xls"
If Dir(strFileName) <> "" Then Kill strFileName '我没有这两句。因为如果磁盘中有,导出时EXCEL会问是否覆盖。没有什么危害所以没做这样的处理。

xSheet.Cells(1, 1) = "Test" 这里我只不过赋一个二维数组。
xSheet.SaveAs "c:\test.xls"

只是为什么,我的程序,第一次导出时好使,再导的时候就不行了呢????而必须重新启动程序才能继续再导一次而且只能导一次。而任务管理器中每导一次就出现一个未关闭的进程。而这个进程似乎不影响我的导表(至少启动程序第一次导表不影响,而二次以后又不知是不是此原因。)我就这两个疑问。大家看看啊。
  • 打赏
  • 举报
回复
4103796 2004-05-06
我遇到了这样的问题,导出EXCEL之后,再导出就在写入数据那行出错了不知为什么如下:
range(...,...).value=二维数据。
本来这样可以把二维数据写进表格中。第一次可以,再次使用的时候,就出错了,应用对象,工作薄表格都关闭并且已经置成NOTHING了。可是还出错而且用CTrl+alt+del三个键,能发现有一个EXCEL进程在系统中。我退出我的应用程序此进程不消失。再启动程序并且再导出一次表格。又出现一个。依次类推,每次启动程序并且导出表格就出现一个进程。就这两个问题请高手帮忙啊。。
  • 打赏
  • 举报
回复
junwhj 2004-05-06
我用Excel2000测试了一下,没有什么问题,程序运行后任务管理器内没有发现Excel的进程。

Private Sub Command1_Click()
Dim xApp As Excel.Application
Dim xBook As Excel.Workbook
Dim xSheet As New Excel.Worksheet
Dim strFileName As String

Set xApp = New Excel.Application
Set xBook = xApp.Workbooks.Add
Set xSheet = xBook.Worksheets("Sheet1")

strFileName = "c:\test.xls"
If Dir(strFileName) <> "" Then Kill strFileName

xSheet.Cells(1, 1) = "Test"
xSheet.SaveAs "c:\test.xls"

Set xSheet = Nothing

xBook.Close
Set xBook = Nothing

xApp.Quit
Set xApp = Nothing

MsgBox "OK"
End Sub
  • 打赏
  • 举报
回复
daisy8675 2004-05-06
我沒有聽懂你意思,今天感冒,頭腦模糊
  • 打赏
  • 举报
回复
4103796 2004-05-06
等高手啊。
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库(包含打印,安装,报表)
加入

1190

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2004-05-06 08:21
社区公告
暂无公告