| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5577 人关注过本帖, 1 人收藏
标题:动态打印工资清单
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用上了吗?

授人以渔,不授人以鱼。
2013-08-30 11:21
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
调了个别还有空行出现。看了你昨天的提醒,我现在想用你第一次给设计的按行生成个性工资单,我修改了一下,按列生成。但有个问题,excel2000只有256列,而工资人数最少300人,这样一张工作表就生成不了,出现错误,现在想程序能不能判断超出256列,就生成到第二张工作表,或者用“转置”的方法。老师有什么更好的办法?
CLEAR ALL
CLEAR
Main()
CLEAR ALL
RETURN

PROCEDURE Main()
    LOCAL loFileName, loExcel, lnRow, lnCol, lnIndex, lcField
   
    IF !USED("工资")
        USE prn_gz ALIAS 工资 IN 0
    ENDIF
   
    loFileName = Application.DefaultFilePath + "\工资清单\工资单s"
    IF FILE(loFileName + ".xls")
        loFileName = loFileName + ".xls"
        DELETE FILE (loFileName)
    ELSE
        IF FILE(loFileName + ".xlsx")
            loFileName = loFileName + ".xlsx"
            DELETE FILE (loFileName)
        ENDIF
    ENDIF
   
    ? "正在启动 Microsoft Excel Application,请稍候……"
    loExcel = CREATEOBJECT("Excel.Application")
     ? "正在生成工资条,请稍候……"
    WITH loExcel
        .SheetsInNewWorkbook = 1
        .Workbooks.Add
        .WorkSheets(1).Activate
        lnRow = 0
        lnCol = -2
        SELECT 工资
        SCAN ALL
             lnRow = 1
             lnCol = lnCol+3
            FOR lnIndex = 1 TO FCOUNT()   && 循环次数等于字段的数目
                lcField = FIELD(lnIndex)
                IF !EMPTY(EVALUATE(lcField))
                    .ActiveSheet.Columns(lnCol).HorizontalAlignment = 2   &&水平靠左对齐
                    .ActiveSheet.Columns(lnCol).VerticalAlignment =2      &&垂直居中对齐
                    .Cells(lnRow, lnCol).Value = lcField
                    .Cells(lnRow , lnCol+1).Value = TRANSFORM(EVALUATE(lcField))
                   lnRow =lnRow +1
                ENDIF
            NEXT
        ENDSCAN
        .ActiveSheet.Range("A:IV").Font.Name="宋体"
        .ActiveSheet.Range("A:IV").Font.Size=10
        .ActiveSheet.COLUMNS("A:IV").ENTIRECOLUMN.AUTOFIT                        
        .ActiveWorkbook.SaveAs(loFileName)
        .Quit
    ENDWITH
    RELEASE loExcel
   ? "工资清单已生成"
   
ENDPROC
2013-08-30 14:09
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
工资表只受行数限制,与列数无关

坚守VFP最后的阵地
2013-08-30 14:24
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
回复 83楼 sdta
我是按列纵向生成的
2013-08-30 15:50
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
一个人的工资条有256列吗

坚守VFP最后的阵地
2013-08-30 15:51
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
以下是引用sdta在2013-8-30 15:51:21的发言:

一个人的工资条有256列吗
工资单test.xls.zip (69.5 KB)

下载后把zip去掉
2013-08-30 15:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
帖个图吧
这样设置如何打印

[ 本帖最后由 sdta 于 2013-8-30 16:28 编辑 ]

坚守VFP最后的阵地
2013-08-30 16:25
wxdhz
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2009-12-31
收藏
得分:0 
不会贴图。就是工资项目按行排列,人员按列排列
2013-09-02 08:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
仍然出现空行的话,修改一下模板,把问题逐步排查出来。

修改表结构的办法,是输出的工资表每个人每项数据一行,即员工编号是重复的,在生成这个表的过程中,就把空数据项过滤掉了,然后把每个人的资料用普通的方法输出,仍然用你原先的工资条格式即可。这个数据表的设计才是正路。

授人以渔,不授人以鱼。
2013-09-02 12:35
baishzh
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-9-13
收藏
得分:0 
list to print for 数值字段1<>0 file 字段名1,字段名2,...
2013-09-13 15:34
快速回复:动态打印工资清单
数据加载中...
 
   



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

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