Public Function ExportToExcel(ByVal SQL As String) Dim mrc As ADODB.Recordset Dim myexcel As New Excel.Application Dim mybook As New Excel.Workbook Dim mysheet As New Excel.Worksheet Set mrc = RunSQL(SQL) On Error GoTo ErrExcel Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK Set mysheet = mybook.Worksheets(1) myexcel.Visible = True mysheet.Cells.CopyFromRecordset mrc mybook.Save Exit Function ErrExcel: MsgBox "您的机器没有安装 Excel," & vbCrLf & vbCrLf & "导出操作被终止!", vbCritical End Function
ExpFileOpen = False On Error GoTo ExportResultErr ExpFNum = FreeFile Open ExpFName For Output As #ExpFNum ExpFileOpen = True
For ii = 0 To ResultGrid.Rows - 1 WriteLine = Trim$(ResultGrid.TextMatrix(ii, 0)) For jj = 1 To ResultGrid.Cols - 1 WriteLine = WriteLine & "," & Trim$(ResultGrid.TextMatrix(ii, jj)) Next jj Print #ExpFNum, WriteLine Next ii
ExportResultExit: On Error GoTo 0 If ExpFileOpen Then Close #ExpFNum Exit Sub
调试通过的源代码。对文件"c:\test.xls"的sheet1的单元格1,1操作 在Project的Reference 中加Microsoft Excel 9.0 Object Library然后参考以下代码即可实现,这是本人在工程中测试过的代码,可以灵活的控制Excel文件的读写。Private Sub Command2_Click() Dim xlApp As Excel.Application
Dim m_mystr
' Create new hidden instance of Excel. Set xlApp = New Excel.Application
xlApp.Workbooks.Open "c:\test.xls" 'open file Dim m_SheetObj As Excel.Worksheet Set m_SheetObj = xlApp.Worksheets(1) m_mystr = m_SheetObj.Cells(1, 1) 'get value of cell 1,1
m_SheetObj.Cells(1.1="fengjie" 'set value of cell 1,1
xlApp.Worksheets(1).Save 'save data xlApp.Workbooks.Close 'exit excel notice must close workbooks and quit excel. xlApp.Quit
Set xlApp = NothingEnd Sub祝好运! 2005-1-5
sorry! some mistaken happen at m_SheetObj.Cells(1.1="fengjie" 'set value of cell 1,1 please change to m_SheetObj.Cells(1,1)="fengjie" 'set value of cell 1,1
大斑竹李洪根的文章:VB6 中将数据导出到 Excel 提速之法Excel 是一个非常优秀的报表制作软件,用VBA可以控制其生成优秀的报表,本文通过添加查询语句的方法,即用Excel中的获取外部数据的功能将数据很快地从一个查询语句中捕获到EXCEL中,比起往每个CELL里写数据的方法提高许多倍。 在程序中引用Microsoft Excel 9.0 Object Library,将下文加入到一个模块中,窗体中调用如下ExporToExcel("select * from table")。则实现快速将数据导出到EXCEL中。Public Function ExporToExcel(strOpen As String) '********************************************************* '* 名称:ExporToExcel '* 功能:导出数据到EXCEL '* 用法:ExporToExcel(sql查询字符串) '********************************************************* Dim Rs_Data As New ADODB.Recordset Dim Irowcount As Integer Dim Icolcount As Integer
Dim xlApp As New Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim xlQuery As Excel.QueryTable
With Rs_Data If .State = adStateOpen Then .Close End If .ActiveConnection = Cn .CursorLocation = adUseClient .CursorType = adOpenStatic .LockType = adLockReadOnly .Source = strOpen .Open End With With Rs_Data If .RecordCount < 1 Then MsgBox ("没有记录!") Exit Function End If '记录总数 Irowcount = .RecordCount '字段总数 Icolcount = .Fields.Count End With
Set xlApp = CreateObject("Excel.Application") Set xlBook = Nothing Set xlSheet = Nothing Set xlBook = xlApp.Workbooks().Add Set xlSheet = xlBook.Worksheets("sheet1") xlApp.Visible = True
'添加查询语句,导入EXCEL数据 Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
Dim mrc As ADODB.Recordset
Dim myexcel As New Excel.Application
Dim mybook As New Excel.Workbook
Dim mysheet As New Excel.Worksheet
Set mrc = RunSQL(SQL)
On Error GoTo ErrExcel
Set mybook = myexcel.Workbooks.Add '添加一个新的BOOK
Set mysheet = mybook.Worksheets(1)
myexcel.Visible = True
mysheet.Cells.CopyFromRecordset mrc
mybook.Save
Exit Function
ErrExcel:
MsgBox "您的机器没有安装 Excel," & vbCrLf & vbCrLf & "导出操作被终止!", vbCritical
End Function
On Error GoTo ExportResultErr ExpFNum = FreeFile
Open ExpFName For Output As #ExpFNum
ExpFileOpen = True
For ii = 0 To ResultGrid.Rows - 1
WriteLine = Trim$(ResultGrid.TextMatrix(ii, 0))
For jj = 1 To ResultGrid.Cols - 1
WriteLine = WriteLine & "," & Trim$(ResultGrid.TextMatrix(ii, jj))
Next jj
Print #ExpFNum, WriteLine
Next ii
ExportResultExit:
On Error GoTo 0
If ExpFileOpen Then Close #ExpFNum
Exit Sub
在Project的Reference 中加Microsoft Excel 9.0 Object Library然后参考以下代码即可实现,这是本人在工程中测试过的代码,可以灵活的控制Excel文件的读写。Private Sub Command2_Click()
Dim xlApp As Excel.Application
Dim m_mystr
' Create new hidden instance of Excel.
Set xlApp = New Excel.Application
xlApp.Workbooks.Open "c:\test.xls" 'open file
Dim m_SheetObj As Excel.Worksheet
Set m_SheetObj = xlApp.Worksheets(1) m_mystr = m_SheetObj.Cells(1, 1) 'get value of cell 1,1
m_SheetObj.Cells(1.1="fengjie" 'set value of cell 1,1
xlApp.Worksheets(1).Save 'save data
xlApp.Workbooks.Close 'exit excel notice must close workbooks and quit excel.
xlApp.Quit
Set xlApp = NothingEnd Sub祝好运! 2005-1-5
m_SheetObj.Cells(1.1="fengjie" 'set value of cell 1,1
please change to
m_SheetObj.Cells(1,1)="fengjie" 'set value of cell 1,1
在程序中引用Microsoft Excel 9.0 Object Library,将下文加入到一个模块中,窗体中调用如下ExporToExcel("select * from table")。则实现快速将数据导出到EXCEL中。Public Function ExporToExcel(strOpen As String)
'*********************************************************
'* 名称:ExporToExcel
'* 功能:导出数据到EXCEL
'* 用法:ExporToExcel(sql查询字符串)
'*********************************************************
Dim Rs_Data As New ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlQuery As Excel.QueryTable
With Rs_Data
If .State = adStateOpen Then
.Close
End If
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = strOpen
.Open
End With
With Rs_Data
If .RecordCount < 1 Then
MsgBox ("没有记录!")
Exit Function
End If
'记录总数
Irowcount = .RecordCount
'字段总数
Icolcount = .Fields.Count
End With
Set xlApp = CreateObject("Excel.Application")
Set xlBook = Nothing
Set xlSheet = Nothing
Set xlBook = xlApp.Workbooks().Add
Set xlSheet = xlBook.Worksheets("sheet1")
xlApp.Visible = True
'添加查询语句,导入EXCEL数据
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
With xlQuery
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
End With
xlQuery.FieldNames = True '显示字段名
xlQuery.Refresh
With xlSheet
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
'设标题为黑体字
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
'标题字体加粗
.Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
'设表格边框样式
End With
With xlSheet.PageSetup
.LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:" ' & Gsmc
.CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
.RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
.LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
.CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
.RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
End With
xlApp.Application.Visible = True
Set xlApp = Nothing '"交还控制给Excel
Set xlBook = Nothing
Set xlSheet = Nothing
End Function
谢谢您的指导,打开EXCEL表,已能将数据写进目标单元格,但存盘时
xlApp.Worksheets(1).Save
这一句调不通,说该对象不支持该方法,请帮忙解决?
若用SAVEAS方法可存盘,但若有多个文件,每次都要提示是否提代原文件,我有几百个文件呀!
i am Sorry,
xlApp.Worksheets(1).Save
这句改为xlApp.Workbooks(1).Save
或者用这个试试
m_SheetObj.Close SaveChanges:=True
thank you, 这样修改后,可以运行达到所期望的要求,其后1代表什么意思?
1表示集合中的第一个元素,对应于EXCEL中的第一个工作薄,因为EXCEL中可以同时打开多个XLS文件,每个对应一个工作薄(workbook),每个WorkSheet中有若干个Sheet,每个Sheet对应于一个Worksheet.
OPEN那个文件,后.SAVE就可以了!资源回收时记得用objExlApp.Quit,并SET NOTHING!
1.用Excel对象:CreateOject...如上所说的,但客户端安装Excel软件2.用第三方控件,支持Excel文件的读取,写入,只要和Excel兼容就可以了,
这种方法也是我推荐的
有错误重写,如下:
Excel是一个ActiveX EXE(旧的叫OLE Server),它的访问接口可以通过Visual Studio带的工具OLEView观察(在OLEView中的TYPE Librariers下的Microsoft Excel 10.0 Object Library项.每一个Excel实例都有一个工作薄集合(workbooks)该集合的元素是Workbook对象,该对象就是打开的XLS文件(EXCEL中可以同时打开多个XLS文件),Workbooks(1)表示集合中的第一个元素,也就是该实例打开的第一个XSL文件。每一个Workbook都有一个Sheet集合,缺省的有三个元素,分别是Sheet1、Sheet2、Sheet3,这个在打开EXCEL时节可以看到。这些Sheet对应的Worksheet对象。