我需要将Excel电子表格中的数据导入SQL Server 2008. 88列和大约5千行。
各种各样的隐藏角色似乎都会造成问题。
我没有Excel的经验。我读到CLEAN(A1)将从单元格中删除所有非打印字符。
如何从整个电子表格中删除非打印字符?
当我将某些数据导入SQL Server时,CLEAN会删除某些数据周围出现的双重引号(这些逗号在电子表格中不可见)。这些似乎引起了问题。在SQL Server中,您会在字段的开头看到双重倒置的逗号,但数据会被截断等。
答案 0 :(得分:1)
CLEAN
使用ASCII代码1到32删除非打印字符。值得尝试导入一个知道有隐藏字符的小CLEAN'ed
测试数据集,以查看这些字符是否为问题。
将CLEAN
应用于整个工作表的最简单方法是在工作簿中插入其他工作表,在新工作表的单元格A1中输入=CLEAN(Sheet1!A1)
,然后将公式向下复制并转换为转换原始工作表中的所有数据单元格。
另一种选择是将数据表保存为PRN,TXT或CSV文件(这也将消除非打印字符),然后尝试将新文件或其测试版本导入到你的数据库。毫无疑问,当您使用Save As
而非Save
保存工作表时,这些文件类型是“另存为类型”下拉菜单中的选项。
最后,如果您仍然遇到问题 - 或者只是想跳转到追逐 - 以下过程将删除除“键盘”字符(Asc 33-126)之外的所有内容,并将结果写入另一张表。您需要调整源表和范围的名称以及目标表的名称。
Sub CleanHighChars()
Dim srcRng As Range, destRng As Range
Dim strArray As Variant
Dim i As Long, j As Long, k As Long
Dim numRows As Long, numCols As Long
Dim ascNum As Long
Dim str As String, newStr As String, char As String
' // Source sheet and range
Set srcRng = Worksheets("Sheet1").Range("A1:A100")
numRows = srcRng.Rows.Count
numCols = srcRng.Columns.Count
' // Destination sheet
With Worksheets("Sheet2")
Set destRng = .Range(.Cells(1, 1), .Cells(numRows, numCols))
End With
strArray = srcRng
For i = 1 To numRows
For j = 1 To numCols
str = strArray(i, j)
For k = 1 To Len(str)
char = Mid(str, k, 1)
ascNum = Asc(char)
If ascNum > 32 And ascNum < 127 Then
newStr = newStr & char
End If
Next k
strArray(i, j) = newStr
newStr = vbNullString
Next j
Next i
destRng = strArray
End Sub