当前位置: 代码迷 >> VFP >> vfp导出excel的方法探讨解决方法
  详细解决方案

vfp导出excel的方法探讨解决方法

热度:7320   发布时间:2013-02-26 00:00:00.0
vfp导出excel的方法探讨
方法一:
Use**.dbf
Copy To Excel333.Xls Type Xl5 
方法二:
local myfield  

yfilename=getfile("**.dbf")&&得到源表  

 myoleapp=createobject("excel.application") &&创建OLE对象 

myoleapp.visible=.t.

myoleapp.workbooks.add

use 1.dbf &&myfilename
for i=1 to fcount()
  myoleapp.cells(1,i).value=field(i)
endfor
scan
  for i=1 to fcount()
  myfield=fields(i)
  myoleapp.cells(recno()+1,i).value=&myfield
  endfor
endscan
myoleapp.quit

还有没有其他的方法!
 

------解决方案--------------------------------------------------------
1、
_CLIPTEXT=''
SELECT bh,xm FROM h:\gzkd\jzg INTO CURSOR dd
SELECT dd
COPY TO dd1.txt sdf
_CLIPTEXT =FILETOSTR('dd1.txt')
2、
SELECT qq,bh,xmold,dwold,xfgzold,zfgzold,bfold,xm,dw,xfgz,zfgz,bf FROM r:\temp\qwe INTO CURSOR dd
 _vfp.DataToClip('dd',,3)
 ZX = CREATEOBJECT('excel.application',' ')
zx.ActiveSheet.Paste
------解决方案--------------------------------------------------------
3
Set oConnection = CreateObject("adodb.connection")
Set dd = CreateObject("adodb.recordset")
With oConnection
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ThisWorkbook.FullName + ";Extended Properties='excel 8.0;HDR=YES;IMEX=1';Persist Security Info=False"
.Open
End With
dd.Open "select trim(订单号) as 订单号,count(*) as gs from [sheet1$] group by trim(订单号)", oConnection
"select * from (select trim(订单号) as 订单号,count(*) as gs from [sheet1$] group by trim(订单号)) where gs=1", oConnection
Sheets.Add
Sheets(1).Range("a1").CopyFromRecordset dd
------解决方案--------------------------------------------------------
   
VFP与EXCEL的几种交互编程方法

一、EXECL驱动VFP
EXECL内置的VBA语言(Visual Basic For Application)为EXECL功能的扩展提供了便利的手段,用户可使用该语言直接驱动VFP完成数据检索等功能。
程序首先生成一个VFP对象,然后用VFP的DoCmd方法执行VFP摸索命令串,其摸索结果再借助于VFP的DateToClip方法拷贝至剪切板,最后VBA将其粘贴至工作表的正确位置。
Sub FoxTest()

Dim oFox As Object
Dim Slesson As String
Dim Scommand As String

Set oFox = CreateObject("VisualFoxPro.Application") '启动VFP,生成VFP对象
Sheets("查询").Select
Slesson = Range("课程名") '在名为“课程名”的单元格中得到欲查询的课程名称
Sheets.Add '产生新的工作表单
ActiveSheet.Name = Slesson '指定工作表单的名称与课程名称相同

Scommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE "+ Slesson + "<60 INTO CURSOR TEMP" '形成VFP查询命令串
oFox.DoCmd Scommand '执行VFP命令串
oFox.DataToClip "temp", , 3 '将搜索结果以文本方式拷贝至剪切板
Range("a1:a1").Select '指向拷贝目标区域左上角单元
ActiveSheet.Paste '粘贴搜索结果

End Sub

为便于使用,作者在EXECL中自制了一名为“搜索”的工具栏及一名为“开始搜索”的按钮,并将上述宏程序段与自制按钮相关联,按下此按钮即可运行程序并在EXCEL中得到要求的数据。
制作工具栏及按钮的方法如下:
1. 选“工具”/“自定义”菜单,出现自定义对话框;
2. 选择“工具栏”页框,然后按下“新建”按钮;
3. 在工具栏对话框中输入“搜索”作为新建工具栏的名称;
4. 选择“命令”页框,在“类别”列表中选“宏”,在“命令”列表中选“自定义按钮”并将其拖放至新建的“搜索”工具栏;
5. 按下“更新所选内容”按钮,首先在“命名”栏中填入按钮名称“开始搜索”,然后选择“指定宏”,在随后出现的“指定宏”列表中选择上述宏程序FoxTest()即可实现为该宏指定一个工具栏按钮。

二、VFP使用OLE功能驱动EXECL
OLE(Object Linking and Embedding)对象链接与嵌入,是WINDOWS应用程序间相互传递和共享数据的一种有效方法。VFP借助于OLE不仅可共享其它应用程序的数据,而且还能以对象方式直接控制其它应用程序的运行,从而进一步扩展VFP的功能。VFP支持直接在程序中创建、使用和控制OLE对象,实现OLE自动化。作为OLE客户VFP与作为OLE服务器的EXCEL具有良好的编程接口,下述程序段用OLE方式实现所要求的功能。
程序首先生成一个EXCEL的OLE对象OleApp以便对其进行操作,然后利用OLE功能从EXCEL表单中获取欲查询的课程名,并控制EXCEL生成新的工作表,VFP的查询结果仍然使用剪切板的方式传递至EXCEL工作表。

OleApp=CREATEOBJECT("Excel.Application") && 打开EXCEL,产生OLE对象
OleApp.Application.Caption="VFP交互编程" && 指定标题栏名称
OleApp.Application.Visible=.T. && 置EXCEL可见
OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls") && 打开EXCEL工作簿
  相关解决方案