約1000行約15列のExcelスプレッドシートがあります。私がやりたいのは、このデータをテーブルにインポートすることですが、選択的にインポートします。シートの最後から約5行までの5行目以降のデータが必要です。これは、行数が異なる可能性があるためですが、スプレッドシートの行数に関係なく、最後の4〜5行は必要ないと確信しています。さらに、Col1-Col5、Col7-Col9、Col12-Col15のように、いくつかの列のみを挿入したいと思います。これを達成するために使用できるコマンド/コマンドのシーケンスは1つありますか?できるだけ早く教えてください。どうもありがとう!
1 に答える
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
編集:私はそれが最良の方法(または最も美しい方法)ではないことを知っています、私はあなたにそれを与えましたcos'私は数週間前にDBから別のデータにデータをインポートするためにそれを使用しました毎日)。私はまた、あなたがそれについて正しいOpenRowSetでそれを行う方法があることを知っていますが、私は方法がわかりません(誰かが私に教えてくれることを願ってこのページに頻繁に行きます)。最後に、このページを読むことをお勧めします:解決策のあるブログページ (ここに素晴らしい手順'uftReadfileAsTable'があります:手順コード)幸運を祈ります!
于 2011-03-08T11:46:31.000 に答える