标题:如何实现一下按条件分工作薄
只看楼主
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
结帖率:95%
已结贴  问题点数:100 回复次数:38 
如何实现一下按条件分工作薄
在工作中有这样的总表想进行一下分工作薄数据有点多,能不能用VFP来进行处理,谢谢
主表分表.rar (119.93 KB)
搜索更多相关主题的帖子: 条件 VFP 工作 处理 数据 
2022-01-03 19:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:14 
作战地图看不明,给个战果图看看
或者将主表先导出到DBF处理好后再放到EXCEL模板
2022-01-03 20:56
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
得分:0 
表达不清晰呀,哈哈。难为大家了。上面的表是导出来的表,想通过程序按工单号生成模板文件。转换到下面的模板文件中对应颜色的字段,按编号对数量进行汇总
2022-01-03 21:04
wcx_cc
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:352
专家分:1152
注 册:2015-10-2
得分:14 
这个实现的话不是难事吧.按吹佬所说,先将主表原样变成一个 dbf表(可采用导入法放入1个 dbf ),将这个dbf用 select * from 方法,按照想要的条件
生成汇总表(dbf),如果一步达不到可以多做一步,这个汇总表的结构要等同于那个汇总模板.最后将dbf汇总表生成电子表格.
 
2022-01-03 22:04
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
得分:0 
LOCAL fsheet,fname,oExcel,fname1
cDefPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cDefPath)
sys(3099,70)
SET SAFETY OFF

xlsFile = cDefPath + "维修发料统计.xls"
WITH CREATEOBJECT("Excel.Application")
    .DisplayAlerts = 0
    .WorkBooks.Open(xlsFile)
    nRow = .CountA(.Range("A:A")) - 2
    nCol = .CountA(.Range("4:4"))
    arr  = .Cells(5,1).Resize(nRow,nCol).Value
    .WorkBooks.Close
    .Quit
ENDWITH

CREATE CURSOR tt (序号 I,经销商简称 C(10),工单号 c(12),零部件代码 C(18),零部件名称 C(30),仓库代码 C(10),库位代码 C(12),零部件数量 N(6,2),销售单价 N(6,2),;
零部件销售金额 N(6,2),零部件成本金额 N(6,2),车牌号 C(10),车系 C(10),领料人 C(10),维修类型 C(10))
INSERT INTO tt FROM ARRAY arr

SELECT * FROM tt INTO cursor 细 READWRITE

SELECT 细
REPLACE 仓库代码 WITH Iif("TW-" $ 零部件代码, '配件仓库B', '配件仓库A') ALL
REPLACE 工单号 WITH righ(工单号,10) all

SELECT  序号 ,工单号,零部件代码,零部件名称,销售单价,SUM(零部件数量) as  数量,领料人,仓库代码,车牌号,维修类型 ;
FROM 细  GROUP BY 零部件代码 INTO cursor 明细1
BROWSE

select * from 明细1 where 数量 > 0 INTO cursor 明细

brow

SET DEFAULT TO d:\xls
   
lc_filename=cDefPath+'模版.xls'
IF !FILE(lc_filename)
    MESSAGEBOX('不存在模版文件')
    RETURN
ENDIF

SELECT DISTINCT 工单号 FROM 明细 INTO CURSOR RKD
    eole=createobject("excel.application")  
   
    eole.workbooks.open(lc_filename,.F.,.F.)
m=20
SELECT RKD
SCAN
    FOR q=2 TO m&&保证清空前面工单的记录
        eole.cells(q,1).value=''
        eole.cells(q,2).value=''
        eole.cells(q,3).value=''
        eole.cells(q,4).value=''
        eole.cells(q,5).value=''
        eole.cells(q,6).value=''
        eole.cells(q,7).value=''
        eole.cells(q,8).value=''
        eole.cells(q,9).value=''
        eole.cells(q,10).value=''
        eole.cells(q,11).value=''
        eole.cells(q,12).value=''
        eole.cells(q,13).value=''
        eole.cells(q,14).value=''
    ENDFOR
    SELECT 序号 as 行,车牌号 as T,零部件代码 AS 项目,零部件名称 as 说明,序号 AS 套餐,序号 AS W,数量,;
    销售单价 as 含税单价,领料人 as 折扣,序号 as 总计,维修类型  as V,序号 as P,工单号 AS I,仓库代码 as 仓库名称 ;
    FROM 明细 ;
   WHERE 工单号=RKD.工单号 ORDER BY I ;
   INTO CURSOR TEMP
    z='d:\xls\'+ALLTRIM(temp.I)+ALLTRIM(temp.T)+(temp.V)+ALLTRIM(temp.折扣)+'.xls'
    IF FILE(z)
        DELETE FILE (z)
    ENDIF

**    copy to (z)  type xl5
    SELECT temp
    m=1
    SCAN
        m=m+1
        eole.cells(m,1).value=行
        eole.cells(m,2).value=T
        eole.cells(m,3).value=项目
        eole.cells(m,4).value=说明
        eole.cells(m,5).value=套餐
        eole.cells(m,6).value=W
        eole.cells(m,7).value=数量
        eole.cells(m,8).value=含税单价
        eole.cells(m,9).value=折扣
        eole.cells(m,10).value=总计
        eole.cells(m,11).value=V
        eole.cells(m,12).value=P
        eole.cells(m,13).value=I
        eole.cells(m,14).value=仓库名称
    ENDSCAN
    eole.ActiveWorkbook.Saved=.t.
    eole.ActiveWorkbook.SaveAs(z)

    SELECT RKD
ENDSCAN
    eole.quit
    RELEASE eole
        
MESSAGEBOX('处理完成)
以上代码是拼的实现的有点乱,不能处理按编码对数量进行汇总


[此贴子已经被作者于2022-1-4 02:51编辑过]

2022-01-04 02:40
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:14 
把主表导入dbf,按要求加工成最终结果,然后按工单号导出EXCEL
“按编号对数量汇总”,这个编号不知道是工单号还是代码
VFP对数据处理是强项,对表格加工不方便,建议先加工成需要的数据,然后导出表格
2022-01-04 08:32
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
得分:0 
是说以工单号进行分工作薄,每个工作薄中再按编号进行对数量的汇总,大于0的要,否则就不要了。谢谢
2022-01-04 10:08
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
outfile = sys(2015)
SELECT 工单号,维修类型,领料人,代码 项目,零部件名称 说明,SUM(零部件数量) 数量,销售单价 含税单价,仓库代码 仓库名称 FROM 总表 GROUP BY 工单号,维修类型,领料人,代码,零部件名称,销售单价,仓库代码 HAVING SUM(零部件数量)>0 INTO CURSOR outfile READWRITE

之后对outfile按:工单号+维修类型+领料人  分别导出EXCEL表
2022-01-04 11:59
ls_y041
Rank: 2
等 级:论坛游民
威 望:1
帖 子:157
专家分:35
注 册:2005-9-29
得分:0 
2022-01-04 13:12
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:14 
这个功能在EXCEL中的宏(VBA)就能实现。只是看楼主的描述...

用VFP解决
1、主表要转为DBF表AA
2、生成单号库的DBF表BB
3、做好一个模板表对应的DBF表CC
4、依BB循环,依次从AA提取数据到CC,再CC转为EXCEL     就成功了

只求每天有一丁点儿的进步就可以了
2022-01-04 13:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508065-1-1.html




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

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