楼主: zwhaha

[精华] 将ORACLE标准的、丑陋的文本报表转换成Excel

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2009-7-13 12:40 | 只看该作者


回复Alexander:

在最初的设计的时候,是想弄一个通用的设置来删除拐弯行的,基本思路是,
1、确定某一列是每行都有数据的,并且是不拐弯的,列A。
2、在循环分列到最后一行以后,再往回做一遍循环,如果列A的数据是空的,那么把其他列的数据往上合并,然后删除该行。

在处理具体问题的时候,发现第2步往上合并也需要是有条件的,我偷懒了一下,没做成通用的。

基于目前的excel,可以通过【SETUP】设置,和修改一点VBA程序来实现,

举个例子,以下是应收帐龄表:

××××××××××××××××××××××××××××

                                                    未付                            1-15 天          16-30 天          31-60 天         61-90 天         91-120 天           121+ 天
客户                                                金额              当前             过期              过期              过期             过期              过期              过期
-------------------              ----------------------- ----------------- ----------------  ---------------- ----------------- ----------------  ----------------  ----------------
11002北京弘鹏硕食品公司                        81,982.01         78,000.00         3,982.01              0.00              0.00             0.00              0.00              0.00
CLIENT11002                                                         95.14%            4.86%             0.00%             0.00%            0.00%             0.00%             0.00%
                                   帐户客户余额:                        81,982.01
11003北京越宇世纪商贸有限                      19,190.61              0.00        19,190.61              0.00              0.00             0.00              0.00              0.00
公司                                                                 0.00%          100.00%             0.00%             0.00%            0.00%             0.00%             0.00%

CLIENT11003
××××××××××××××××××××××××××××

我们需要的结果是:
××××××××××××××××××××××××××××
客户                                                未付金额            当前           15过期            30过期            60过期           90过期            120过期           121+过期
-------------------              ----------------------- ----------------- ----------------  ---------------- ----------------- ----------------  ----------------  ----------------
11002北京弘鹏硕食品公司                        81,982.01         78,000.00         3,982.01              0.00              0.00             0.00              0.00              0.00
11003北京越宇世纪商贸有限公司                      19,190.61              0.00        19,190.61              0.00              0.00             0.00              0.00              0.00
××××××××××××××××××××××××××××


蓝色部分有了拐弯,我们要把第一列合并到上面一行,设置如下:
1、研究报表,第二列是唯一的,每行都有,并且是不拐弯的,设置【SETUP】sheet,将第二列设置成唯一标识,见附件。
2、在VBA代码的100删除拐弯行那里输入以下代码,将第一列的拐弯数据往上合并。

++++++++++++++++++++++++++++++++++++++
Do
setup_column_width_r = 2
setup_column_width_c = 5
result_c = result_column_begin

  Do
    If Worksheets("SETUP").Cells(setup_column_width_r, setup_column_width_c + 1) = "是" And Worksheets("RESULT").Cells(result_r, result_column_begin + setup_column_width_r - 2) = "" Then
   

    Worksheets("RESULT").Cells(result_r - 1, 1).Value = Worksheets("RESULT").Cells(result_r - 1, 1).Value & Worksheets("RESULT").Cells(result_r, 1).Value

这里是要根据实际情况修改的,注意红色部分,1代表是第一列进行拐弯的合并,如果你的报表有别的列需要合并,那么这里就需要复制这段代码,然后填上不同的列代码。
      
    Rows(result_r).Select
    Selection.Delete Shift:=xlUp
   
    Exit Do
    ElseIf Worksheets("SETUP").Cells(setup_column_width_r, setup_column_width_c + 1) = "是" And Len(Worksheets("RESULT").Cells(result_r, result_column_begin + setup_column_width_r - 2)) > 0 Then
    Exit Do
   
    End If
    setup_column_width_r = setup_column_width_r + 1
  Loop Until Worksheets("SETUP").Cells(setup_column_width_r, setup_column_width_c) = ""
result_r = result_r - 1
Rows(result_r).Select
Loop Until result_r = 1
+++++++++++++++++++++++++++++++++

附上有拐弯的AR帐龄分析表转换的excel表,供参考。过两天等有空了,争取把这个逻辑也弄成一个设置。

上面的字很多,见谅。



[ 本帖最后由 zwhaha 于 2009-7-13 12:49 编辑 ]

AR 帐龄 - 7 时段 - 按帐户报表 转换器 1.01.zip

49.1 KB, 下载次数: 149

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:鸡
日期:2009-06-11 10:10:17生肖徽章2007版:猴
日期:2009-06-15 08:42:07生肖徽章2007版:蛇
日期:2009-07-23 13:22:35
12#
发表于 2009-7-13 15:01 | 只看该作者
谢谢楼主,我不怎么懂VBA的代码,你是删掉了拐弯的行么?它可能是金额,Item编号,总之可能是有用的。。。 要是能把处在第二行的栏位并到第一行上就好了

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2009-7-13 15:19 | 只看该作者

回复 #12 qjwlq 的帖子

不是删除拐弯行,是我中文描述的问题,呵呵。
实际效果就是将拐弯的数据合并到上面一行,见11楼例子

使用道具 举报

回复
论坛徽章:
55
红孩儿
日期:2009-04-11 12:56:14嫦娥
日期:2009-05-13 09:18:36兰博基尼
日期:2013-08-05 11:34:06阿斯顿马丁
日期:2013-12-05 17:02:082014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
14#
发表于 2009-7-13 16:44 | 只看该作者
支持

使用道具 举报

回复
论坛徽章:
51
SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:03:45SQL极客
日期:2013-12-09 14:13:35ITPUB社区OCM联盟徽章
日期:2014-12-30 09:12:25SQL数据库编程大师
日期:2016-01-13 10:30:43SQL大赛参与纪念
日期:2016-01-13 10:32:19双子座
日期:2016-02-26 14:50:25乌索普
日期:2018-03-02 09:19:33
15#
发表于 2009-7-13 17:59 | 只看该作者
直接用FORM输出成EXECEL文件不就行了嘛

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
16#
发表于 2009-7-14 11:03 | 只看该作者

没办法下载

怎么没办法下载了

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
17#
发表于 2009-7-14 11:47 | 只看该作者

不能下载

感觉这个功能很实用,想下载研究一下,不过不能下载了,楼主能不能发到邮箱中,谢谢。172551552@qq.com

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2009-7-14 14:28 | 只看该作者

回复 #17 quanwenju 的帖子

发你邮箱了。

使用道具 举报

回复
论坛徽章:
7
生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2009-07-06 17:45:042009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:07:212011新春纪念徽章
日期:2011-02-18 11:42:47
19#
发表于 2009-7-15 11:30 | 只看该作者
收藏了~~~~~~~~

使用道具 举报

回复
论坛徽章:
0
20#
发表于 2009-7-15 20:56 | 只看该作者
看看

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表