从电子表格中删除所有非打印字符

时间:2013-08-06 16:38:51

标签: sql-server-2008 excel-2010

我需要将Excel电子表格中的数据导入SQL Server 2008. 88列和大约5千行。

各种各样的隐藏角色似乎都会造成问题。

我没有Excel的经验。我读到CLEAN(A1)将从单元格中删除所有非打印字符。

如何从整个电子表格中删除非打印字符?

当我将某些数据导入SQL Server时,CLEAN会删除某些数据周围出现的双重引号(这些逗号在电子表格中不可见)。这些似乎引起了问题。在SQL Server中,您会在字段的开头看到双重倒置的逗号,但数据会被截断等。

1 个答案:

答案 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