想做这么一个东西想了很久了,之前考虑过c++,没有很合适的库,大部分库都处理不了合并单元格,写起来也很麻烦;后来考虑过python,且不说提供的库也不能处理合并单元格,看到各种编码就头大了,在用户机器上再装python也比较麻烦,后来一直就搁置了。
直到今年,我们有了wps的正版授权,并且有了技术支持,问技术支持要了一下api,发现例子都是vb的,调试直接用自带的vb编辑器也很方便,更难得的是,vbs在windows下用起来这么方便我怎么就没想到呢,马上开搞。
有了合适的工具就会发现,搞起来还是很简单的,虽然平时事不少,vb以前也没碰过,不过抽空边查边搞,一个多星期就ok了,贴在这,有需要的可以拿回去参考
<span style="font-family: Arial, Helvetica, sans-serif;">dlist = array("营管部","青岛","淄博","枣庄","东营","烟台","潍坊","济宁","泰安","威海","日照","莱芜","临沂","德州","聊城","滨州","菏泽")</span>
strrow = cint(inputbox("请输入数据开始的行数(默认为3)","启动",3))
wrkrow = strrow
Set ws=WScript.CreateObject("wscript.shell")
w=ws.CurrentDirectory
Set fso=WScript.CreateObject("scripting.filesystemobject")
Set fs=fso.GetFolder(w)
Set f=fs.Files
Set ElApp=CreateObject("excel.application")
set el0=ElApp.workbooks.add
inited=0
for each ds in dlist
t=t & ds &":" & vbcrlf
flag=0
For Each fl In f
if ((instr(fl.name,ds)>0)and (fso.getextensionname(fl)="xls" or fso.getextensionname(fl)="et")) then
call found()
flag=1
end if
Next
if flag = 0 then
call notice(ds&"文件未找到!")
end if
next
ElApp.Visible=true
el0.SaveAs(fs.path&"\汇总.xls")
sub found()
set el1=ElApp.workbooks.open(fl.path)
height=el1.worksheets(1).UsedRange.Rows.Count
width=el1.worksheets(1).UsedRange.Columns.Count
if height<strrow then
call notice("请检查“"&fl.name&"”文件内容")
else
if (inited=0)and(strrow>1) then
el1.worksheets(1).range(el1.worksheets(1).cells(1,1),el1.worksheets(1).cells(strrow-1,width)).copy(el0.worksheets(1).cells(1,1))
inited=1
end if
el1.worksheets(1).range(el1.worksheets(1).cells(strrow,1),el1.worksheets(1).cells(height,width)).copy(el0.worksheets(1).cells(wrkrow,1))
wrkrow=wrkrow+height-strrow+1
end if
el1.close
end sub
sub notice(content)
with el0.worksheets(1).cells.item(wrkrow,1)
.formula= content
.font.color=255
end with
wrkrow=wrkrow+1
end sub
-----------------------------------------保存为“随便.vbs”放到需要汇总的文件夹里双击就ok了--------------------------------------------------------------
第一行可以根据需要汇总的内容自己改改,改成只有一个点的话就可以汇总文件夹下所有文件了