2016-08-22 73 views
0

最近在我工作的公司,我需要將一大堆訂單從Excel導入到我們的數據庫中,以便可以處理和發運它們。許多這些excel文件都有數百個列。我正在尋找一種乾淨的方式來將包含訂單數據的多行和多列轉換爲SQL查詢轉儲。將Excel訂單發票轉換爲SQL INSERT查詢

Here is what I'm working with.

每個訂單是由OrderID標識的單個行,並且每個產品的數量在對應於ProductID該單元定義。

我用下面的公式來每個單元轉換(若填寫)入值的SQL查詢:

=CONCATENATE(IF(ISBLANK(B3),"",("("&B3&", "&B$1&", "&$A3&"), "))) 

每個單元格填充的結果是這樣的:

(1, 22, 1), 

我想要做的是將每個單元格(如果已填充)連成一個長字符串,而不用數百列填充相同的公式。像這樣:

(5, 12, 23), (5, 13, 23), (100, 7, 23), (50, 1, 23), (100, 3, 23), 

謝謝。

回答

0

試一試 -

VBA代碼

Function InsStr(Product As Range, Order As String, Qty As Range) 
Dim tmpString As String: tmpString = "" 
Dim tmpCount As Integer: tmpCount = 1 
    For Each cell In Qty 
     If cell <> "" Then 
     If tmpCount > 1 Then tmpString = tmpString & "," 
     tmpString = tmpString & "(" & cell & "," & Product(tmpCount) & "," & Order & ")" 
     End If 
     tmpCount = tmpCount + 1 
    Next cell 
    InsStr = tmpString 
End Function 

,並使用公式=InsStr(B1:X1,A3,B3:X3)

+0

一旦我想通了,如何將它的工作就像魔術的VBA。由於每個SQL值後面都必須有一個逗號,所以我刪除了你的'If tmpCount> 1 Then tmpString = tmpString&',''line並改變了'「)」'爲'「),」'。我用公式='InsStr($ B $ 1:$ X $ 1,A3,B3:X3)' –