<p>今天接到一个CASE,要求做几个分类汇总,可苦了财务室的魏大侠,以前只是要求对5个片区进行汇总统计,结果今天集团办的领导些要求对各个社区进行汇总统计,六七百个社区啊,全是手动汇总不弄死个人才怪,在了解详细的需求分析后(再一次领会到需求很重要),其实只要一条SQL语句就可以完成,最关键是有些数据要进行人工处理一下后才能方便统计,比如社区名为空的,某些片区不对的,都要手工调整后才能汇总。</p><p>于是乎产生一个念头,把系统生成的XLS表格导出后,进行手工处理后,再用工具软件进行分析统计,我需要做的就是做一个分析工具软件,至于手工处理表格,就交给财务室的MM吧,也修改不到多少数据,几分钟就搞定了,关键是分析软件做好,可以节省很多时间,如果全手工的话,恐怕花两天时间整理几百个社区也有点困难哦,关键是全手工处理容易出错,呵呵。</p><p>言归正传,看看Delphi如何使用XLS数据源,首先是用ADO连接XLS,其实该SQL连接字符串也可以用于其它语言,连接代码都是一样的。</p><p></p><p>if OpenDialog1.Execute then<br />begin<br /> mydatasrc:=OpenDialog1.FileName;<br /> try<br /> con_xls.ConnectionString:=<b>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+<span style="color: #ff0000">mydatasrc</span>+';Extended Properties=Excel 8.0;Persist Security Info=False'</b>;<br /> con_xls.Connected:=True;<br /> Application.MessageBox('连接数据源成功!', '提示', MB_OK + <br /> MB_ICONQUESTION);<br /> except<br /> Application.MessageBox('连接数据源失败!', '提示', MB_OK + <br /> MB_ICONSTOP);<br /> end; <br />end;</p><p>将打开的XLS文件作为ADO连接的数据源,连接成功后就可以操作了,excle工作表中第一行会作为字段行,剩下的跟连接SQL SERVER操作一样的。</p><p>不过XLS的工作表名要加上$符号,如工作表的名字是fee,那么SQL语句就中表名就应为[fee$],一定要加上[$],不然的话会报SQL语句出错,为了这个中括号,俺找了很多,最后才发现必须加上[],最后附上多字段汇总的SQL,以及汇总统计运算。<br /><br />procedure TForm1.btn_countClick(Sender: TObject);<br />var sql:string;<br />begin<br />try<br /> if rb1.Checked then //按片区汇总<br /> sql:='select 片区,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)' +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 片区'<br /> else //按社区名汇总<br /> sql:='select 社区名,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)' +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 社区名';<br /> qry_fee.Close;<br /> qry_fee.SQL.Clear;<br /> qry_fee.SQL.Add(sql);<br /> qry_fee.Open;<br /> Sa_myDBGridAutoSize(SamoolGrid1,155,64,70,64,73,130,134,0,0,0);<br />except<br /> ShowMessage('ERR');<br />end;</p><p>end;</p> Loading... <p>今天接到一个CASE,要求做几个分类汇总,可苦了财务室的魏大侠,以前只是要求对5个片区进行汇总统计,结果今天集团办的领导些要求对各个社区进行汇总统计,六七百个社区啊,全是手动汇总不弄死个人才怪,在了解详细的需求分析后(再一次领会到需求很重要),其实只要一条SQL语句就可以完成,最关键是有些数据要进行人工处理一下后才能方便统计,比如社区名为空的,某些片区不对的,都要手工调整后才能汇总。</p><p>于是乎产生一个念头,把系统生成的XLS表格导出后,进行手工处理后,再用工具软件进行分析统计,我需要做的就是做一个分析工具软件,至于手工处理表格,就交给财务室的MM吧,也修改不到多少数据,几分钟就搞定了,关键是分析软件做好,可以节省很多时间,如果全手工的话,恐怕花两天时间整理几百个社区也有点困难哦,关键是全手工处理容易出错,呵呵。</p><p>言归正传,看看Delphi如何使用XLS数据源,首先是用ADO连接XLS,其实该SQL连接字符串也可以用于其它语言,连接代码都是一样的。</p><p></p><p>if OpenDialog1.Execute then<br />begin<br /> mydatasrc:=OpenDialog1.FileName;<br /> try<br /> con_xls.ConnectionString:=<b>'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+<span style="color: #ff0000">mydatasrc</span>+';Extended Properties=Excel 8.0;Persist Security Info=False'</b>;<br /> con_xls.Connected:=True;<br /> Application.MessageBox('连接数据源成功!', '提示', MB_OK + <br /> MB_ICONQUESTION);<br /> except<br /> Application.MessageBox('连接数据源失败!', '提示', MB_OK + <br /> MB_ICONSTOP);<br /> end; <br />end;</p><p>将打开的XLS文件作为ADO连接的数据源,连接成功后就可以操作了,excle工作表中第一行会作为字段行,剩下的跟连接SQL SERVER操作一样的。</p><p>不过XLS的工作表名要加上$符号,如工作表的名字是fee,那么SQL语句就中表名就应为[fee$],一定要加上[$],不然的话会报SQL语句出错,为了这个中括号,俺找了很多,最后才发现必须加上[],最后附上多字段汇总的SQL,以及汇总统计运算。<br /><br />procedure TForm1.btn_countClick(Sender: TObject);<br />var sql:string;<br />begin<br />try<br /> if rb1.Checked then //按片区汇总<br /> sql:='select 片区,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)' +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 片区'<br /> else //按社区名汇总<br /> sql:='select 社区名,count(main_id) as 收费户数,sum(缴费金额) as 总金额,sum(缴费周期) as 总周期,sum(优惠天数)' +' as 总天数,总金额/(总周期+总天数/30) as ARP,(总周期+总天数/30)/收费户数 as 时长 from [fee$] group by 社区名';<br /> qry_fee.Close;<br /> qry_fee.SQL.Clear;<br /> qry_fee.SQL.Add(sql);<br /> qry_fee.Open;<br /> Sa_myDBGridAutoSize(SamoolGrid1,155,64,70,64,73,130,134,0,0,0);<br />except<br /> ShowMessage('ERR');<br />end;</p><p>end;</p> 最后修改:2009 年 08 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 支持就是力量
3 条评论
excel函数和vba也挺强的
不要简单问题复杂化
猫,你好强哦