繁体   English   中英

批量将Excel转换为文本分隔的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM