[vb]代码库
Public Sub CreateAllSheetsInsertScript()
Dim Row As Long
Dim Col As Integer
'To store all the columns available in the all of the worksheets
Dim ColNames(100) As String
Dim ColCount As Integer
Dim MaxRow As Long
Dim CellColCount As Integer
Dim StringStore As String 'Temporary variable to store partial statement
Dim filePath As String, DBname As String
DBname = "DB2"
Application.ScreenUpdating = False
'File to save the generated insert statements
filePath = "C:\\import.sql"
File = filePath
fHandle = FreeFile()
Open File For Output As fHandle
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
With sh
.Select
Col = 1
Row = 1
ColCount = 0
'Get Columns from the sheet
Do Until .Cells(Row, Col) = "" 'Loop until you find a blank.
ColNames(ColCount) = "[" & .Cells(Row, Col) & "]"
ColCount = ColCount + 1
Col = Col + 1
Loop
ColCount = ColCount - 1
'Inputs for the starting and ending point for the rows
Row = 2
MaxRow = .[A1].End(xlDown).Row
Do While Row <= MaxRow
CellColCount = 0
'.Name will give the current active sheet name
'this can be treated as table name in the database
StringStore = "INSERT INTO [dbo].[Material_price_new] ( "
Do While CellColCount <= ColCount
StringStore = StringStore & ColNames(CellColCount)
'To avoid "," after last column
If CellColCount <> ColCount Then
StringStore = StringStore & " , "
End If
CellColCount = CellColCount + 1
Loop
'Here it will print "insert into [TableName] ( [Col1] , [Col2] , ..."
Print #fHandle, StringStore & " ) "
'For printing the values for the above columns
StringStore = " VALUES ( "
CellColCount = 0
Do While CellColCount <= ColCount
StringStore = StringStore & IIf(Len(Trim(.Cells(Row, CellColCount + 1).Value)) = 0, "NULL", " '" & Replace(CStr(.Cells(Row, CellColCount + 1)), "'", "''") & "'")
If CellColCount <> ColCount Then
StringStore = StringStore & ", "
End If
CellColCount = CellColCount + 1
Loop
'Here it will print "values( 'value1', 'value2', ..."
Print #fHandle, StringStore & ")" & vbCrLf & IIf(Row Mod 5000 = 1, "GO" & vbCrLf, "") & " "
Row = Row + 1
Loop
End With
Next sh
Close #fHandle
Application.ScreenUpdating = True
Shell "CMD /C OSQL -E -d " & DBname & " -i """ & filePath & """ > nul"
MsgBox ("Successfully Done")
End Sub
by: 发表于:2017-12-01 14:57:08 顶(0) | 踩(0) 回复
??
回复评论