Board logo

标题: [问题求助] VBS实现将多个xls文件批量转换成unicode文本 [打印本页]

作者: hacker85    时间: 2012-12-12 09:25     标题: VBS实现将多个xls文件批量转换成unicode文本

RT!

对于一个有多个xls文件的文件夹,如果通过一个VBS脚本实现对每个xls文件进行“另存为unicode文本”的操作??

注:只对工作薄中的sheet1工作表进行操作即可。
作者: czjt1234    时间: 2012-12-13 10:29

本帖最后由 czjt1234 于 2012-12-13 10:40 编辑

转换当前目录下所有.xls
"1.xls"  转换为 "Unicode 1.xls"
就是不清楚原来是什么格式
  1. strPath = CreateObject("Wscript.Shell").CurrentDirectory
  2. Set objFSO = CreateObject("Scripting.FileSystemObject")
  3. Set objFolder = objFSO.GetFolder(strPath)
  4. set objFiles = objFolder.Files
  5. for Each objFile In objFiles
  6.     If LCase(Right(objFile.Name, 3)) = "xls" Then
  7.         With CreateObject("Adodb.Stream")
  8.             .Charset = "utf-8"    '原来是什么格式?
  9.             .Type = 2
  10.             .Mode = 3
  11.             .Open
  12.             .LoadFromFile objFile.Name
  13.             strRead = .ReadText
  14.             .Close
  15.         End With
  16.         With CreateObject("Adodb.Stream")
  17.             .Charset = "Unicode"
  18.             .Type = 2
  19.             .Mode = 3
  20.             .Open
  21.             .WriteText strRead
  22.             .SaveToFile "Unicode " & objFile.Name, 2
  23.             .Close
  24.         End With
  25.         Msgbox objFile.Name & " 转换完毕。"
  26.     End If
  27. Next
复制代码

作者: czjt1234    时间: 2012-12-13 10:44

哦,不对,不能直接读取.xls文件

要读取里面的工作表的内容

excel对象还没学习过,帮不了你
作者: hacker85    时间: 2012-12-13 13:53

回复 2# czjt1234


    1、不需要管xls文件是什么格式,只需要将其转换成unicode文本文件就可以了,因为我们实现的是“另存”功能。

   2、这些xls文件分散在不同的多级目录下,那么对于多级目录来说,又如何更改vbs的代码呢?
作者: hacker85    时间: 2012-12-13 13:54

回复 3# czjt1234


    呵,你已经尽力了,3Q
作者: czjt1234    时间: 2012-12-14 09:22

不能直接读取.xls文件

不是文本流的数据
作者: zz100001    时间: 2012-12-14 18:05

这两天刚好移植一个项目要处理所有文件内容,写了个脚本。改了下变成搞excel的,你可以试试
  1. Dim XLSFolder, TXTFolder, fso, stm, xl
  2. ' 设置项目源文件所在的工作路径
  3. XLSFolder = "D:\my\tables"
  4. ' 目标文件夹,必须是已存在的
  5. TXTFolder = "D:\my\tables_trans"
  6. Set fso = CreateObject("Scripting.FileSystemObject")
  7. Set stm = CreateObject("ADODB.Stream")
  8.     stm.Mode = 3
  9.     stm.Type = 2
  10.     stm.Charset = "unicode"
  11.    
  12. Set xl = CreateObject("Excel.Application")
  13.     xl.Visible = False
  14.    
  15. ProcessAllFiles XLSFolder
  16. xl.Quit
  17. WScript.Echo "处理结束。"
  18. '* 遍历文件夹
  19. '******************************
  20. Function ProcessAllFiles(folderspec)        
  21.     Dim fd, fs, f, sfds, sfd
  22.     Set fd = fso.GetFolder(folderspec)
  23.     Set fs = fd.Files
  24.     For Each f in fs
  25.         If UCase(Right(f.Path, 4)) = ".XLS" Then
  26.             ProcessOneFile f.Path
  27.         End If
  28.     Next
  29.     Set sfds = fd.SubFolders
  30.     For Each sfd in sfds
  31.         ProcessAllFiles sfd.Path
  32.     Next
  33. End Function
  34. '* 处理一个文件,反悔错误代码
  35. '********************************
  36. Function ProcessOneFile(filespec)
  37.     On Error Resume Next
  38.     Dim iResult, newPath
  39.     iResult = 0
  40.     newPath = GenerateNewPath(filespec, XLSFolder, TXTFolder)
  41.     ' 处理一个文件
  42.     '-------- start ----------
  43.     Dim wb, ur, i, j, strAll
  44.     ' 打开此文件,不更新链接,只读
  45.     Set wb = xl.Workbooks.Open(filespec, 0, True)
  46.     Set ur  = wb.WorkSheets(1).UsedRange
  47.     For i = 1 To ur.Rows.Count
  48.         For j = 1 To ur.Columns.Count
  49.             If j > 1 Then
  50.                 strAll = strAll & vbTab
  51.             ElseIf i > 1 Then
  52.                 strAll = strAll & vbCrLf
  53.             End If
  54.             strAll = strAll & ur.Cells(i, j).Text
  55.         Next
  56.     Next
  57.     wb.Close
  58.     stm.Open
  59.     stm.WriteText strAll
  60.     stm.SaveToFile newPath & ".txt"
  61.     stm.Close
  62.     '---------  end  ---------
  63.     If Err.Number <> 0 Then
  64.         iResult = Err.Number
  65.         Err.Clear
  66.     End If
  67.     On Error Goto 0
  68. End Function
  69. '* 生成一个结构相同的新路径
  70. '**********************************
  71. Function GenerateNewPath(dpnx, dp1, dp2)
  72.     Dim absDP1, absDP2, starPos, pNames, dpnx2, i
  73.     absDP1 = fso.GetFolder(dp1).Path
  74.     absDP2 = fso.GetFolder(dp2).Path
  75.     pNames = Split(dpnx, "\")
  76.     starPos = UBound(Split(absDP1, "\")) + 1
  77.     For i = starPos To UBound(pNames) - 1
  78.         absDP2 = fso.BuildPath(absDP2, pNames(i))
  79.         If Not fso.FolderExists(absDP2) Then fso.CreateFolder absDP2
  80.     Next
  81.     dpnx2 = fso.BuildPath(absDP2, pNames(UBound(pNames)))
  82.     GenerateNewPath = dpnx2
  83. End Function
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2