2013-08-06 134 views
1

我需要将Excel电子表格中的数据导入到SQL Server 2008中。88列和大约5千行。从电子表格中删除所有非打印字符

各种隐藏的字符似乎是导致问题。

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

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

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

回答

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 
+0

尼斯脚本。这也删除了所有空间 - 我想保留它们,所以我将'32'更改为'31'(以防其他人也需要这样做)。 –

+0

一些谷歌电子表格信息,因为它是相关的:清洁功能也适用于谷歌电子表格。 VB函数需要转换为JavaScript,我认为它可以与谷歌脚本编辑器一起工作。 Google自定义脚本链接:https://developers.google.com/apps-script/guides/sheets/functions – Danny

相关问题