1

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

各种隐藏的字符似乎正在引起问题。

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

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

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

4

1 回答 1

1

CLEAN删除 ASCII 代码 1 到 32 的非打印字符。值得尝试导入一个CLEAN'ed您知道有隐藏字符的小型测试数据集,以查看这些字符是否是问题的根源。

应用于CLEAN整个工作表的最简单方法是在工作簿中插入一个额外的工作表,输入=CLEAN(Sheet1!A1)新工作表的单元格 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
于 2013-08-14T02:22:58.230 回答