10

ODBCで使用できるように、Excelでデータベーステーブルを作成する方法を知りたいです

ODBC を使用したいのですが、MS Access または Excel の 2 つのオプションがあります。

おそらくご存じのとおり、MS Access ファイルまたは Excel ファイルを ODBC ソースとして指定するには、次の手順に従う必要があります。

管理ツール -> データ ソース (ODBC) -> ユーザー DSN を選択 -> リストから [Excel ファイル] または [MS Access データベース] を選択 -> [構成] を押す -> 最後にファイル (MS Access または Excel) を次のように選択します。 ODBC ソース

MS Access では問題なく動作します。ファイルに接続して、内部で作成したすべてのテーブルを表示できます。

しかしエクセルの場合、ファイルには接続できるのですが、中に作った表が見えません。

「挿入」タブで「テーブル」を使用し、列名としていくつかのヘッダーを追加し、テーブルに意味のある名前を付けました。それはそれを行う方法ですか?

4

3 に答える 3

14

Excel ワークブックで "テーブル" データを参照するには、いくつかの方法があります。

  • ワークシート全体。
  • ワークシート上のセルの名前付き範囲。
  • ワークシート上の無名のセル範囲。

詳細については、Microsoft サポート技術情報の記事257819の「コードを使用して Excel データを選択する」セクションを参照してください。

最も簡単な方法は、データを別のシートに保持し、列名を最初の行 (セル A1 から開始) に配置し、実際のデータを行 2 から開始することです。

エクセル

テストするために、そのワークブックを指す「odbcFromExcel」という名前のユーザー DSN を作成しました...

ODBC

...そして、次の VBScript を実行して接続をテストしました。

Option Explicit
Dim con, rst, rowCount
Set con = CreateObject("ADODB.Connection")
con.Open "DSN=odbcFromExcel;"
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT * FROM [Sheet1$]", con
rowCount = 0
Do While Not rst.EOF
    rowCount = rowCount + 1
    If rowCount = 1 Then
        Wscript.Echo "Data row 1, rst(""LastName"").Value=""" &  rst("LastName").Value & """"
    End If
    rst.MoveNext
Loop
Wscript.Echo rowCount & " data rows found."
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing

結果は

C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs
Data row 1, rst("LastName").Value="Thompson"
10 data rows found.

Excel 接続の問題が解決されることを願っています。

最後のコメントとして、Excel では「数秒」かかり、Access では「約 20 ~ 25 分かかる」ことをしている場合、Access を非常に非効率的に使用していると強く思われます。方法ですが、それは別の質問のトピックです (それを追求したい場合)。

編集

データを Excel ワークブックに INSERT したい場合は可能ですが、Excel ODBC 接続のデフォルト設定は「読み取り専用」であるため、「オプション>>」ボタンをクリックしてそのチェックボックスをオフにする必要があることに注意してください。

読み取り専用

それが完了したら、次のコード...

Option Explicit
Dim con
Set con = CreateObject("ADODB.Connection")
con.Open "DSN=odbcFromExcel;"
con.Execute "INSERT INTO [Sheet1$] (ID, LastName, FirstName) VALUES (11, 'Dumpty', 'Humpty')"
con.Close
Set con = Nothing
Wscript.Echo "Done."

...実際に、提供されたデータを使用して Excel シートに新しい行を追加します。

ただし、「スニファ」アプリを Excel ODBC DSN に向けたときに選択できる「テーブル」がないという問題にはまだ対処していません。

行 1 に列見出しを含む Excel シートを作成し、それらの列全体を選択して、Excel の「定義名」を作成することもできます。次に、「スニファー」アプリがそれを選択可能な「テーブル」名として認識するかどうかを確認します。

FWIW、私は自分の Excel ワークブックのように名前を定義しましmyTableた。=Sheet1!$A:$CSELECT * FROM [myTable]

C:\Users\Gord\Documents\__tmp>cscript /nologo excelTest.vbs
Data row 1, rst("LastName").Value="Thompson"
1048576 data rows found.

ご覧のとおり、最初の「レコード」は正しく取得されましたが、有効なデータの末尾を認識せず、シート内の約 100 万行を読み取り続けました。

Excel を "ODBC データベース" として使用することはあまり良い考えではないという他のコメントに同意するので、これ以上の努力をするつもりはないのではないでしょうか。

以前の Access の使用の試みがそれほど満足のいくものではなかった理由を調べてみることを強くお勧めします。前に言ったように、Access とのやり取りで何かが本当に悪い仕事をしているように思えます。

于 2013-04-06T10:44:15.157 に答える
1

最近、いくつかのデータで同様の問題が発生しました。これを回避する方法は、データを範囲 A1:XY12345 として選択し、[名前の定義] ツールを使用して範囲に名前を付けることでした。ODBC 経由で Excel ワークブックに接続すると、この名前付き範囲は「テーブル」として表示されますが、実際に (Excel ごとに) テーブルとして定義した範囲は表示されません。

于 2014-03-28T14:50:07.913 に答える
-1

Excel ファイルの最初の行から必要な数の列を選択し、数式バーの左にある編集ボックスで名前を付けるだけです。もちろん、ファイルの各列にも名前を付けます!

于 2015-01-30T14:15:26.663 に答える