VFP全面控制EXCLWord文档下载推荐.docx
- 文档编号:21039817
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:9
- 大小:20.98KB
VFP全面控制EXCLWord文档下载推荐.docx
《VFP全面控制EXCLWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VFP全面控制EXCLWord文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
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-窄行851139-宽行1411)
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
自定义报表信息显示
说明:
此功能是为了增加打印预览控制工具条上的功能而另外增加的,作用不是很大,主要是为了查看当前我们所预览的报表的一些打印信息,比如我们还没去打印当前我们所需的报表,但是可以先看一下这个报表所需的环境,比如她需要多大的纸,是横向打印呢,还是纵向打印等等,可以更加友好我们的程序。
提示:
因为该文处于文章排版的需要,所以采用了汉字双字节的空格,而这些空格在程序中执行会提示错误,所以请将以下代码选择复制后,请再处理去掉其中包含的双字节空格,可用一些文字处理软件将双字节空格“ ”全部替换为单字节空格!
*--程序名称:
DspRptInfo.prg
*--程序功能:
显示报表文件的信息
*--使用方法:
DspRptInfo()
* 文件名不用带扩展名,系统自动以FRX做报表文件的扩展名
*--返 回:
无数据返回,只是提示一个MESSAGEBOX对话框
*--原创作者:
红虎
*--编写日期:
2001年1月
FuncDspRptInfo
paraRptFileName
*--检查参数的正确性
iftype("
RptFileName"
)#"
C"
messagebox("
参数传递错误!
"
16,"
错误"
)
retu.f.
endif
*--检查参数是否带扩展名
ifat("
."
RptFileName)=0
RptFilename=RptFilename+"
.frx"
*--判断报表文件是否存在
if!
file("
&
RptFilename"
报表文件&
RptFilename不存在!
endif
*--当前工作区
nCur_alias =select()
*--打开报表文件在一个新的工作区,并用一个专用的别名
use"
in0aliascRptTableshare
*--从次报表文件中获取相关的打印信息
selecRptTable
locaforObjType=1andObjCode=53 &
这两个是记录报表信息的特定信息,一般在第一条记录
iffound()
*--获得该报表信息并存放一个变量中
rptinfo=allt(expr)
else
*--获取失败
rptinfo ="
报表文件读取失败!
endif
use &
关闭报表文件
*--因报表信息占据多行,因此里面一定会有换行,所以会有字符chr(13)
(chr(13)$rptinfo)
messagebox(rptinfo,16,"
*--选择原有工作区
select(nCur_alias)
*--定义数组用来存放打印信息
* 共需获得报表的9项内容:
系统名,名称,值...
DimeNeedInfo(11,3)
*--设备名
NeedInfo(1,1) ="
DRIVER"
NeedInfo(2,1) ="
DEVICE"
NeedInfo(3,1) ="
OUTPUT"
NeedInfo(4,1) ="
PAPERSIZE"
NeedInfo(5,1) ="
ORIENTATION"
NeedInfo(6,1) ="
DEFAULTSOURCE"
NeedInfo(7,1) ="
PRINTQUALITY"
NeedInfo(8,1) ="
YESSOLUTION"
NeedInfo(9,1) ="
TTOPTION"
NeedInfo(10,1) ="
PAPERLENGTH"
NeedInfo(11,1) ="
PAPERWIDTH"
*--对应中文名
NeedInfo(1,2) ="
驱动"
NeedInfo(2,2) ="
打印机"
NeedInfo(3,2) ="
位置"
NeedInfo(4,2) ="
纸大小"
NeedInfo(5,2) ="
纸方向"
NeedInfo(6,2) ="
纸来源"
NeedInfo(7,2) ="
分辨率"
NeedInfo(8,2) ="
质量"
NeedInfo(9,2) ="
品质"
NeedInfo(10,2) ="
长度"
NeedInfo(11,2) ="
宽度"
*--对11个设备名循环读取相应的信息,存放在数组的相应的第三维
Forn=1to11
temp_name="
&
临时值赋空先
nPos=at(NeedInfo(n,1),rptinfo)+len(NeedInfo(n,1))+1 &
开始提取的内容的首字位置
dowhilenPos>
0 &
在信息里的一行进行循环
*--提取当前设备的等号后的信息内容
one_byte=substr(rptinfo,nPos,1) &
提取一个字节
ifone_byte=chr(13) &
如果这个字节是尾,即换行了
exit &
退出循环,继续下一个设备
else
temp_name=temp_name+one_byte
endif
nPos=nPos+1 &
位置往后加1继续循环得到后面的信息直到遇到换行符号
enddo
NeedInfo(n,3) =temp_name &
一个信息得到,存放起来
Endfor
*--上面所得到的信息有些只是些代码,需要继续对一些数据进行再处理,如纸的方向,大小等
*--对纸的方向
NewValue=NeedInfo(5,3)
docase
caseNewValue="
0"
纵向
NewValue="
纵向"
1"
横向
横向"
endcase
NeedInfo(5,3)=NewValue
*--对纸的大小
nPageno=Int(val(NeedInfo(4,3)))
ifnPageno=256 &
自定义
NeedInfo(4,3)="
自定义尺寸:
"
+NeedInfo(10,3)+"
*"
+NeedInfo(11,3)+"
mm"
else
ifnPageno>
=1andnPageno<
=41
dimepaper_list(41)
paper_list
(1) ="
Letter,81/2x11in"
paper_list
(2) ="
LetterSmall,81/2x11in"
paper_list(3) ="
Tabloid,11x17in"
paper_list(4) ="
Ledger,17x11in"
paper_list(5) ="
Legal,81/2x14in"
paper_list(6) ="
Statement,51/2x81/2in"
paper_list(7) ="
Executive,71/4x101/2in"
paper_list(8) ="
A3,297x420mm"
paper_list(9) ="
A4,210x297mm"
paper_list(10) ="
A4,Small210x297mm"
paper_list(11) ="
A5,148x210mm"
paper_list(12) ="
B4,250x354mm"
paper_list(13) ="
B5,182x257mm"
paper_list(14) ="
Folio,81/2x13in"
paper_list(15) ="
Quarto,215x275mm"
paper_list(16) ="
10x14in"
paper_list(17) ="
11x17in"
paper_list(18) ="
Note,81/2x11in"
paper_list(19) ="
Envelope#9,37/8x87/8in"
paper_list(20) ="
Envelope#10,41/8x91/2in"
paper_list(21) ="
Envelope#11,41/2x103/8in"
paper_list(22) ="
Envelope#12,41/2x11in"
paper_list(23) ="
Envelope#14,5x111/2in"
paper_list(24) ="
Csizesheet"
paper_list(25) ="
Dsizesheet"
paper_list(26) ="
Esizesheet"
paper_list(27) ="
EnvelopeDL,110x220mm"
paper_list(28) ="
EnvelopeC5,162x229mm"
paper_list(29) ="
EnvelopeC3,324x458mm"
paper_list(30) ="
EnvelopeC4,229x324mm"
paper_list(31) ="
EnvelopeC6,114x162mm"
paper_list(32) ="
EnvelopeC65,114x229mm"
paper_list(33) ="
EnvelopeB4,250x353mm"
paper_list(34) ="
EnvelopeB5,176x250mm"
paper_list(35) ="
EnvelopeB6,176x125mm"
paper_list(36) ="
Envelope,110x230mm"
paper_list(37) ="
EnvelopeMonarch,37/8x7.5in"
paper_list(38) ="
63/4Envelope,35/8x61/2in"
paper_list(39) ="
USStdFanfold,147/8x11in"
paper_list(40) ="
GermanStdFanfold,81/2x12in"
paper_list(41) ="
GermanLegalFanfold,81/2x13in"
NeedInfo(4,3)=paper_list(nPageno)
else
*--其他
NeedInfo(4,3)="
其他类型纸张..."
endif
*--纸张来源
Newvalue=NeedInfo(6,3)
docase
caseNewvalue="
8"
Newvalue="
进纸箱"
4"
手动进纸"
265"
送纸盒1"
266"
送纸盒2"
endcase
NeedInfo(6,3)=Newvalue
*--分别率
NeedInfo(7,3)=NeedInfo(7,3)+"
x180"
rptinfo="
要提示的信息的内容
forn=1to7
rptinfo=rptinfo+NeedInfo(n,2)+"
:
+NeedInfo(n,3)+iif(n=9,'
'
chr(13)+chr(13))
endfor
messagebox(rptInfo,64,"
报表信息:
+RptFileName)
任意打印字段报表的实现
----存在的问题
----用VFP生面的执行程序后,对于用户所需的某一数据库的任意字段组合报表,就显得不是那样运用自如。
因为,一方面软件开发时,无法考虑到日后用户所需报表的所有格式。
另一方面,由于所设计好的报表格式文件已编译成可执行文件,即使修改了.FRX和.FRT文件结构内容,也需在开发环境下重新编译,对用户来讲是不实现的。
例如需一份员工名单及一个空栏位,进行签名或登记某一证件号码的问题就比较难解决。
----解决方案
----运用VFP与Excel的交换数据及在VFP中全面控制Excel的操作(即自动服务器),就可以很好的解决这一问题。
关于如何控制Excel,一方面可以通过Excel的帮助文件的VBA语法,另一方面也有相当多的文章关于控制Excel的语法。
值得注意的是:
1、为提高效率,所有有关计算、小计、合计最好在VFP中进行,并写在相应的记录内;
2、由于是两个软件,如果在有大量数据逐一插入Excel单元格时,显得速度较慢,所以如果数据量较大,应直接用VFP的数据表导出为Excel格式,再由VFP在后台控制Excel打开,并指定的Excel格式文件进行修改文档标题、列的名称、网格线型,以及根据纸张大小计算各列宽和调整字体大小。
----实现办法
----利用SQL结构化语言的Select生成一个数据表
----在Select字段时,可以利用一个表单Form1加入两个列表框,一个列表框列出所有数据表的字段,另一个为空,利用鼠标双击或拖拉至空的列表框里,为选定一字段(此时第一个含有所有字段的列表框中,将不再显示被拖拉走的字段,而在另一列表中显示),并生成相应的Select查询程序段。
----在本实例中为:
form1中含有一个list1和edit1和两个按钮
Form1.ini
publica,b,c,d,f,g
a="
SELECT"
b="
c="
FROMbnINTOCURSORmyquery"
d="
f=0
g=0
list1.dblclick
iflen(alltrim(b))=0
b=b+thisform.list1.value
b=b+"
"
+thisform.list1.value
d=a+b+c
thisform.edit1.refresh
formm=1tothisform.list1.listcount
ifthisform.list1.selected(mm)
thisform.list1.removeitem(mm)
endfor
command1.click**执行所生成的select语句
SELECT&
BFROMBNINTOCURSORMYQUERY
selemyquery
command2.click**调用excel
my=createobject("
excel.application"
my.visible=.t.**如果在交付用户时可以将其设置成.F.
my.workbooks.add
selectmyquery
f=fcount()
g=reccount()
gototop
forl=1tog
fori=1tof
fieldname=field(i)
**对于要生成中文的列位标题可以用
一英文字段名称与中文名称对应的参数库来解决
my.activeworkbook.sheets
(1).cells(l,i).value=myquery.&
fieldname
skip
**如果要增加一空列可以用
my.activesheet.columns(f+1).insert语法
**设置页眉my.activesheet.pagesetup.
centerheader(centerfooter)=”xxx”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VFP 全面 控制 EXCL
![提示](https://static.bdocx.com/images/bang_tan.gif)