用批处理做。注意是删除字符窜,不是文件哦。(比如“粤B000H6”)
删除当前文件夹所有文本文档的每一行的前n个字符串。
另外,能不能删除每行特定的列的呢(比如“2011/04/18 00:07:53”)?
最好是写批处理,或者就vb代码也行。
文本内容如下:
粤B000H6,2011/04/18 00:07:53,114.118347,22.574850,0,0,0,
粤B000H6,2011/04/18 00:08:01,114.118347,22.574850,0,0,0,
粤B000H6,2011/04/18 00:08:03,114.118347,22.574850,0,2,0,
粤B000H6,2011/04/18 00:08:33,114.118301,22.574301,0,25,4,
粤B000H6,2011/04/18 00:08:39,114.118286,22.573967,0,22,3,
粤B000H6,2011/04/18 00:09:03,114.119698,22.573833,0,28,1,
粤B000H6,2011/04/18 00:09:33,114.121696,22.573650,0,25,3,
粤B000H6,2011/04/18 00:10:03,114.122498,22.571751,0,31,1,
粤B000H6,2011/04/18 00:10:09,114.123032,22.571867,0,35,1,
'先引用excel *.0 object library
Public ex As Excel.Application
Public wb As Excel.Workbook
Public sh As Excel.Worksheet
Private Sub Command3_Click()
Dim i As Long, A As Long
Dim arr() As String, str As String, Count As Long
Dim Result As String
Set ex = CreateObject("Excel.Application")
'Set wb = ex.Workbooks.Add '新建excel
Set wb = ex.Workbooks.Open("c:\file.csv") ' 你的A文件 ?????此处如何实现 变量 控制文件名???????????
Set sh = wb.Sheets(1) '第一个工作表
sh.Columns("C:C").Select '第三列
ex.Selection.Delete Shift:=xlToLeft
wb.Close SaveChanges:=True '直接关闭
ex.Quit
MsgBox "删除完毕"
'ex.Visible = True
Set ex = Nothing
Set wb = Nothing
Set sh = Nothing
End Sub
我试了试这个可行。但是有个有个问题,我的数据有13798个文档,每个文档大概1兆,这个批处理的速度太慢了,处理一个文件就要好几分钟啊。所以能不能用别的方法呢。这里有两个vb的代码引用excel的方法我试了试,缺点是不能实现批量处理,它引用文件路径的代码中不能用变量(我想把文件名批量改为递增的数字,然后用循环变量控制处理文件的文件名,使用变量是个问题。)代码我放在问题补充里了,你看看能不能改进啊?
追答哦,不会vb,(且没装excel)还是看楼下的吧。
不行啊,这个速度还是不太理想,提速不是很多,主要还是因为我的文件太多,记录太多了,得选用能整列处理的算法,不能逐条记录修改呀!
追答那就用下面的VBS来做吧,把这个VBS放到CSV文件夹下, 也可以更改getfolder 目录。
不过你这么多数据,怎么不用SQL来做呢?
Set FSO = CreateObject("Scripting.FileSystemObject")
set FF=FSO.getfolder(".") '当前文件夹
set FC=FF.files
dim objXl,objWork,sh
Set objXl=CreateObject("Excel.Application")
objXl.DisplayAlerts=FALSE
objXl.visible=FALSE
for each fl in FC
ext=Lcase(fso.GetExtensionName(fl))
if ext="csv" then
Set objWork=objXl.Workbooks.Open(fl,3,False)
Set sh = objWork.Sheets(1)
sh.Columns(3).Delete '删除第3行
objXl.Workbooks(1).Save
objWork.Close
end if
Next
objxl.quit
Set objXl=Nothing
Set objWork=Nothing
set sh=Nothing
set FC=nothing
set FF=nothing
Set FSO=nothing
哇塞,这个很给力哦!
那继续问你个问题好么?
我能不能判断一下某列的值是否完全一样(比如提问中倒数第三列全是0)?如果此文件的某列中所有值都为一个值(比如0),就将此文本给删除了,或者移动到其他文件夹中呢?
EXCEL宏其实我也不太清楚,上面查了部分excel函数资料。
你懂得VBA的话,方法应该差不多的吧,比如计算得到某列sum值>0就可以了。
我建议你还是用数据库来分析数据吧,哪怕是office的那个什么数据库。
更新,修改的方便。