找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21631|回复: 6

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

[复制链接]
发表于 2012-12-12 09:25:06 | 显示全部楼层 |阅读模式
RT!

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

注:只对工作薄中的sheet1工作表进行操作即可。
发表于 2012-12-13 10:29:55 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2012-12-13 10:44:45 | 显示全部楼层
哦,不对,不能直接读取.xls文件

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

excel对象还没学习过,帮不了你
 楼主| 发表于 2012-12-13 13:53:55 | 显示全部楼层
回复 2# czjt1234


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

   2、这些xls文件分散在不同的多级目录下,那么对于多级目录来说,又如何更改vbs的代码呢?
 楼主| 发表于 2012-12-13 13:54:26 | 显示全部楼层
回复 3# czjt1234


    呵,你已经尽力了,3Q
发表于 2012-12-14 09:22:25 | 显示全部楼层
不能直接读取.xls文件

不是文本流的数据
发表于 2012-12-14 18:05:32 | 显示全部楼层
这两天刚好移植一个项目要处理所有文件内容,写了个脚本。改了下变成搞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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:07 , Processed in 0.021414 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表