今天遇到的问题记录一下,excel数据另存为文本文档,在PL/SQL中通过text import导入数据时,无法识别txt中的多列数据,将所有数据合并到了一列。
问题原因:excel的数据中含有看不见的特殊符号,如回车等;
解决办法:使用clean方法清除所有看不见的特殊符号;
附:全局执行CLEAN方法的宏
Sub 全局CLEAN()
Application.ScreenUpdating = False
Dim arr, i, j, m, n, sh As Worksheet
For Each sh In Worksheets
'一旦遇到空行/列,后面的数据就取不到
arr = sh.[a1].CurrentRegion
'直接指定行列,包含空行空列,如sh.range("A120:G"&range("A1").end(3).row)代表A-G列,1-120行
' arr = sh.range("A1:c"&range("A1").end(3).row)
m = UBound(arr)
n = UBound(arr, 2)
For i = 1 To m
For j = 1 To n
arr(i, j) = Application.Clean(arr(i, j))
Next
Next
sh.[a1].Resize(m, n) = arr
Set arr = Nothing
Next
Application.ScreenUpdating = True
MsgBox "当前工作簿下的全部工作表已经CLEAN完毕!", vbInformation, "提示"
End Sub
Sub 指定sheetCLEAN()
Application.ScreenUpdating = False
Dim arr, i, j, m, n, sh As Worksheet
For Each sh In Worksheets
'一旦遇到空行/列,后面的数据就取不到
arr = sh.[a1].CurrentRegion
'直接指定行列,包含空行空列,如sh.range("A120:G"&range("A1").end(3).row)代表A-G列,1-120行
' arr = sh.range("A1:c"&range("A1").end(3).row)
'只对sheet2页进行操作
If (sh.Name = "Sheet2") Then
m = UBound(arr)
n = UBound(arr, 2)
For i = 1 To m
For j = 1 To n
'这一句会报错,注释掉
'arr(i, j) = Application.Clean(arr(i, j))
Next
Next
sh.[a1].Resize(m, n) = arr
Set arr = Nothing
End If
Next
Application.ScreenUpdating = True
MsgBox "当前工作簿下的全部工作表已经CLEAN完毕!", vbInformation, "提示"
End Sub