Sql server 将MS Excel数据粘贴到SQL Server

Sql server 将MS Excel数据粘贴到SQL Server,sql-server,excel,copy-paste,Sql Server,Excel,Copy Paste,我在Excel中有一大堆行,我想将它们粘贴到MS SQL中的一个新表中。有简单的方法吗?最简单的方法是在XLS中创建一个计算列,该列将生成insert语句的语法。 然后将这些insert复制到文本文件中,然后在SQL上执行。 另一种选择是购买Excel数据库连接插件,并编写VBA代码来完成相同的操作。如果界面的工作方式与我上次使用时相同,您可以在Excel中选择区域,复制它,打开SQL Server,然后像使用Access一样将数据粘贴到表中 或者您可以在Excel和SQL Server之间设置

我在Excel中有一大堆行,我想将它们粘贴到MS SQL中的一个新表中。有简单的方法吗?

最简单的方法是在XLS中创建一个计算列,该列将生成insert语句的语法。 然后将这些insert复制到文本文件中,然后在SQL上执行。
另一种选择是购买Excel数据库连接插件,并编写VBA代码来完成相同的操作。

如果界面的工作方式与我上次使用时相同,您可以在Excel中选择区域,复制它,打开SQL Server,然后像使用Access一样将数据粘贴到表中


或者您可以在Excel和SQL Server之间设置ODBC链接。

我认为一些数据库可以从CSV(逗号分隔值)文件导入数据,而您可以从exel导出数据。或者,至少使用csv解析器(为您的语言找到一个解析器,不要尝试自己创建一个解析器——这比看起来更难)将其导入数据库是相当容易的

我不熟悉MS SQL,但如果它直接支持它,我也不会感到惊讶


无论如何,我认为要求必须是Exel表和数据库表中的结构相似。

我过去成功地使用过这种技术:

(…)跳过一列(或将其用于注释),然后键入类似 其中包括以下公式:

=“插入tblyourtablename(您的密钥ID\u pk、intmine、strval)值(“&A4&”、“&B4&”、N'&C4&“)”)”

现在您已经获得了的insert语句 包含主键(PK)、整数和unicode字符串的表。(……)


为什么不在SSMS中使用导出/导入向导?

如果您有SQL Server Management Studio,您可以使用鼠标从Excel复制并粘贴到Management Studio中的表中。只是

  • 转到要粘贴到的表
  • 选择“编辑前200行”
  • 在任意位置单击鼠标右键,然后选择“粘贴”
  • 在执行此操作之前,必须匹配Excel和Management Studio之间的列。此外,必须使用ManagementStudio中的表设计器将任何不可编辑的列放在最后(最右边)

    整个过程需要几秒钟(设置和启动—不一定要执行),并且不需要任何SQL语句


    关于。

    您不能使用VBA代码从excel复制并粘贴到SSMS操作中吗?

    供将来参考:

    通过执行以下操作,可以将粘贴数据从en excel工作表复制到SQL表:

  • 在Excel中选择数据,然后按Ctrl+C
  • 在SQL Server Management Studio中右键单击该表,然后选择“编辑前200行”
  • 滚动到底部,通过单击行标题选择整个空行
  • 按Ctrl+V键粘贴数据
  • 注意:表通常有第一列,它是具有自动生成/递增ID的ID列。粘贴数据时,它将开始将Excel中最左边的选定列插入SSMS中最左边的列,从而将数据插入ID列。为了避免这种情况,请在选择的最左侧保留一个空列,以便在SSMS中跳过该列。这将导致SSMS插入默认数据,即自动生成的ID。
    此外,您还可以跳过其他列,方法是在Excel工作表选择中的空列的序号位置与要跳过的列相同。这将使SSMS插入默认值(如果未指定默认值,则为NULL)。

    我开发了一个Excel VBA宏,用于剪切和粘贴Excel中的任何选择并将其粘贴到SQL Server中,从而创建一个新表。该宏非常适合快速创建多达数千行和多列的脏表(理论上它最多可以管理200列)。宏尝试自动检测头名称,并为每列指定最合适的数据类型(它处理最多1000个字符的varchar列)

    建议的安装程序:

  • 确保已启用Excel以运行宏。(文件->选项->信任中心->信任中心设置->宏设置->启用所有宏..)
  • 将下面的VBA代码复制到与个人工作簿关联的模块中(以便宏可用于所有工作表)
  • 为宏指定适当的击键(我已指定Ctrl-Shift X)
  • 保存您的个人工作簿
  • 宏的使用

  • 选择Excel中要传输到SQL的单元格(如果存在列标题,则包括列标题)
  • 按已指定的关键字组合以运行宏
  • 按照提示操作。(默认表名为##表)
  • 将剪贴板内容粘贴到SSMS窗口中,并运行生成的SQL代码。 布里弗里238
  • VBA代码:

    Sub TransferToSQL()
    '
    ' TransferToSQL Macro
    ' This macro prepares data for pasting into SQL Server and posts it to the clipboard for inserting into SSMS
    ' It attempts to automatically detect header rows and does a basic analysis of the first 15 rows to determine the most appropriate datatype to use handling text entries upto 1000 chars.
    '
    ' Max Number of Columns: 200
    '
    ' Keyboard Shortcut: Ctrl+Shift+X
    '
    ' ver   Date    Reason
    ' ===   ====    ======
    
    ' 1.6   06/2012 Fixed bug that prevented auto exit if no selection made / auto exit if blank Tablename entered or 'cancel' button pressed
    ' 1.5   02/2012 made use of function fn_ColLetter to retrieve the Column Letter for a specified column
    ' 1.4   02/2012 Replaces any Tabs in text data to spaces to prevent Double quotes being output in final results
    ' 1.3   02/2012 Place the 'drop table if already exists' code into a separate batch to prevent errors when inserting new table with same name but different shape and > 100 rows
    ' 1.2   01/2012 If null dates encountered code to cast it as Null rather than '00-Jan-1900'
    ' 1.1   10/2011 Code to drop the table if already exists
    ' 1.0   03/2011 Created
    
    Dim intLastRow As Long
    Dim intlastColumn As Integer
    Dim intRow As Long
    Dim intDataStartRow As Long
    Dim intColumn As Integer
    Dim strKeyWord As String
    Dim intPos As Integer
    Dim strDataTypeLevel(4) As String
    Dim strColumnHeader(200) As String
    Dim strDataType(200) As String
    Dim intRowCheck As Integer
    Dim strFormula(20) As String
    Dim intHasHeaderRow As Integer
    Dim strCellRef As String
    Dim intFormulaCount As Integer
    Dim strSQLTableName As String
    Dim strSQLTableName_Encap As String
    Dim intdataTypelevel As Integer
    Const strConstHeaderKeyword As String = "ID,URN,name,Title,Job,Company,Contact,Address,Post,Town,Email,Tele,phone,Area,Region,Business,Total,Month,Week,Year,"
    Const intConstMaxBatchSize As Integer = 100
        Const intConstNumberRowsToAnalyse As Integer = 100
    intHasHeaderRow = 0
    
    strDataTypeLevel(1) = "VARCHAR(1000)"
    strDataTypeLevel(2) = "FLOAT"
    strDataTypeLevel(3) = "INTEGER"
    strDataTypeLevel(4) = "DATETIME"
    
    
    
    ' Use current selection and paste to new temp worksheet
    
        Selection.Copy
        Workbooks.Add       ' add temp 'Working' Workbook
        ' Paste "Values Only" back into new temp workbook
        Range("A3").Select  ' Goto 3rd Row
        Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' Copy Format of Selection
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  ' Copy Values of Selection
        ActiveCell.SpecialCells(xlLastCell).Select  ' Goto last cell
        intLastRow = ActiveCell.Row
        intlastColumn = ActiveCell.Column
    
    
    ' Check to make sure that there are cells which are selected
    If intLastRow = 3 And intlastColumn = 1 Then
        Application.DisplayAlerts = False       ' Temporarily switch off Display Alerts
        ActiveWindow.Close                      ' Delete newly created worksheet
        Application.DisplayAlerts = True        ' Switch display alerts back on
        MsgBox "*** Please Make selection before running macro - Terminating ***", vbOKOnly, "Transfer Data to SQL Server"
        Exit Sub
    End If
    
    ' Prompt user for Name of SQL Server table
    strSQLTableName = InputBox("SQL Server Table Name?", "Transfer Excel Data To SQL", "##Table")
    
    ' if blank table name entered or 'Cancel' selected then exit
    If strSQLTableName = "" Then
        Application.DisplayAlerts = False       ' Temporarily switch off Display Alerts
        ActiveWindow.Close                      ' Delete newly created worksheet
        Application.DisplayAlerts = True        ' Switch display alerts back on
        Exit Sub
    End If
    
    
    
    ' encapsulate tablename with square brackets if user has not already done so
    strSQLTableName_Encap = Replace(Replace(Replace("[" & Replace(strSQLTableName, ".", "].[") & "]", "[]", ""), "[[", "["), "]]", "]")
    
    ' Try to determine if the First Row is a header row or contains data and if a header load names of Columns
    Range("A3").Select
    For intColumn = 1 To intlastColumn
        ' first check to see if the first row contains any pure numbers or pure dates
        If IsNumeric(ActiveCell.Value) Or IsDate(ActiveCell.Value) Then
        intHasHeaderRow = vbNo
        intDataStartRow = 3
        Exit For
        Else
        strColumnHeader(intColumn) = ActiveCell.Value
        ActiveCell.Offset(1, 0).Range("A1").Select  ' go to the row below
        If IsNumeric(ActiveCell.Value) Or IsDate(ActiveCell.Value) Then
            intHasHeaderRow = vbYes
            intDataStartRow = 4
        End If
        ActiveCell.Offset(-1, 0).Range("A1").Select  ' go back up to the first row
        If intHasHeaderRow = 0 Then     ' if still not determined if header exists: Look for header using keywords
            intPos = 1
            While intPos < Len(strConstHeaderKeyword) And intHasHeaderRow = 0
            strKeyWord = Mid$(strConstHeaderKeyword, intPos, InStr(intPos, strConstHeaderKeyword, ",") - intPos)
            If InStr(1, ActiveCell.Value, strKeyWord) > 0 Then
                intHasHeaderRow = vbYes
                intDataStartRow = 4
            End If
            intPos = InStr(intPos, strConstHeaderKeyword, ",") + 1
            Wend
        End If
        End If
        ActiveCell.Offset(0, 1).Range("A1").Select  ' Goto next column
    Next intColumn
    
    ' If auto header row detection has failed ask the user to manually select
    If intHasHeaderRow = 0 Then
        intHasHeaderRow = MsgBox("Does current selection have a header row?", vbYesNo, "Auto header row detection failure")
        If intHasHeaderRow = vbYes Then
        intDataStartRow = 4
        Else
        intDataStartRow = 3
        End If
    
    End If
    
    
    
    
    ' *** Determine the Data Type of each Column ***
    
    ' Go thru each Column to find Data types
    If intLastRow < intConstNumberRowsToAnalyse  Then             ' Check the first intConstNumberRowsToAnalyse  rows or to end of selection whichever is less
        intRowCheck = intLastRow
    Else
        intRowCheck = intConstNumberRowsToAnalyse 
    End If
    
    For intColumn = 1 To intlastColumn
        intdataTypelevel = 5
    
        For intRow = intDataStartRow To intRowCheck
        Application.Goto Reference:="R" & CStr(intRow) & "C" & CStr(intColumn)
        If ActiveCell.Value = "" Then   ' ignore blank (null) values
        ElseIf IsDate(ActiveCell.Value) = True And Len(ActiveCell.Value) >= 8 Then
            If intdataTypelevel > 4 Then intdataTypelevel = 4
        ElseIf IsNumeric(ActiveCell.Value) = True And InStr(1, CStr(ActiveCell.Value), ".") = 0 And (Left(CStr(ActiveCell.Value), 1) <> "0" Or ActiveCell.Value = "0") And Len(ActiveCell.Value) < 10 Then
            If intdataTypelevel > 3 Then intdataTypelevel = 3
        ElseIf IsNumeric(ActiveCell.Value) = True And InStr(1, CStr(ActiveCell.Value), ".") >= 1 Then
            If intdataTypelevel > 2 Then intdataTypelevel = 2
        Else
            intdataTypelevel = 1
            Exit For
        End If
        Next intRow
        If intdataTypelevel = 5 Then intdataTypelevel = 1
        strDataType(intColumn) = strDataTypeLevel(intdataTypelevel)
    Next intColumn
    
    
    ' *** Build up the SQL
    intFormulaCount = 1
    If intHasHeaderRow = vbYes Then     ' *** Header Row ***
        Application.Goto Reference:="R4" & "C" & CStr(intlastColumn + 1)    ' Goto next column in first data row of selection
        strFormula(intFormulaCount) = "= ""SELECT "
        For intColumn = 1 To intlastColumn
        If strDataType(intColumn) = "DATETIME" Then         ' Code to take Excel Dates back to text
            strCellRef = "Text(" & fn_ColLetter(intColumn) & "4,""dd-mmm-yyyy hh:mm:ss"")"
        ElseIf strDataType(intColumn) = "VARCHAR(1000)" Then
            strCellRef = "SUBSTITUTE(" & fn_ColLetter(intColumn) & "4,""'"",""''"")" ' Convert any single ' to double ''
        Else
            strCellRef = fn_ColLetter(intColumn) & "4"
        End If
    
    
        strFormula(intFormulaCount) = strFormula(intFormulaCount) & "CAST('""& " & strCellRef & " & ""' AS " & strDataType(intColumn) & ") AS [" & strColumnHeader(intColumn) & "]"
        If intColumn < intlastColumn Then
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + ", "
        Else
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + " UNION ALL """
        End If
        ' since each cell can only hold a maximum no. of chars if Formula string gets too big continue formula in adjacent cell
        If Len(strFormula(intFormulaCount)) > 700 And intColumn < intlastColumn Then
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + """"
            intFormulaCount = intFormulaCount + 1
            strFormula(intFormulaCount) = "= """
        End If
        Next intColumn
    
     ' Assign the formula to the cell(s) just right of the selection
        For intColumn = 1 To intFormulaCount
        ActiveCell.Value = strFormula(intColumn)
        If intColumn < intFormulaCount Then ActiveCell.Offset(0, 1).Range("A1").Select  ' Goto next column
        Next intColumn
    
    
     ' Auto Fill the formula for the full length of the selection
        ActiveCell.Offset(0, -intFormulaCount + 1).Range("A1:" & fn_ColLetter(intFormulaCount) & "1").Select
        If intLastRow > 4 Then Selection.AutoFill Destination:=Range(fn_ColLetter(intlastColumn + 1) & "4:" & fn_ColLetter(intlastColumn + intFormulaCount) & CStr(intLastRow)), Type:=xlFillDefault
    
     ' Go to start row of data selection to add 'Select into' code
       ActiveCell.Value = "SELECT * INTO " & strSQLTableName_Encap & " FROM (" & ActiveCell.Value
    
     ' Go to cells above data to insert code for deleting old table with the same name in separate SQL batch
       ActiveCell.Offset(-1, 0).Range("A1").Select  ' go to the row above
       ActiveCell.Value = "GO"
       ActiveCell.Offset(-1, 0).Range("A1").Select  ' go to the row above
       If Left(strSQLTableName, 1) = "#" Then      ' temp table
           ActiveCell.Value = "IF OBJECT_ID('tempdb.." & strSQLTableName & "') IS NOT NULL DROP TABLE " & strSQLTableName_Encap
       Else
           ActiveCell.Value = "IF OBJECT_ID('" & strSQLTableName & "') IS NOT NULL DROP TABLE " & strSQLTableName_Encap
       End If
    
    
    
    ' For Big selections (i.e. several 100 or 1000 rows) SQL Server takes a very long time to do a multiple union - Split up the table creation into many inserts
        intRow = intConstMaxBatchSize + 4   ' add 4 to make sure 1st batch = Max Batch Size
        While intRow < intLastRow
        Application.Goto Reference:="R" & CStr(intRow - 1) & "C" & CStr(intlastColumn + intFormulaCount)  ' Goto Row before intRow and the last column in formula selection
        ActiveCell.Value = Replace(ActiveCell.Value, " UNION ALL ", " ) a") ' Remove last 'UNION ALL'
    
        Application.Goto Reference:="R" & CStr(intRow) & "C" & CStr(intlastColumn + 1)    ' Goto intRow and the first column in formula selection
        ActiveCell.Value = "INSERT " & strSQLTableName_Encap & " SELECT * FROM (" & ActiveCell.Value
        intRow = intRow + intConstMaxBatchSize   ' increment intRow by intConstMaxBatchSize
        Wend
    
    
        ' Delete the last 'UNION AlL' replacing it with brackets to mark the end of the last insert
        Application.Goto Reference:="R" & CStr(intLastRow) & "C" & CStr(intlastColumn + intFormulaCount)
        ActiveCell.Value = Replace(ActiveCell.Value, " UNION ALL ", " ) a")
    
        ' Select all the formula cells
        ActiveCell.Offset(-intLastRow + 2, 1 - intFormulaCount).Range("A1:" & fn_ColLetter(intFormulaCount + 1) & CStr(intLastRow - 1)).Select
    Else    ' *** No Header Row ***
        Application.Goto Reference:="R3" & "C" & CStr(intlastColumn + 1)    ' Goto next column in first data row of selection
        strFormula(intFormulaCount) = "= ""SELECT "
    
        For intColumn = 1 To intlastColumn
        If strDataType(intColumn) = "DATETIME" Then
            strCellRef = "Text(" & fn_ColLetter(intColumn) & "3,""dd-mmm-yyyy hh:mm:ss"")"   ' Format Excel dates into a text Date format that SQL will pick up
        ElseIf strDataType(intColumn) = "VARCHAR(1000)" Then
            strCellRef = "SUBSTITUTE(" & fn_ColLetter(intColumn) & "3,""'"",""''"")"         ' Change all single ' to double ''
        Else
            strCellRef = fn_ColLetter(intColumn) & "3"
        End If
    
        ' Since no column headers: Name each column "Column001",Column002"..
        strFormula(intFormulaCount) = strFormula(intFormulaCount) & "CAST('""& " & strCellRef & " & ""' AS " & strDataType(intColumn) & ") AS [Column" & CStr(intColumn) & "]"
        If intColumn < intlastColumn Then
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + ", "
        Else
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + " UNION ALL """
        End If
    
        ' since each cell can only hold a maximum no. of chars if Formula string gets too big continue formula in adjacent cell
        If Len(strFormula(intFormulaCount)) > 700 And intColumn < intlastColumn Then
            strFormula(intFormulaCount) = strFormula(intFormulaCount) + """"
            intFormulaCount = intFormulaCount + 1
            strFormula(intFormulaCount) = "= """
        End If
        Next intColumn
    
        ' Assign the formula to the cell(s) just right of the selection
        For intColumn = 1 To intFormulaCount
        ActiveCell.Value = strFormula(intColumn)
        If intColumn < intFormulaCount Then ActiveCell.Offset(0, 1).Range("A1").Select  ' Goto next column
        Next intColumn
    
     ' Auto Fill the formula for the full length of the selection
        ActiveCell.Offset(0, -intFormulaCount + 1).Range("A1:" & fn_ColLetter(intFormulaCount) & "1").Select
        If intLastRow > 4 Then Selection.AutoFill Destination:=Range(fn_ColLetter(intlastColumn + 1) & "3:" & fn_ColLetter(intlastColumn + intFormulaCount) & CStr(intLastRow)), Type:=xlFillDefault
    
     ' Go to start row of data selection to add 'Select into' code
       ActiveCell.Value = "SELECT * INTO " & strSQLTableName_Encap & " FROM (" & ActiveCell.Value
    
     ' Go to cells above data to insert code for deleting old table with the same name in separate SQL batch
       ActiveCell.Offset(-1, 0).Range("A1").Select  ' go to the row above
       ActiveCell.Value = "GO"
       ActiveCell.Offset(-1, 0).Range("A1").Select  ' go to the row above
       If Left(strSQLTableName, 1) = "#" Then      ' temp table
           ActiveCell.Value = "IF OBJECT_ID('tempdb.." & strSQLTableName & "') IS NOT NULL DROP TABLE " & strSQLTableName_Encap
       Else
           ActiveCell.Value = "IF OBJECT_ID('" & strSQLTableName & "') IS NOT NULL DROP TABLE " & strSQLTableName_Encap
       End If
    
      ' For Big selections (i.e. serveral 100 or 1000 rows) SQL Server takes a very long time to do a multiple union - Split up the table creation into many inserts
       intRow = intConstMaxBatchSize + 3        ' add 3 to make sure 1st batch = Max Batch Size
        While intRow < intLastRow
        Application.Goto Reference:="R" & CStr(intRow - 1) & "C" & CStr(intlastColumn + intFormulaCount)  ' Goto Row before intRow and the last column in formula selection
        ActiveCell.Value = Replace(ActiveCell.Value, " UNION ALL ", " ) a") ' Remove last 'UNION ALL'
    
        Application.Goto Reference:="R" & CStr(intRow) & "C" & CStr(intlastColumn + 1)    ' Goto intRow and the first column in formula selection
        ActiveCell.Value = "INSERT " & strSQLTableName_Encap & " SELECT * FROM (" & ActiveCell.Value
        intRow = intRow + intConstMaxBatchSize   ' increment intRow by intConstMaxBatchSize
        Wend
    
        ' Delete the last 'UNION AlL'
        Application.Goto Reference:="R" & CStr(intLastRow) & "C" & CStr(intlastColumn + intFormulaCount)
        ActiveCell.Value = Replace(ActiveCell.Value, " UNION ALL ", " ) a")
    
        ' Select all the formula cells
        ActiveCell.Offset(-intLastRow + 1, 1 - intFormulaCount).Range("A1:" & fn_ColLetter(intFormulaCount + 1) & CStr(intLastRow)).Select
    End If
    
    
    ' Final Selection to clipboard and Cleaning of data
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False              ' Repaste "Values Only" back into cells
    Selection.Replace What:="CAST('' AS", Replacement:="CAST(NULL AS", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False  ' convert all blank cells to NULL
    Selection.Replace What:="'00-Jan-1900 00:00:00'", Replacement:="NULL", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False  ' convert all blank Date cells to NULL
    Selection.Replace What:="'NULL'", Replacement:="NULL", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False  ' convert all 'NULL' cells to NULL
    Selection.Replace What:=vbTab, Replacement:=" ", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False        ' Replace all Tabs in cells to Space to prevent Double Quotes occuring in the final paste text
    Selection.Copy
    
    
    MsgBox "SQL Code has been added to clipboard - Please Paste into SSMS window", vbOKOnly, "Transfer to SQL"
    
    Application.DisplayAlerts = False       ' Temporarily switch off Display Alerts
    ActiveWindow.Close                      ' Delete newly created worksheet
    Application.DisplayAlerts = True        ' Switch display alerts back on
    
    
    
    End Sub
    
    
    
    
    Function fn_ColLetter(Col As Integer) As String
    
    Dim strColLetter As String
    
    If Col > 26 Then
        ' double letter columns
        strColLetter = Chr(Int((Col - 1) / 26) + 64) & _
            Chr(((Col - 1) Mod 26) + 65)
    Else
        ' single letter columns
        strColLetter = Chr(Col + 64)
    End If
    fn_ColLetter = strColLetter
    End Function
    
    Sub TransferToSQL()
    '
    'TransferToSQL宏
    '此宏准备要粘贴到SQL Server中的数据,并将其发布到剪贴板以插入到SSMS中
    '它尝试自动检测标题行,并对前15行进行基本分析,以确定最合适的数据类型,用于处理多达1000个字符的文本条目。
    '
    '最大列数:200
    '
    '键盘快捷键:Ctrl+Shift+X
    '
    “日期原因
    ' ===   ====    ======
    “1.6 06/2012修复了在未进行选择时阻止自动退出的错误/在输入空白表名或按下“取消”按钮时自动退出
    '1.5 02/2012使用函数fn_ColLetter检索指定列的列字母
    '1.4 02/2012将文本数据中的任何选项卡替换为空格,以防止在最终结果中输出双引号
    '1.3 02/2012将'drop table if ready exists'代码放入单独的批处理中,以防止在插入具有相同名称但形状不同且>100行的新表格时出错
    “1.2 2012年1月1日如果空日期遇到代码将其转换为空而不是“00-Jan-1900”
    '1.1 2011年10月删除表格的代码(如果已经存在)
    '1.0 2011年3月Crea