2013-08-06 48 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

相關問題