現在のシート データを読み取ってデータベースに挿入できる Excel 用のアドインを作成したいと考えています。データベース接続には、ファイルの場所が必要です。したがって、現在開いているファイルを送信する必要があり、ファイルパスを指定できないため、そのアプローチは適用できません。
さらに、各列のデータを SQL Server データベースのテーブルの個別の列に挿入する必要があります。役立つ提案やコードはありますか?
現在のシート データを読み取ってデータベースに挿入できる Excel 用のアドインを作成したいと考えています。データベース接続には、ファイルの場所が必要です。したがって、現在開いているファイルを送信する必要があり、ファイルパスを指定できないため、そのアプローチは適用できません。
さらに、各列のデータを SQL Server データベースのテーブルの個別の列に挿入する必要があります。役立つ提案やコードはありますか?
VBA を使用して、Excel で Excel アドインを作成できます。VBA エディタで Microsoft ActiveX Data Objects (ADO) への参照を追加する必要があります ([ツール] -> [参照] を使用)。そうすれば、Connection、Command、RecordSet などのオブジェクトに完全にアクセスできるようになります。
これを行っていた場合、フォームを使用してインポートバッチごとにデータベース/テーブル/列をユーザーに指定してもらいます。次に、Connection オブジェクトを作成し、データの各行をループして、行のデータに基づいて挿入コマンドを作成および実行します。
完了したら、完成したワークブックを他のユーザーに配布できる Excel アドイン ファイル (xla) として保存するオプションがあります。
挿入コードがどのように見えるかのサンプルを次に示します。
Dim conn As New Connection
Dim comm As New Command
conn.Open YourConnectionString
Set comm.ActiveConnection = conn
comm.CommandText = "insert <table> (<column1>, <column2>, <column3>, ..., <columnN>) values (" + <value1> + ", '" + <value2> + "', " + <value3> + ", '" + <valueN>+ "')"
comm.Execute
conn.Close
Excel内で実行する必要がありますか?これは、Excel用のOleDbプロバイダーとSQL用の別のプロバイダーを指定する単純なADO.NETアプリで実行できます。
テクニックに関する記事はたくさんあります。SQL Server Integration Services(SSIS、以前はDTSと呼ばれていました)の最小限のコードで同じことを行うことができます。これに関する古い記事があります。
Excel内からこれを行うこともできます。VS2005では、VSTO-Visual Studio ToolsforOfficeを使用します。VSTOの機能はVS2008Professionalに含まれていると思います。VS + VSTO(またはVS2008)を使用すると、Excelを含むOfficeアプリのアドインを作成できます。アドイン内では、System.Data.SqlClientを使用してSQL Serverにデータを挿入するなど、コードで好きなことを行うことができます。