| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3975 人关注过本帖
标题:如何实现一下按条件分工作薄
取消只看楼主 加入收藏
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
结帖率:95.24%
收藏
已结贴  问题点数:100 回复次数:20 
如何实现一下按条件分工作薄
在工作中有这样的总表想进行一下分工作薄数据有点多,能不能用VFP来进行处理,谢谢
主表分表.rar (119.93 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 条件 VFP 工作 处理 数据 
2022-01-03 19:44
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
表达不清晰呀,哈哈。难为大家了。上面的表是导出来的表,想通过程序按工单号生成模板文件。转换到下面的模板文件中对应颜色的字段,按编号对数量进行汇总
2022-01-03 21:04
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册: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
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
是说以工单号进行分工作薄,每个工作薄中再按编号进行对数量的汇总,大于0的要,否则就不要了。谢谢
2022-01-04 10:08
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2022-01-04 13:12
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
能不能写一下代码,别人写的代码我也是乱了不知道如何调整一下,谢谢。
2022-01-04 17:11
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 

           在实际工作中,有时候需要根据设定的列表对一个工作表中的数据进行拆分,或者拆分为多个工作表,或者拆分为多个工作簿文件,本工具特为这个需求而写,Sub 拆分之四()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim d As Object
Dim ar As Variant, br As Variant
Dim arr()
Set d = CreateObject("scripting.dictionary")
w = InputBox("请输入数据源表中列标题行数", , "1")
If w = "" Then MsgBox "您没有输入数据源表中列标题行数": Exit Sub
x = InputBox("请输入数据源表中拆分依据列的列号", , "8")
If x = "" Then MsgBox "您没有输入数据源表中拆分依据列的列号": Exit Sub
p = MsgBox("拆分为工作表请选择是,拆分为工作簿请选择否", vbYesNoCancel)
If p = vbCancel Then Exit Sub
If p = vbYes Then
    For Each sh In Sheets
        If sh.Name <> "数据源" And sh.Name <> "拆分列表" Then
            sh.Delete
        End If
    Next sh
End If
ar = Sheets("拆分列表").[a1].CurrentRegion
With Sheets("数据源")
    r = .Cells(Rows.Count, 8).End(xlUp).Row
    y = .Cells(1, Columns.Count).End(xlToLeft).Column
    br = .Range(.Cells(1, 1), .Cells(r, y))
End With
Set Rng = ThisWorkbook.Worksheets("数据源").Rows(1)
For j = 1 To UBound(ar, 2)
    If Trim(br(1, j)) <> "" Then
        n = 0
        ReDim arr(1 To UBound(br), 1 To UBound(br, 2))
        d.RemoveAll
        For i = 2 To UBound(ar)
            If Trim(ar(i, j)) <> "" Then
                d(Trim(ar(i, j))) = ""
            End If
        Next i
        For i = Val(w) + 1 To UBound(br)
            If Trim(br(i, Val(x))) <> "" Then
                mc = Trim(br(i, Val(x)))
                If d.Exists(Trim(mc)) Then
                    n = n + 1
                    For jj = 1 To UBound(br, 2)
                        arr(n, jj) = br(i, jj)
                    Next jj
                End If
            End If
        Next i
        If n <> 0 Then
            If p = vbYes Then
                Set sht = Sheets.Add(after:=Sheets(Sheets.Count))
                With sht
                    .Name = ar(1, j)
                    .[a1].CurrentRegion = Empty
                    Rng.Copy .[a1]
                    .Cells(w + 1, 1).Resize(n, UBound(arr, 2)) = arr
                End With
            ElseIf p = vbNo Then
                Set wb = Workbooks.Add
                With wb.Worksheets(1)
                    .Name = ar(1, j)
                    Rng.Copy .[a1]
                    .Cells(w + 1, 1).Resize(n, UBound(arr, 2)) = arr
                End With
                wb.SaveAs Filename:=ThisWorkbook.Path & "\" & ar(1, j)
                wb.Close
            End If
        End If
    End If
Next j
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub
2022-01-04 17:18
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
有代码也不行看不明白
2022-01-04 17:49
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 

Sub 拆分()
Application.ScreenUpdating = False
Dim ar As Variant
Dim i As Long, r As Long, rs As Long
Dim br(), brr()
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
With Sheets("数据集合")
    rs = .Cells(Rows.Count, 26).End(xlUp).Row
    If rs < 3 Then MsgBox "数据集合为空!": End
    ar = .Range("a1:z" & rs)
End With
For Each sh In Sheets
    dc(sh.Name) = ""
Next sh
For i = 3 To UBound(ar)
    If Trim(ar(i, 26)) <> "" Then
        d(Trim(ar(i, 26))) = ""
    End If
Next i
For Each k In d.keys
    n = 0
    ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
    For i = 3 To UBound(ar)
        If Trim(ar(i, 26)) = k Then
            n = n + 1
            For j = 2 To UBound(ar, 2)
                br(n, j - 1) = ar(i, j)
            Next j
        End If
    Next i
    If dc.exists(k) Then
        With Sheets(k)
            r = .Cells(Rows.Count, 25).End(xlUp).Row
            .Range("a3:ab" & r) = Empty
            .[a3].Resize(n, UBound(br, 2)) = br
        End With
    End If
Next k
Application.ScreenUpdating = True
MsgBox "数据拆分完毕!", 64, "提示"
End Sub
2022-01-04 20:12
ls_y041
Rank: 2
等 级:论坛游民
威 望:2
帖 子:173
专家分:56
注 册:2005-9-29
收藏
得分:0 
期待吹版主吧
2022-01-04 20:49
快速回复:如何实现一下按条件分工作薄
数据加载中...
 
   



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

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