发信人: 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_OpgArr1, 5, 5
 ......
 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(gcSTRING1, 1) != [%]
     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_OpgArr1, 4, 3
 ...... | 
 
 
 |