| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5577 人关注过本帖, 1 人收藏
标题:动态打印工资清单
只看楼主 加入收藏
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
版主,烦您忙中抽时间帮设计个打印模板,没这方面的编程经验。谢谢你了。
2013-08-22 11:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
CLEAR ALL
CLEAR
Main()
CLEAR ALL
RETURN 

PROCEDURE Main()
    LOCAL lcFileName, loExcel, lnRow, lnCol, lnIndex, lcField, lnRecIndex
    LOCAL lnFile, laString[1], lnCounter, lcBuffer
    LOCAL lnMaxRows, lnMaxCols
   
    lnMaxRows = 5
    lnMaxCols = 4
   
    lcFileName = "工资条.txt"
    IF !FILE(lcFileName)
        MESSAGEBOX("文件" + lcFileName + "不存在!", 16, "")
        RETURN
    ENDIF
    lnFile = FOPEN(lcFileName)
    IF lnFile == -1
        MESSAGEBOX("文件" + lcFileName + "打开失败!", 16, "")
        RETURN
    ENDIF
    lnIndex = 0
    DO WHILE !FEOF(lnFile)
        lnIndex = lnIndex + 1
        DIMENSION laString[lnIndex]
        laString[lnIndex] = ALLTRIM(FGETS(lnFile))
    ENDDO
    FCLOSE(lnFile)

    IF !USED("工资")
        USE test_prn ALIAS 工资 IN 0
    ENDIF
   
    lcFileName = Application.DefaultFilePath + "\工资条"
    IF FILE(lcFileName + ".xls")
        loFileName = lcFileName + ".xls"
        DELETE FILE (lcFileName)
    ELSE
        IF FILE(lcFileName + ".xlsx")
            lcFileName = lcFileName + ".xlsx"
            DELETE FILE (lcFileName)
        ENDIF
    ENDIF
   
    WAIT "正在启动 Microsoft Excel Application,请稍候……" WINDOW NOWAIT
    loExcel = CREATEOBJECT("Excel.Application")
    WAIT "正在生成工资条,请稍候……" WINDOW NOWAIT
    WITH loExcel
        .SheetsInNewWorkbook = 1
        .Workbooks.Add
        .WorkSheets(1).Activate
        lnRecIndex = 0
        SELECT 工资
        SCAN ALL
            lnRecIndex = lnRecIndex + 1
            lnRow = 1 + (lnRecIndex - 1) * lnMaxRows
            IF lnRecIndex > 1
                .ActiveSheet.Rows(1 + (lnRecIndex - 1) * lnMaxRows).PageBreak = 1
            ENDIF
            FOR lnIndex = 1 TO ALEN(laString, 1)
                lnCol = 2
                lcBuffer = laString[lnIndex]
                DO WHILE !EMPTY(lcBuffer)
                    lnPos = AT(",", lcBuffer, 1)
                    IF lnPos > 0
                        lcField = LEFT(lcBuffer, lnPos - 1)
                        lcBuffer = ALLTRIM(SUBSTR(lcBuffer, lnPos + 1))
                        .ActiveSheet.Rows(lnRow + lnIndex).HorizontalAlignment = 3
                        DO CASE
                            CASE lcField == "月份"
                                lcField = "日期"
                                IF !EMPTY(EVALUATE(lcField))
                                    .Cells(lnRow + lnIndex, lnCol).Value = lcField
                                    .Cells(lnRow + lnIndex, lnCol + 1).Value = TRANSFORM(MONTH(EVALUATE(lcField)))
                                ENDIF
                            CASE lcField == "车间"
                                lcField = "部门"
                                IF !EMPTY(EVALUATE(lcField))
                                    .Cells(lnRow + lnIndex, lnCol).Value = lcField
                                    .Cells(lnRow + lnIndex, lnCol + 1).Value = TRANSFORM(EVALUATE(lcField))
                                ENDIF
                            OTHERWISE
                                IF !EMPTY(EVALUATE(lcField))
                                    .Cells(lnRow + lnIndex, lnCol).Value = lcField
                                    .Cells(lnRow + lnIndex, lnCol + 1).Value = TRANSFORM(EVALUATE(lcField))
                                ENDIF
                        ENDCASE
                        lnCol = lnCol + 2
                        IF lnCol > 2 * lnMaxCols
                            lnCol = 2
                        ENDIF 
                    ENDIF
                ENDDO
            NEXT
        ENDSCAN
        .ActiveWorkbook.SaveAs(lcFileName)
        .Quit
    ENDWITH
    RELEASE loExcel
    WAIT "工资条已生成" WINDOW
   
ENDPROC


工资条.txt.zip (150 Bytes)

授人以渔,不授人以鱼。
2013-08-22 11:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
模板文件用文本文件写,像下面这个样子:
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2013-08-22 11:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
生成的效果是这样,每个人一页:
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2013-08-22 11:32
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
TonyDeng版主,我认真学习一下,不懂再请教您!非常感谢您的帮助!谢谢
2013-08-22 11:46
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
回复 42楼 TonyDeng
版主,附件下载后不能解压
2013-08-22 11:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把文件名后面的.zip删掉就可以了,不是压缩文件,不用解压的。

[ 本帖最后由 TonyDeng 于 2013-8-22 12:01 编辑 ]

授人以渔,不授人以鱼。
2013-08-22 11:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
模板文件的使用:
1.只打印模板中出现的字段,没有的不打,满足你挑选打印的要求;
2.顺序按你的书写顺序,不用改表结构;
3.模板中的最后一行是按lnMaxCols设定的栏数逐渐向下排布,前面无论多少行,都是原样输出,故最后一行的字段数量是不限的;
4.留意你变动的标题与字段名不符,才需要在代码中用DO CASE特别处理;
5.程序发现内容为零的项目,是不会输出的,所以把所有可能输出的项目都写上去就是了。

[ 本帖最后由 TonyDeng 于 2013-8-22 12:11 编辑 ]

授人以渔,不授人以鱼。
2013-08-22 12:09
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
谢谢版主
2013-08-22 12:43
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
版主,还有个问题请教,如何设置其中个别字段的字体比其他字段的字体大些和字体的颜色,如:姓名,部门等等。
2013-08-23 08:07
快速回复:动态打印工资清单
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029898 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved