精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VFP>>〖源码共赏〗>>我为薇姐祈福 [bluefires]:看看我的VFP+EXCEL打印报表

主题:我为薇姐祈福 [bluefires]:看看我的VFP+EXCEL打印报表
发信人: goodfrd(HAL9000)
整理人: hunter__fox(2003-05-18 20:24:33), 站内信件
☆☆☆VFP/EXCEL打印报表演示程序V1.0和V1.1

VFP通过OLEA调用EXCEL打印报表演示程序V1.0:
.EXE  .DBF 等用 WINRAR 3 压缩,因本论坛不能上传>100K的文件,所以分成3个文件:
.rar 第1部分(88KB):
 点击浏览该文件
.rar 第2部分(88KB):
 点击浏览该文件
.rar 第3部分(26KB):
 点击浏览该文件

注意:需要 VFP 5.0 运行库和 EXCEL 97 或以上版本(我用EXCEL 97做的测试)

VFP通过OLEA调用EXCEL打印报表演示程序V1.1:
.EXE  .DBF 等用 WINRAR 3 压缩,因本论坛不能上传>100K的文件,所以分成2个文件:
.rar 第1部分(98KB):
 点击浏览该文件
.rar 第2部分(33KB):
 点击浏览该文件

不分卷的一个 .RAR 的文件请到小好的FTP取(V1.1:):ftp://fox:fox@61.133.63.168/MLYUpload/PRT_dm11.rar

注意:需要 VFP 5.0 运行库和 EXCEL 97 或以上版本(我用EXCEL 97做的测试)

注: V1.1  V1.0 增加了一个“自由选择字段打印报表”菜单,使用步骤是:
1、选择打印字段和修改打印字段属性(栏目名、栏宽等)
2、重新生成模板(样表)
3、查看、修改样表
4、送往EXCEL打印

演示程序部分代码如下:
* P_TXL2.PRG    任意选择字段打印同学录
......
    c_OpgArr1[1] = '\<1 选择打印字段,设置字段打印属性'
    c_OpgArr1[2] = '\<2 按字段设置/选择重新生成EXCEL模板(样表)'
    c_OpgArr1[3] = '\<3 查看/修改EXCEL模板(样表)'
    c_OpgArr1[4] = '\<4 按姓名查询并按前面设置打印同学录'
    c_OpgArr1[5] = '\<0 退出'
    DO FORM I_OPT WITH '任意选择字段打印同学录:''请选择:'c_OpgArr155
......
c_Flds = ;
  [ TAB_NAME   :10 :R :H='表名',]+;
  [ FIELD_NO   :8     :H='字段序号',]+;
  [ FIELD_NAME :30 :R :H='字段名',]+;
  [ FIELD_TYPE :8  :R :H='字段类型',]+;
  [ FIELD_LEN  :8  :R :H='字段长度',]+;
  [ FIELD_DEC  :8  :R :H='小数位数',]+;
  [ COL_NAME   :30    :H='打印栏目名',]+;
  [ COL_LEN    :12    :H='打印栏目宽度']
......
BROWSE FIELDS &c_FLDS FOR TAB_NAME=[T_TXL] ;
    NOAPPEND ;
    TITLE [选择和设置打印字段属性,字段序号为0者不打印]+;
    [(若全部删除,再进入时可以自动生成), 按Esc退出]

* 字段序号决定打印的栏目顺序,例如:编号为1,姓名为2,性别为3,出生日期为4,...
* 则在EXCEL中打印的栏目顺序就是:编号、姓名、性别、出生日期、...
* 如果你把编号的字段序号改为10,则在EXCEL中打印的栏目顺序就是:
* 姓名、性别、出生日期、......编号
* 如果你不想打印某些字段,则把它的字段序号改为0或负数就可以了

......
DO FORM I_1STR WITH [按字段设置/选择重新生成EXCEL模板(样表)], ;
    [请输入报表标题:][我 的 同 学 录]60.F.
IF glSEL_CANCEL
    RETURN
ENDIF
gcSTRING1 = TRIM(gcSTRING1)

WAIT WINDOW NOWAIT "正在按字段设置/选择重新生成EXCEL模板(样表) ..."

......
DO FORM I_1STR WITH [按姓名查询并按前面设置打印同学录], ;
    [请输入查询姓名(%表示任意字符):][]8.T.
IF glSEL_CANCEL
    RETURN
ENDIF
gcSTRING1 = TRIM(gcSTRING1)
IF EMPTY(gcSTRING1) OR RIGHT(gcSTRING11) != [%]
    gcSTRING1 = gcSTRING1 + [%]
ENDIF
SELECT * FROM T_TXL.DBF INTO DBF TMP1.DBF ;
    WHERE 同学姓名 LIKE gcSTRING1 ;
    ORDER BY 出生日期,同学姓名
IF _TALLY = 0
    =MSG_INF([找不到符合条件的记录!][???])
    CLOSE TABLES ALL
    RETURN
ENDIF

......
BROWSE NOMODIFY NODELETE NOAPPEND NOMENU ;
    TITLE [查看符合条件的同学录, 按Esc退出]
IF !MSG_NY([是否启动 Excel 进行打印?][查询打印])
    RETURN
ENDIF
DIMENSION c_OpgArr1[10]
c_OpgArr1[1] = '\<1 自由操作'
c_OpgArr1[2] = '\<2 打印预览'
c_OpgArr1[3] = '\<3 直接打印'
c_OpgArr1[4] = '\<0 退出'
DO FORM I_OPT WITH 'Excel 操作选择:''请选择:'c_OpgArr143
......

[关闭][返回]