花了一天时间帮财务朋友开发了一个实用小工具
大家好,我是晓凡。
写在前面
不知道大家有没有做财务的朋友,我就有这么一位朋友就经常跟我抱怨。一到月底简直就是噩梦,总有加不完的班,熬不完的夜,做不完的报表。
一听到这儿,这不就一活生生的一个“大表哥”么,这加班跟我们程序员有得一拼了,忍不住邪恶一笑,心里平衡了很多。
身为牛马,大家都不容易啊。我不羡慕你数钱数到手抽筋,你也别羡慕我整天写CRUD 写到手起老茧🤣
吐槽归吐槽,饭还得吃,工作还得继续干。于是乎,真好赶上周末,花了一天的时间,帮朋友写了个小工具
一、功能需求
跟朋友吹了半天牛,终于把需求确定下来了。就一个很简单的功能,通过名字,将表一和表二中相同名字的金额合计。
具体数据整合如下图所示
虽然一个非常简单的功能,但如果不借助工具,数据太多,人工来核对,整合数据,还是需要非常消耗时间和体力的。
怪不得,这朋友到月底就消失了,原来时间都耗在这上面了。
二、技术选型
由于需求比较简单,只有excel导入导出,数据整合功能。不涉及数据库相关操作。
综合考虑之后选择了
PowerBuilder
Pbidea.dll
使用PowerBuilder
开发桌面应用,虽然界面丑一点,但是开发效率挺高,简单拖拖拽拽就能完成界面(对于前端技术不熟的小伙伴很友好)
其次,由于不需要数据库,放弃web开发应用,又省去了云服务器费用。最终只需要打包成exe
文件即可跑起来
Pbidea.dll
算是Powerbuilder
最强辅助开发,没有之一。算是PBer们的福音吧
三、简单界面布局
四、核心代码
① 导入excel
string ls_pathName,ls_FileName //路径+文件名,文件名 long ll_Net long rows dw_1.reset() uo_datawindowex dw dw = create uo_datawindowex dw_1.setredraw(false) ll_Net = GetFileSaveName("请选择文件",ls_pathName,ls_FileName,"xlsx","Excel文(*.xlsx),*.xlsx") rows = dw.ImportExcelSheet(dw_1,ls_pathName,1,0,0) destroy dw dw_1.setredraw(true) MessageBox("提示信息","导入成功 " + string(rows) + "行数据")
② 数据整合
long ll_row,ll_sum1,ll_sum2 long ll_i,ll_j long ll_yes string ls_err //重置表三数据 dw_3.reset() //处理表一数据 ll_sum1 = dw_1.rowcount( ) if ll_sum1<=0 then ls_err = "表1 未导入数据,请先导入数据" goto err end if for ll_i=1 to ll_sum1 ll_row = dw_3.insertrow(0) dw_3.object.num[ll_row] =ll_row //序号 dw_3.object.name[ll_row]=dw_1.object.name[ll_i] //姓名 dw_3.object.salary[ll_row]=dw_1.object.salary[ll_i] //工资 dw_3.object.endowment[ll_row]=dw_1.object.endowment[ll_i] //养老 dw_3.object.medical[ll_row]=dw_1.object.medical[ll_i] //医疗 dw_3.object.injury[ll_row]=dw_1.object.injury[ll_i] //工伤 dw_3.object.unemployment[ll_row]=dw_1.object.unemployment[ll_i] //失业 dw_3.object.publicacc[ll_row]=dw_1.object.publicacc[ll_i] //公积金 dw_3.object.annuity[ll_row]=dw_1.object.annuity[ll_i] //年金 next //处理表二数据 ll_sum2 = dw_2.rowcount( ) if ll_sum2<=0 then ls_err = "表2未导入数据,请先导入数据" goto err end if for ll_j =1 to ll_sum2 string ls_name ls_name = dw_2.object.name[ll_j] ll_yes = dw_3.Find("name = '"+ ls_name +"' ",1,dw_3.rowcount()) if ll_yes<0 then ls_err = "查找失败!"+SQLCA.SQLErrText goto err end if if ll_yes = 0 then //没有找到 ll_row = dw_3.InsertRow (0) dw_3.ScrollToRow(ll_row) dw_3.object.num[ll_row] = ll_row //序号 dw_3.object.name[ll_row] = dw_1.object.name[ll_j] //姓名 dw_3.object.salary[ll_row] = dw_1.object.salary[ll_j] //工资 dw_3.object.endowment[ll_row] = dw_1.object.endowment[ll_j] //养老 dw_3.object.medical[ll_row] = dw_1.object.medical[ll_j] //医疗 dw_3.object.injury[ll_row] = dw_1.object.injury[ll_j] //工伤 dw_3.object.unemployment[ll_row] = dw_1.object.unemployment[ll_j] //失业 dw_3.object.publicacc[ll_row] = dw_1.object.publicacc[ll_j] //公积金 dw_3.object.annuity[ll_row] = dw_1.object.annuity[ll_j] //年金 end if if ll_yes >0 then //找到 dec{2} ld_salary,ld_endowment,ld_medical,ld_injury,ld_unemployment,ld_publicacc,ld_annuity ld_salary = dw_3.object.salary[ll_yes] + dw_2.object.salary[ll_j] ld_endowment = dw_3.object.endowment[ll_yes] + dw_2.object.endowment[ll_j] ld_medical = dw_3.object.medical[ll_yes] + dw_2.object.medical[ll_j] ld_injury = dw_3.object.injury[ll_yes] + dw_2.object.injury[ll_j] ld_unemployment = dw_3.object.unemployment[ll_yes] + dw_2.object.unemployment[ll_j] ld_publicacc = dw_3.object.publicacc[ll_yes] + dw_2.object.publicacc[ll_j] ld_annuity = dw_3.object.annuity[ll_yes] + dw_2.object.annuity[ll_j] dw_3.object.salary[ll_yes]= ld_salary //工资 dw_3.object.endowment[ll_yes]=ld_endowment //养老 dw_3.object.medical[ll_yes]=ld_medical //医疗 dw_3.object.injury[ll_yes]=ld_injury //工伤 dw_3.object.unemployment[ll_yes]=ld_unemployment //失业 dw_3.object.publicacc[ll_yes]=ld_publicacc //公积金 dw_3.object.annuity[ll_yes]=ld_publicacc //年金 end if next return 0 err: messagebox('错误信息',ls_err)
③ excel导出
string ls_err string ls_pathName,ls_FileName //路径+文件名,文件名 long ll_Net if dw_3.rowcount() = 0 then ls_err = "整合数据为空,不能导出" goto err end if uo_wait_box luo_waitbox luo_waitbox = create uo_wait_box luo_waitBox.OpenWait(64,RGB(220,220,220),RGB(20,20,20),TRUE,"正在导出 ", 8,rand(6) - 1) long rows CreateDirectory("tmp") uo_datawindowex dw dw = create uo_datawindowex ll_Net = GetFileSaveName("选择路径",ls_pathName,ls_FileName,"xlsx","Excel文(*.xlsx),*.xlsx") rows = dw.ExportExcelSheet(dw_3,ls_pathName,true,true) destroy dw destroy luo_waitbox MessageBox("提示信息","成功导出 " + string(rows) + " 行数据") return 0 err: messagebox('错误信息',ls_err)
五、最终效果
这次分享就到这吧,★,°:.☆( ̄▽ ̄)/$:.°★ 。希望对您有所帮助,也希望多来几个这样的朋友,不多说了, 蹭饭去了
我们下期再见ヾ(•ω•`)o (●'◡'●)
本文来自博客园,作者:程序员晓凡,转载请注明原文链接:https://www.cnblogs.com/xiezhr/p/18366585
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· autohue.js:让你的图片和背景融为一体,绝了!
2023-08-19 给你安利一款带有AI功能的数据库管理工具