[英]Batch convert Excel to text-delimited files
嗨,我在将Excel电子表格转换为txt文件时遇到问题。
我想做的是创建一个宏,该宏可以将一个文件夹中的所有xls文件转换为txt文件。
当前正在处理的代码
Sub Combined()
Application.DisplayAlerts = False
Const fPath As String = "C:\Users\A9993846\Desktop\"
Dim sh As Worksheet
Dim sName As String
Dim inputString As String
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
sName = Dir(fPath & "*.xls*")
Do Until sName = ""
With GetObject(fPath & sName)
For Each sh In .Worksheets
With sh
.SaveAs Replace(sName, ".xls*", ".txt"), 42 'UPDATE:
End With
Next sh
.Close True
End With
sName = Dir
Loop
With Application
.Calculation = xlAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
但是它没有按预期工作,我对VB有0个知识。 有人愿意伸出援手吗?
下面的代码将给定文件夹中的所有Excel工作簿(测试“ xlsx”的文件扩展名)转换为CSV文件。 文件名将为[workbookname] [sheetname] .csv,即“ foo.xlsx”将获得“ foo.xlsxSheet1.scv”,“ foo.xlsxSheet2.scv”等。要运行该文件,请创建纯文本文件,将其重命名为.vbs并复制粘贴以下代码。 更改路径信息并运行它。
Option Explicit
Dim oFSO, myFolder
Dim xlCSV
myFolder="C:\your\path\to\excelfiles\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
xlCSV = 6 'Excel CSV format enum
Call ConvertAllExcelFiles(myFolder)
Set oFSO = Nothing
Call MsgBox ("Done!")
Sub ConvertAllExcelFiles(ByVal oFolder)
Dim targetF, oFileList, oFile
Dim oExcel, oWB, oWSH
Set oExcel = CreateObject("Excel.Application")
oExcel.DisplayAlerts = False
Set targetF = oFSO.GetFolder(oFolder)
Set oFileList = targetF.Files
For Each oFile in oFileList
If (Right(oFile.Name, 4) = "xlsx") Then
Set oWB = oExcel.Workbooks.Open(oFile.Path)
For Each oWSH in oWB.Sheets
Call oWSH.SaveAs (oFile.Path & oWSH.Name & ".csv", xlCSV)
Next
Set oWSH = Nothing
Call oWB.Close
Set oWB = Nothing
End If
Next
Call oExcel.Quit
Set oExcel = Nothing
End Sub
您可以根据需要提供更好的文件命名,错误处理/等。
代码的问题是,您将sPath
定义为包含通配符的路径:
sName = Dir(fPath & "*.xls*")
并仅替换扩展名部分( .xls*
),但在扩展名之前保留通配符:
Replace(sName, ".xls*", ".txt")
这将产生以下路径:
C:\Users\A9993846\Desktop\*.txt
这会导致您观察到错误,因为SaveAs
方法会尝试将电子表格保存到文本名称为*.txt
的文件中,但是*
对于文件名而言不是有效字符。
替换为:
.SaveAs Replace(sName, ".xls*", ".txt"), 42
有了这个:
Set wb = sh.Parent
basename = Replace(wb.FullName, Mid(wb.Name, InStrRev(wb.Name, ".")), "")
.SaveAs basename & "_" & sh.Name & ".txt", xlUnicodeText
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.