分享

VFP与 EXCEL...

 gmtyt 2006-09-04

VFP与 EXCEL

[ 2005-09-22 23:16:38 | 作者: 花狐狸 ]
: | |
在 VFP 中控件 Excel 的小小经验集

1 获取工作表名称

在以下示例中,创建了一个 microsoft excel 实例,添加了一个新的工作簿。使用 foreach 语句显示工作簿中每个工作表的名称。此示例要求在运行示例的机器上正确安装 microsoft excel。
oExcel = CREATE("Excel.Application")
oExcel.Workbooks.ADD

FOR EACH oMyVar IN oExcel.sheets
oMyVar.name
NEXT oMyVar

2 Excel报表巧生成

巧让FoxPro数据生成Excel报表
Visual FoxPro是应用广泛的前台数据库开发平台之一,因此在我们日常工作中时常会遇到DBF数据文件。然而随着办公自动化的普及,越来越多的时候需要将DBF文件转化为Excel电子文档。常用转化方法是在FoxPro中用Copy命令进行格式转化或直接用Excel打开DBF文件。这两种方式虽然都能达到目的,却不能得到格式规范、可以直接打印输出的报表,且输出的Excel文件中,无法对数据类型进行有效转换,极易出现数据统计错误。有没有更好的方法呢?这里有一个更加通用的方法,在VFP中调用Excel,可以由DBF文件直接生成格式如下图所示一样复杂的Excel报表(如图1)。 Excel报表
具体过程如下:
编辑推荐文章
● 新鲜接触Excel 2000 XP
● Excel 2000公式应用的几条经验
● Excel 2000函数应用之信息函数
假设我们要将表Agcallop.dbf文件输出为Excel格式文档,报表形如图1所示。为使通用性更强,页面采用A4纸横向输出,默认字体为宋体10号,页脚处添加页号。
部分程序代码如下:
m.outfilename=putfile(‘输出结果‘,‘agcallop‘,‘xls‘)
&&取导出文件名称
ef=CREATEOBJECT(‘Excel.application‘)
&&调用Excel程序
ef.Workbooks.add
&&添加工作簿
ef.Worksheets("sheet1").Activate
&&激活第一个工作表
ef.visible=.t.
&&显示Excel界面
ef.Cells.Select
&&选择整张表
ef.Selection.Font.Size = 10
&&设置整表默认字体大小为10
select 0
use agcallop
&&选择被导出的表
num=reccount()
&&求导出总记录数
go top
i=5
ef.range("F1:K1").Select
&&选择标题栏所在单元格
ef.Selection.Merge
&&合并单元格
with ef.range("F1 ")
&&设置标题及字体属性
.value=‘客户服务部业务代表工作量情况统计表‘
.Font.Name="黑体"
.Font.size=18
endwith
ef.Rows(2).RowHeight=1/0.035
&&设置第二行高度为1cmef.range("H2:O2").Select
&&选定统计条件栏所在单元格
ef.Selection.Merge
&&合并单元格
ef.range("H2").Font.size=10
ef.range("H2").HorizontalAlignment=4
&&设置内容对齐方式为右对齐,3为居中,2为右对齐
ef.range("H2").value=‘统计时间:‘+dtoc(date())+‘ 打印日期:‘+dtoc(date())
ef.Rows("3:4").Select
with ef.Selection
.HorizontalAlignment = 3
&&设置3、4行为水平对齐
.VerticalAlignment = 2
&&垂直居中
.NumberFormatLocal = "@"
&&设置3、4行为字符型内容
endwith
ef.Range("A3:A4").Select
ef.Selection.Merge
&&纵向合并第一列3、4行
ef.Range("A3").value=‘工号‘
&&设置第一列标题内容
ef.Columns("A").Select
&&整列选择
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Columns("A:B").Select
ef.Selection.NumberFormatLocal = "@"
&&设置A、B列为字符型内容
ef.Range("B3:B4").Select
ef.Selection.Merge
&&纵向合并第二列3、4行
ef.Range("B3").value=‘姓名‘
&&设置第二列标题内容
ef.Columns("B").Select
&&整列选择
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Range("C3:E3").Select
&&横向合并第三行C-E列
ef.Selection.Merge
ef.Range("C3").value=‘话务总量‘
&&第三行大标题为“话务总量”的列
ef.Range("C4").value=‘电话呼入量‘
&&“话务总量”下第1个小标题“电话呼入量”
ef.Range("D4").value=‘电话呼出量‘
&&“话务总量”下第2个小标题“电话呼出量”
ef.Range("E4").value=‘合 计‘
&&“话务总量”下第3个小标题“合计”
ef.Range("F3:H3").Select
ef.Selection.Merge
ef.Range("F3").value=‘话务总时间‘
ef.Range("F4").value=‘呼入时间‘
ef.Range("G4").value=‘呼出时间‘
ef.Range("H4").value=‘合 计‘
ef.Range("I3:K3").Select
ef.Selection.Merge
ef.Range("I3").value=‘单个话务平均时间‘
ef.Range("I4").value=‘呼入时间‘
ef.Range("J4").value=‘呼出时间‘
ef.Range("K4").value=‘合 计‘
ef.Range("L3:L4").Select
ef.Selection.Merge
ef.Range("L3").value=‘累计工作时间‘
ef.Range("M3:M4").Select
ef.Selection.Merge
ef.Range("M3").value=‘无效时间‘
ef.Range("N3:N4").Select
ef.Selection.Merge
ef.Range("N3").value=‘录入量‘
ef.Range("O3:O4").Select
ef.Selection.Merge
ef.Range("O3").value=‘有效时间比‘
接下来通过scan语句,依次为每一行每一列单元格赋值。为了获得更好的打印效果,还需进行页面设置,如标题行、页面居中、横向排版等,还可以加边框线。
以上程序在VFP 6+Excel 2000+Windows 2000下调试通过。实际应用中可根据需要对各项参数设置进行相应调整。

3 FOX控制EXCL文件另存为DBF(EXCL后台运行)

fil=Thisform.List1.Value &&其值为一个包含路径的文件名
eole=CREATEOBJECT(‘Excel.application‘)
eole.Workbooks.Open(fil) &&打开文件
eole.Selection.AutoFilter &&关闭(如果无则打开)自动筛选
eole.Range("A1:F1000").Select &&选中从第1行到1000行的前6列数据(另存后只有这些数据)
asfil=STRTRAN(UPPER(STRTRAN(fil,SUBSTR(fil,1,RAT(‘\‘,fil)),‘c:\windows\desktop\cphz\‘)),‘.XLS‘,‘.dbf‘) &&要保存的文件名
IF FILE(asfil)
DELETE FILE &asfil
ENDIF
eole.ActiveWorkbook.SaveAs(asfil,8) &&另存为DBF
eole.ActiveWorkbook.saved=.t. &&不保存当前EXCL表
eole.Workbooks.close &&关闭表
eole.quit &&退出EXCL
RELEASE eole &&释放变量

虽然用APPEND FROM tx.xls TYPE XL8可以更简单的追加数据,但有时会导致程序非法错误退出(不知是不是因为非法字符),而且还有一定的限制

4实用的VFP与EXCEL交互编程
邹益民

摘要:本文介绍了几种实用的VFP与EXCEL交互编程的方法与实例,将VFP强大的数据处理功能与EXCEL优异的制表功能有机地结合起来,大大增强了软件的应用效果。
关键词:VFP、EXCEL、DDE、OLE、交互编程。
Some Cross_Programming Methods Between VFP and EXCEL
Zou yiming(Gansu Lanzhou Section of Instruments Lanzhou Petrochemical Staff College)
Abstract: The author introduces us in this paper some practical methods and instance of cross_programming between VFP and EXCEL . It extremely improves their performances by combining VFP‘s data processing functions with EXCEL‘s excellent tabulation functions.
Key Words: VFP、EXCEL、OLE、DDE、Cross-Programming

VFP(Visual Foxpro)是一种关系型数据库管理系统,由于其强大的数据处理能力及良好的兼容性,使其成为数据库应用程序开发人员的强有力工具,而EXECL则是一种优秀的电子表格处理软件,在兼容性、操作界面、公式运算、图表等方面有着独到的优势。上述两种软件在各自的应用领域均得到广泛的应用,同时上述两种软件还具有良好的交互编程能力,为两者相辅相成、取长补短奠定了良好的基础。
本文将结合具体实例介绍几种VFP与EXCEL交互编程的方法,每种方法虽然实现手段各异,但功能相仿。其功能可简述如下:VFP数据表“学生成绩表.DBF”中含“学生姓名”、“语文”、“数学”......等字段,示例程序将从EXCEL工作簿“VFP交互.XLS”之工作表“查询”中用书签“课程名”指定的单元取得欲查询的课程名称,然后在数据表“学生成绩表.DBF”中自动搜索,以找到该门课程不及格的同学名单,最后传送至原EXCEL工作薄形成新的工作表单,同时,新工作表还将以该课程名命名。
下列程序均在VFP5.0与EXCEL97中调试通过。因篇幅所限,程序中的错误处理部分略去。

一、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工作簿

DO WHILE .T.
WITH OleApp.Application
nAnswer = MESSAGEBOX("开始搜索?", 32+4, "搜索指定数据") &&产生信息框
IF (.NOT.(nAnswer=6)) && 如按下“Yes"按钮,则开始搜索,反之退出
EXIT
ENDIF

.Sheets("查询").Select && 选择“查询”工作表单
SLesson = OleApp.Application.Range("课程名").Value && 得到欲查询的课程名称
.Sheets.Add && 新建一工作表单
.ActiveSheet.Name = Slesson && 指定工作表单的名称
SCommand = "SELECT 学号,语文,数学 FROM d:\vfp\学生成绩表 WHERE " +ALLTrim(SLesson) + "<60 INTO CURSOR TEMP" && 形成VFP查询命令串
&Scommand && 执行VFP命令串
_VFP.DataToClip("TEMP",,3) && 将搜索结果以文本方式拷贝至剪切板
.Range("a1:a1").Select && 指向拷贝目标区域左上角单元
.ActiveSheet.Paste && 粘贴搜索结果
ENDWITH
ENDDO

OleApp.Quit && 关闭EXCEL,保存更新后的工作簿文件

****************************************
objexcel.activeworkbook.close(.f.)
那个是关闭excel啊~~不是存盘~关闭了就不能存盘了

5设置打印参数:

问:用Excel做报表,可打印时怎么选择打印机,即.ActiveWindow.SelectedSheets.PrintOut的参数有哪些?

答:
expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)

expression 必选。该表达式返回“应用于”列表中的某个对象。

From Variant 类型,可选。打印的开始页号。如果省略该参数,将从起始位置开始打印。

To Variant 类型,可选。打印的终止页号。如果省略该参数,将打印至最后一页。

Copies Variant 类型,可选。要打印的份数。如果省略该参数,将只打印一份。

Preview Variant 类型,可选。如果为 True 则 Microsoft Excel 打印指定对象之前进行打印预览。如果为 False,或者省略此参数则立即打印该对象。

ActivePrinter Variant 类型,可选。 设置活动打印机的名称。

PrintToFile Variant 类型,可选。如果为 True 则打印输出到文件。如果没有指定 PrToFileName,则 Microsoft Excel 将提示用户输入要输出文件的文件名。

Collate Variant 类型,可选。如果为 True 则逐份打印每份副本。

PrToFileName 可选,Variant 类型。如果将 PrintToFile 设置为 True,则本参数指定要打印到的文件名。

说明

From 参数和 To 参数所描述的“页”指的是要打印的页,并非指定工作表或工作簿中的全部页。

6如何用编程的方法打开有密码的Excel文件?

问题:
Excel文件加了密码,如何在VFP中用编程的方式把密码输入,使Excel文件打开
如:
eole=CREATEOBJECT(‘Excel.application‘)
eole.Workbooks.Open("d:\22.xls")
这样还有一个密码的对话框出来,需要输入密码才能打开文件。
如何用编程的方法直接打开有密码的Excel文件?

答:

oEle.Workbooks.Open("d:\22.xls",.f.,.f., ,"123","456")
"123"表示打开权限的密码,
"456"表示修改权限的密码.

----------------------------------------------

问题一:如何将一个已知路径的图片插入到excel中.

答:
oexcel1.ActiveSheet.Pictures.Insert("图片文件名")

----------------------------------------------

问题二:能不能指定在某一位置或区域放置图片并控制图片显示大小呢?

答:
OLEAPP.SHEETS(1).SELECT
oleapp.Range("位置").Select
oleapp.ActiveSheet.Pictures.Insert("图片文件名")).Select
oleapp.Selection.ShapeRange.LockAspectRatio =.T.
oleapp.Selection.ShapeRange.Height = 57

----------------------------------------------

问题:类型为字符型的字段输出到excel 中,前面的零被自动去掉,例如“009877”变为“9877”,怎么解决?

答:
1.在字符串前面加半角单引号“ ‘ ”

2.
eole.Range("A1:Y1").Select
eole.Selection.NumberFormatLocal = "@"

----------------------------------------------

在 Excel 中插入行和列 :

objExcel.Rows(1).Insert() &&在第一行前面插入一行
objExcel.Columns(2).Insert() &&在第二列前面插入一列

----------------------------------------------

获取 Excel 记录数

loXls = CREATEOBJECT("excel.application")
bookExcel = loXls.APPLICATION.Workbooks.OPEN("f:\pz.xls")
nrows=bookExcel.Worksheets(‘pz‘)
UsedRange =nrows.UsedRange
r = UsedRange.ROWS.COUNT &&行数
c = UsedRange.COLUMNS.COUNT &&列数

----------------------------------------------

问:在EXCEL中如何在打开文件的同时自动执行一个宏命令。

答:
只要将宏的命名为 AUTO_OPEN 即可。
如果要在文件关闭时运行,则命名为auto_close 。

----------------------------------------------

问:在VFP中可以执行EXCEL的选择性粘贴吗?

.Range("A2").PasteSpecial ("xlPasteValues") && 会出错

.Range("A2").PasteSpecial (3) && 也会出错

.Range("A2").PasteSpecial && 只好这样了

如何才能只粘贴值呢?

=====================================================

答:

xlPasteValues=-4163
oExcel.Range("A1").Select
oExcel.Selection.copy
oExcel.Range("B1")._PasteSpecial(xlPasteValues)

注意:在Excel 中,"xlPasteValues"是一个常量,它的值是一个数值型的:-4163

7--------

1.创建Excel对象

  eole=CREATEOBJECT(′Excel.application′)

  2.添加新工作簿

  eole.Workbooks.add

  3.设置第3个工作表为激活工作表

  eole.Worksheets(″sheet3″).Activate

  4.打开指定工作簿

  eole.Workbooks.Open(″c:\temp\ll.xls″)

  5.显示Excel窗口

  eole.visible=.t.

  6.更改Excel标题栏

  eole.Caption=″VFP应用程序调用Microsoft Excel″

  7.给单元格赋值

  eole.cells(1,4).value=XM(XM为数据库字段名)

  8.设置指定列的宽度(单位:字符个数)

  eole.ActiveSheet.Columns(1).ColumnWidth=5

  9.设置指定行的高度(单位:磅)

  eole.ActiveSheet.Rows(1).RowHeight=1/0.035

  (设定行高为1厘米,1磅=0.035厘米)

  10.在第18行之前插入分页符

  eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1

  11.在第4列之前删除分页符

  eole.ActiveSheet.Columns(4).PageBreak=0

  12.指定边框线宽度(Borders参数如下)

  ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=3

  13.设置四个边框线条的类型

  eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1

  (其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)

  14.设置页眉

  eole.ActiveSheet.PageSetup.CenterHeader=″报表1″

  15.设置页脚

  eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″

  16.设置页眉到顶端边距为2厘米

  eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035

  17.设置页脚到底边距为3厘米

  eole.ActiveSheet.PageSetup.FooterMargin=3/0.035

  18.设置顶边距为2厘米

  eole.ActiveSheet.PageSetup.TopMargin=2/0.035

  19.设置底边距为4厘米

  eole.ActiveSheet.PageSetup.BottomMargin=4/0.035

  20.设置左边距为2厘米

  veole.ActiveSheet.PageSetup.LeftMargin=2/0.035

  21.设置右边距为2厘米

  eole.ActiveSheet.PageSetup.RightMargin=2/0.035

  22.设置页面水平居中

  eole.ActiveSheet.PageSetup.CenterHorizontally=.t.

  23.设置页面垂直居中

  eole.ActiveSheet.PageSetup.CenterVertically=.t.

  24.设置页面纸张大小(1-窄行8511 39-宽行1411)

  eole.ActiveSheet.PageSetup.PaperSize=1

  25.打印单元格网线

  eole.ActiveSheet.PageSetup.PrintGridlines=.t.

  26.拷贝整个工作表

  eole.ActiveSheet.UsedRange.Copy

  27.拷贝指定区域

  eole.ActiveSheet.Range(″A1:E2″).Copy

  28.粘贴

  eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial

  29.在第2行之前插入一行

  eole.ActiveSheet.Rows(2).Insert

  30.在第2列之前插入一列

  eole.ActiveSheet.Columns(2).Insert

  31.设置字体

  eole.ActiveSheet.Cells(2,1).Font.Name=″黑体″

  32.设置字体大小

  eole.ActiveSheet.Cells(1,1).Font.Size=25

  33.设置字体为斜体

  eole.ActiveSheet.Cells(1,1).Font.Italic=.t.

  34.设置整列字体为粗体

  eole.ActiveSheet.Columns(1).Font.Bold=.t.

  35.清除单元格公式

  eole.ActiveSheet.Cells(1,4).ClearContents

  36.打印预览工作表

  eole.ActiveSheet.PrintPreview

  37.打印输出工作表

  eole.ActiveSheet.PrintOut

  38.工作表另为

  eole.ActiveWorkbook.SaveAs(″c:\temp\22.xls″)

  39.放弃存盘

  eole.ActiveWorkbook.saved=.t.

  40.关闭工作簿

  eole.Workbooks.close

  41.退出Excel

  eole.quit

8将DBF数据文件导成excel文件的问题(急,UP有分)

用 copy to EXCEL表名 type xl5

只能导出16383条记录,超过此数的用以下方法导出:

方法一:

如果你的数据中都是普通的数值和字符串类型,直接用Excel打开表,然后“另存为”一个Excel就可以了。

---------------------------------------------------------------

方法二:用代码导

&& DbfToExcel.PRG

&& 记得要安装Excel啊,否则不好用

CLOSE DATABASES ALL

SET DATE YMD

SET CENTURY ON

cDbfFile = GETFILE("dbf")

IF EMPTY(cDbfFile)

RETURN

ENDIF

USE (cDbfFile) ALIAS FoxTable IN 0

IF NOT USED("FoxTable")

=MESSAGEBOX("打开表失败,程序将中止!", 16, "Error")

RETURN

ENDIF

cExcelFile = PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls")

IF EMPTY(cExcelFile)

CLOSE DATABASES ALL

RETURN

ENDIF

SELECT FoxTable

oExcelSheet = GETOBJECT("","Excel.Sheet") && 产生Excel对象

IF NOT TYPE("oExcelSheet") = "O"

=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")

RETURN

ENDIF

oExcelApp = oExcelSheet.Application

oExcelApp.Workbooks.Add()

oExcelApp.ActiveWindow.WindowState=2

oSheet = oExcelApp.ActiveSheet

nFldCount = AFIELDS(aFldList, "FoxTable")

FOR i = 1 TO nFldCount

oSheet.Cells(1,i).Value = aFldList[i, 1]

ENDFOR

cRecc = STR(RECCOUNT("FoxTable"))

SCAN

WAIT WINDOW ALLTRIM(STR(RECNO())) + "/" + cRecc NOWAIT

FOR i = 1 TO nFldCount

vValue = .NULL.

IF AT(aFldList[i, 2], "CDLMNFIBYT") = 0

LOOP

ENDIF

cFldName = aFldList[i, 1]

vValue = EVALUATE(cFldName)

DO CASE

CASE aFldList[i, 2] = "C" && 字符/字符串

vValue = TRIM(vValue)

CASE aFldList[i, 2] = "D" && 日期

vValue = DTOC(vValue)

CASE aFldList[i, 2] = "T" && 日期时间

vValue = TTOC(vValue)

CASE INLIST(aFldList[i, 2], "N", "F", "I", "B", "Y") && 数值

CASE aFldList[i, 2] = "L" && 逻辑

CASE aFldList[i, 2] = "M" && 备注型

OTHERWISE

vValue = .NULL.

ENDCASE

IF VARTYPE(vValue) = "C" AND EMPTY(vValue)

LOOP

ENDIF

IF NOT ISNULL(vValue)

oSheet.Cells(RECNO("FoxTable")+1, i).Value = vValue

ENDIF

ENDFOR

ENDSCAN

cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

FOR i = 1 TO nFldCount

cColumn = SUBSTR(cChrStr, INT((i-1)/26), 1) + SUBSTR(cChrStr, IIF(MOD(i, 26)= 0, 26, MOD(i, 26)) , 1)

oSheet.Columns(cColumn + ":" + cColumn).ColumnWidth = 12

IF aFldList[i, 2] = "M"

oSheet.Columns(cColumn + ":" + cColumn).WrapText = .F.

ENDIF

ENDFOR

oExcelApp.ActiveWorkbook.SaveAs(cExcelFile)

oExcelApp.ActiveWorkbook.Close(.F.)

oExcelApp.ActiveWorkbook.Close(.F.)

oExcelApp.Quit

oExcelSheet = .NULL.

oExcelApp = .NULL.

WAIT CLEAR

=MESSAGEBOX("转换完毕!", 64, "OK")

CLOSE DATABASES ALL

程序是用VFP8写的,在VFP6中也可以,没有问题。只要能够执行完成,就会是正确的,行数只受你安装的Excel最大行数限制,至少大于65535行

这个程序支持所有字段类型,包括MEMO类型字段。

9在用VFP调用EXCEL时如何获取工作表的数目?

CLEAR

LOCAL lnSheetCount

EOLE=CREATEOBJECT("EXCEL.APPLICATION")&&创建Excel对象

EOLE.WORKBOOKS.OPEN("c:\111\321.xls")&&打开指定工作簿

WITH EOLE

lnSheetCount=.WorkBooks(1).Sheets.Count&&统计工作表数量

ENDWITH

‘当前EXCEL表中工作表的数目为:‘+ALLTRIM(STR(lnSheetCount))

FOR EACH oMyVar IN eole.sheets

‘当前EXCEL表中工作表的名称分别为‘+oMyVar.name&&显示Excel表中所有工作表

NEXT oMyVar

EOLE.WORKBOOKS.CLOSE&&关闭工作簿

EOLE.QUIT&&退出Excel

10如何将excel导入vf中,用程序!

使用import命令,如:

IMPORT FROM 表1.xls TYPE xl8

将表1.xls导入为表1.dbf

---------------------------------------------------------------

用VFP导入

点击“文件”->导入->

类型选择:“Microsoft Excel 5.0 和 97 (XLS)”

来源于选择:你要导入的Excel文件

工作表:默认为Sheet1,如是你要把Excel文件中Sheet2中内容导过来,就选择“Sheet2”

->最后点击导入即可。

以上操作相当于如下命令操作:

IMPORT FROM 你的表.xls TYPE XL8 SHEET "Sheet2"

有时需要把Excel表另存为“Microsoft Excel 5.0 和 97 (XLS)” 格式后,再用以上命令进行导入。

----------------------------建议---------------------------

导出

copy to 1.xls type xl5

导入

import from 1.lxs type xl8



import from 1.lxs type xl5

11如何在VFP编制的程序中,导入EXCEL的数据!

点击“文件”->导入->

类型选择:“Microsoft Excel 5.0 和 97 (XLS)”

来源于选择:你要导入的Excel文件

工作表:默认为Sheet1,如是你要把Excel文件中Sheet2中内容导过来,就选择“Sheet2”

->最后点击导入即可。

以上操作相当于如下命令操作:

IMPORT FROM 你的表.xls TYPE XL8 SHEET "Sheet2"

-----------

比喻说你的EXCEL中的文件名为:AA.XLS

IMPORT FROM AA TYPE XLS &&注意这个AA不要与你的数据库中的某一个表名相同.

USE AA

COPY TO ARRAY MYARRAY

OPEN DATA 你的数据库

USE 你的表名 &&表结构得与你的AA.XLS一样.

APPEND FROM ARRAY MYARRAY

然后你就可以处理这个表了.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多