2011-03-08 15 views
0

私は約1000行と約15列のExcelスプレッドシートを持っています。私がしたいのは、このデータをテーブルにインポートすることですが、選択的にインポートします。私は行5から(言い換えれば)シートの最後から約5行までのデータを必要とします。これは、行数が異なることがあるためですが、スプレッドシートの行数に関係なく、最後の4-5行は必要ないと確信しています。さらに、Col1-Col5、Col7-Col9、Col12-Col15のようにいくつかの列だけを挿入したいと思います。これを達成するために使用できるコマンド/コマンドのシーケンスがありますか?できるだけ早くお知らせください。どうもありがとう!XLSの特定の列をMS SQL Serverテーブルに挿入するにはどうすればよいですか?

答えて

0

下のコードは、xlsの内容に基づいてSQL命令を含むファイルを作成します。マクロを追加して貼り付け、いくつかの変更を加えればいいだけです.ColFieldsコレクションを記入するのに、列名がテーブルのフィールド名と一致しなければならない行を追加し、そうでないものを宣言し、fileNameに値を与えます。 ..)。 その後、マクロを実行すると、必要なすべての挿入を含むファイルが作成されます。このファイルはベースで実行するだけです。

Sub Macro1() 
    Dim NbOfLines = Worksheets(Sheet1).Range("A65536").End(xlUp).Row - 5 'Not the 5 last lines 
    Dim ColFields As New Collection 'Do a while on the title line to fill the collection with wanted columns titles (do not add ignored columns) 

    Dim StartSql As String 
     StartSql = "INSERT INTO " + TableName + "(" 
     For Each loopField In ColFields 
      StartSql = StartSql + loopField + "," 
     Next 
     StartSql = Left(StartSql, Len(StartSql) - 1) 
     StartSql = StartSql + ") SELECT " 


    Dim Value As String 
    For i = 1 To NbOfLines 
    Sql = "" 
     j = 1 
     For Each loopField In ColFields 
      Value = Worksheets(SheetName).Cells(i, j).Value 
      Sql = Sql + IIf(Value = "", "NULL", "'" + Replace(Value, "'", "''") + "'") + "," 
      j = j + 1 
     Next 
     Sql = Left(Sql, Len(Sql) - 1) 
     Sql = StartSql + Sql + vbCrLf 
     Call WriteLine(Sql, FileName) 
    Next 


    End Sub 


    Public Sub WriteLine(Ligne As String, FileName As String) 

    Open FileName For Append As #1 
     Print #1, Ligne 
    Close 
    End Sub 

編集:私はそれが最善の方法(も最も美しい1)ではないと知って、私は別のDBからデータをインポートするために数週間前にそれを使用しcosをあなたにそれを与えた(しかし、私は必要な毎日ではなく一度だけ行う)。 OpenRowSetを使ってそれを行う方法があることは知っていますが、私はちょうど(このページで誰かが私に教えてくれるようにしばしば行くつもりです)わかりません。 最後に、このページを読むことをお勧めします:A Blog Page With A Solution (ここでは素晴らしい手順 'uftReadfileAsTable'が見つかります:The Procedure Code) 幸運!

+0

返信いただきありがとうございます! :)これより簡単な方法はありませんか? openrowsetを使って同じことをする方法はありますか?そして、もし私がこのファイルを使用するのであれば、どこに置くのですか?また、ファイル名は毎日異なります。その "動的な"性質をどのように説明するか?さらに、このコードを見ると、テーブルの列名とファイル内の列名が同じであることを前提にしています。つまり、実行するwhileループのためです。できるだけ早くお知らせください。 – CodingInCircles

+0

これを行うためのSQLコマンドがあれば、本当に知りたがっていると思います。それを簡単にする。ありがとう! – CodingInCircles

+0

お返事ありがとうございました!リンクを調べます。ありがとう! – CodingInCircles

関連する問題