【发布时间】:2018-03-19 15:14:10
【问题描述】:
我必须整理一个宏来读取文件夹中的所有 CSV,应用分隔符,然后另存为新文件。
目前我可以让它打开一个文件夹中的所有 CSV 并将它们保存为新的工作簿,但是在该过程的中间应用文本到列是很棘手的。
Sub CSVtoXLS()
Dim xFd As FileDialog
Dim xSPath As String
Dim xCSVFile As String
Dim xWsheet As String
Application.DisplayAlerts = False
Application.StatusBar = True
xWsheet = ActiveWorkbook.Name
Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
xFd.Title = "Select a folder:"
If xFd.Show = -1 Then
xSPath = xFd.SelectedItems(1)
Else
Exit Sub
End If
If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
xCSVFile = Dir(xSPath & "*.csv")
Do While xCSVFile <> ""
Application.StatusBar = "Converting: " & xCSVFile
Workbooks.Open Filename:=xSPath & xCSVFile
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12 _
, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array( _
25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), _
Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array( _
38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1)), TrailingMinusNumbers _
:=True
ActiveWorkbook.Close
Windows(xWsheet).Activate
xCSVFile = Dir
Loop
Application.StatusBar = False
Application.DisplayAlerts = True
End Sub
【问题讨论】:
-
这里的关键点是如何“应用分隔符”,那么您能否准确解释一下您的情况是什么意思?例如,是否存在制表符分隔符并且您想将它们全部替换为逗号?如果是这样,是否只是用逗号替换每个文件中的所有选项卡?等等。
-
CSVS 的格式如下 员工编号|POST ID|DATE COMMENCED POST|DATE COMMENCED POSTPS|DATE CEASED 所以我需要将“|”分开所有文本当前都在单元格 A1 中,我需要将其全部拆分到相关单元格中,以便 A1、B1、C1 等沿行向下。
-
那么这是否意味着只需替换所有 |与其他角色?如果是这样,有许多程序可以跨多个文件进行批量查找和替换,例如记事本++、括号等...
-
这将是在每个 | 之前打破所有内容的情况并将其放置在单元格中。因此,例如,如果它是 A|B|C|D|E,那么 A 将在 A1 中,B 将在 B1 中,C 将在 C1 中,依此类推。我被要求通过 Excel 中的宏来执行此操作。我认为文本到列是最简单的方法吗?
-
听起来您在描述 Excel 的导入向导所做的事情。数据-->获取数据-->从文件-->从文本/csv。你试过吗?