| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 331 人关注过本帖
标题:如何从“销售明细表.xls”生成“销售统计表.doc”
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:872
专家分:3
注 册:2018-1-4
结帖率:97.47%
收藏
已结贴  问题点数:20 回复次数:25 
如何从“销售明细表.xls”生成“销售统计表.doc”
现有“销售明细表.xls”,我想生成如下图所示的“销售统计表.doc”,销售统计表中的字段名由 销售明细表中的“区域”动态生成,请各位高手赐教,谢谢!
销售明细表.rar (1.88 KB)

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 统计 生成 xls 销售 doc 
4 天前 10:11
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:0 
这个问题不是和 你前面提的 由 开支明细表 动态 生成 统计表 的问题一样的嘛。

王老师你一定教过  举一反三  的成语吧,现在需要你自己反个三了!

只求每天有一丁点儿的进步就可以了
4 天前 10:45
王咸美
Rank: 1
等 级:新手上路
帖 子:872
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢指点!原来都是dbf表文件,现在原始表为excel文件,结果表为word文件。,
4 天前 12:16
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

提供一个EXCEL的解决方法,供参考!

只求每天有一丁点儿的进步就可以了
4 天前 13:43
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:0 
Sub 销售统计()
    ' 问题来源:https://bbs.bc-cn.net/thread-514582-1-1.html
    '
    ' 时间:2025-11-17
    Sheet2.Select
    Cells.Select
    Selection.ClearContents
    Sheet2.Cells(1, 1).Value = "产品"
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_qy = Sheet1.Cells(x1, 3).Value
      y2 = 1
      Do While Not (IsEmpty(Sheet2.Cells(1, y2).Value))
        If Sheet2.Cells(1, y2).Value = c_qy Then
          GoTo kk
        End If
        y2 = y2 + 1
      Loop
      Sheet2.Cells(1, y2).Value = c_qy
kk:   x1 = x1 + 1
    Loop
    '******
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_pm = Sheet1.Cells(x1, 2).Value
      x2 = 2
      Do While Not (IsEmpty(Sheet2.Cells(x2, 1).Value))
        If Sheet2.Cells(x2, 1).Value = c_pm Then
          GoTo kkk
        End If
        x2 = x2 + 1
      Loop
      Sheet2.Cells(x2, 1).Value = c_pm
kkk:   x1 = x1 + 1
    Loop
    '******
    x1 = 2
    Do While Not (IsEmpty(Sheet1.Cells(x1, 3).Value))
      c_pm = Sheet1.Cells(x1, 2).Value
      c_qy = Sheet1.Cells(x1, 3).Value
      n_je = Sheet1.Cells(x1, 5).Value
      x2 = 2
      Do While Not (IsEmpty(Sheet2.Cells(x2, 1).Value))
        If Sheet2.Cells(x2, 1).Value = c_pm Then
          y = 2
          Do While Not (IsEmpty(Sheet2.Cells(1, y).Value))
            If Sheet2.Cells(1, y).Value = c_qy Then
              y2 = y
            End If
            y = y + 1
          Loop
          Sheet2.Cells(x2, y2).Value = n_je + Sheet2.Cells(x2, y2).Value
         
        End If
        x2 = x2 + 1
      Loop
      x1 = x1 + 1
    Loop
End Sub

供复制粘贴用

只求每天有一丁点儿的进步就可以了
4 天前 13:44
王咸美
Rank: 1
等 级:新手上路
帖 子:872
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!如果用vfp代码如何写?盼指点。
4 天前 13:56
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10893
专家分:43494
注 册:2014-5-20
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
defPath = ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (defPath)
xls = defPath + "销售明细表.xls"
oe = CREATEOBJECT("Excel.Application")
oe.DisplayAlerts = 0
oe.WorkBooks.Open(xls)
as = oe.ActiveSheet
rs = oe.CountA(as.Range("A:A")) - 1
cs = oe.CountA(as.Range("1:1")) - 1
ar = as.Cells(2,2).Resize(rs,cs).Value
oe.WorkBooks.Close
oe.Quit 
CREATE CURSOR tt (产品 C(20), 区域 C(20), 数量 N(4), 金额 N(10,2))
INSERT INTO tt FROM ARRAY ar
SELECT * FROM tt
CLOSE TABLES ALL 
CLEAR ALL
RETURN


再参考之前的“开支明细”转一转就OK
4 天前 14:57
王咸美
Rank: 1
等 级:新手上路
帖 子:872
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!
4 天前 15:49
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:386
专家分:892
注 册:2014-6-12
收藏
得分:5 
以下是引用王咸美在2025-11-17 10:11:08的发言:
现有“销售明细表.xls”,我想生成如下图所示的“销售统计表.doc”,销售统计表中的字段名由 销售明细表中的“区域”动态生成,请各位高手赐教,谢谢!


这种表叫做“交叉表”,你可以试试:

https://bbs.bc-cn.net/viewthread.php?tid=514525&page=1#pid2794178

调用方法:

USE mytable
jcbqh(ALIAS(),1,3,4,.T.) && 或者jcbqh('mytable',1,3,4)

参数1:为打开表的alias(),也就是别名,当前在哪个工作区无所谓,指定别名即可。
参数2:为字符字段,也就是竖轴的field(),指当前mytable中的第几个字段。
参数3:为字符字段,也就是横轴的field(),指当前mytable中的第几个字段。
参数4:为数值型或货币型字段,也就是交叉数值区的field(),指当前mytable中的第几个字段。
参数5:为逻辑型,.T. OR .F.,.T.为行列求和。.F.为不求和。

传入参数,自动转换成你想要表,就是X轴Y轴转换

[此贴子已经被作者于2025-11-17 19:22编辑过]

4 天前 19:18
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:5 
对销售明细表的转换统计,再转换到WORD的代码请王老师补充,好让我学会一些!

       ***************
       * 作用:将EXCEL的销售表内容读入DBF表中再统计
       * 来源:https://bbs.bc-cn.net/thread-514582-1-1.html
       * 时间:2025-11-18      
       ***************
       SET SAFETY off
       SET engi 70
       CLOSE DATABASES
       defPath = ADDBS(JUSTPATH(SYS(16)))  
       SET DEFAULT TO (defPath)
       wjm = defPath + "销售明细表.xls"
       oe = CREATEOBJECT("Excel.Application")
       oe.DisplayAlerts = 0  
       oe.WorkBooks.Open(wjm)
       as = oe.ActiveSheet
       rs = oe.CountA(as.Range("A:A")) - 1  
       cs = oe.CountA(as.Range("1:1"))   
       ar = as.Cells(2,1).Resize(rs,cs).Value  
       oe.WorkBooks.Close  
       oe.Quit   
       CREATE table xs (型号 c(10),产品 C(20), 区域 C(20), 数量 N(4), 金额 N(10,2))
       INSERT INTO xs FROM ARRAY ar  
       *--以上引用吹版的代码
       zfc=[产品,]
       SELECT xs
       SCAN
         qy=ALLTRIM(区域)
         IF !qy$zfc
             zfc=zfc+[00000.00 as ]+qy+[,]  
         ENDIF
         SELECT xs
       ENDSCAN                                   
       c_zdm=zfc+[00000.00 as 合计]
       SELECT &c_zdm. from xs grou by 产品 into table 统计表
       SELECT 统计表
       USE 统计表 alia bmk
       SELECT xs
       GO top
       SCAN
         zd=[bmk.]+ALLTRIM(xs.区域)
         pm=xs.产品
         SELECT bmk
         LOCATE for bmk.产品=pm
         IF FOUND()
           REPLACE &zd. with xs.金额 + EVALUATE(zd)
         ENDIF
         SELECT xs
       ENDSCAN
       SELECT bmk
       GO top
       SCAN
         sn=0
         FOR i=2 to FCOUNT()-1
           sn=sn+EVALUATE(FIELD(i))
         ENDFOR
         REPLACE 合计 with sn   
         SELECT bmk
       ENDSCAN         
       *---
       * 此处请王老师添加 别名(bmk)表的内容 转到 WORD 的代码(我不会)
       *---
       CLOSE DATABASES
       QUIT

只求每天有一丁点儿的进步就可以了
3 天前 10:44
快速回复:如何从“销售明细表.xls”生成“销售统计表.doc”
数据加载中...
 
   



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

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