webdevqa.jp.net

Npgsqlを使用してExcel2013 PowerQueryからPostgreSQLデータベースに接続します

PowerQueryを使用してローカルネットワーク上のPostgreSQLデータベースからデータをプルしたい。デフォルトでは、私のバージョンのExcelには、PowerQueryリボンの[外部データの取得/データベースから]メニューに、[SQL Serverデータベースから]、[Accessデータベースから]、[SQL Server AnalysisServicesデータベースから]の3つのオプションが表示されます。 PostgreSQLはデフォルトのオプションではありません。

幸いなことに(またはそう思ったのですが)、この目的のために PostgreSQL用のNgpsqlデータプロバイダー をインストール/有効化する方法についての公式Microsoft Officeサポートページに this の記事があります。これらの指示に従いましたが、まだこれら3つのオプションしか表示されていません。 Googleでこれを行う方法に関する他の指示を見つけることができませんでした。これが私が正確にしたことです:

  1. here から_Npgsql-2.2.5-net35.Zip_をダウンロードします。これは.Net3.5用のNpgsqlの最新リリースのようです。一時フォルダに解凍します。
  2. _gacutil.exe_と_gacutil.exe.config_をVisual Studioを搭載した別のコンピューターから、このコンピューター上の別の一時フォルダー(_c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\_にあります)にコピーします。
  3. _gacutil.exe /i "<tempfolder>\Npgsql.dll"_を実行し、_Mono.Security.dll_と同じです。両方でメッセージ_Assembly successfully added to cache_を受け取りました。
  4. _C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config_ XMLファイルを編集します(v2.0.50727は.Net 3.5用です)。
    • ノード_<add description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" name="Npgsql Data Provider" invariant="Npgsql" support="FF"/>_に行_<DbProviderFactories>_を追加します。これは、バージョン番号を除いて、ヘルプページから逐語的です
    • _gacutil.exe -l | findstr Npgsql_を実行して、バージョン番号と公開鍵がインストールしたものと一致することを確認しました。
  5. これでヘルプページの説明は終わりです。メニューのデータベースオプションを変更せずに、Excelを再起動します。同じように、コンピュータを再起動します。
  6. .Net4.0バージョンで再試行することを決定します。リリースページから新しいバージョンのNpgsqlをダウンロードし、一時フォルダーに解凍します。
  7. コピーした_gacutil.exe_のバージョンは.Net3.5用でした。別のディレクトリ(c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\)で代替のものを見つけ、_-h_スイッチで実行して4.0用であることを確認し、Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020を取得しました。このマシンにコピーされました(動作させるには、他のdllを含む_1033_サブディレクトリを含める必要がありました)。
  8. 新しいdllとバージョンのgacutilで#3を繰り返します。同じ成功メッセージ。
  9. _machine.config_ファイルで#4を繰り返します。今回は、_v4.0.30319_ディレクトリにあります。
    • また、他のファイルに追加したノードをコメントアウトしました。
  10. 再起動しますが、メニューにオプションがありません。

この時点で、私はアイデアがありません。 Labkey Server をインストールしたので、これを他のいくつかのコンピューターで動作させています。これはPostgreSQLデータベースを使用し、適切なDLLを一緒にインストールしているようです。メニューには単に「PostgreSQLデータベースから」と表示されます。もちろん、このコンピューターにLabkey Serverをインストールすることもできますが、それは避けたい醜い解決策のようです。

1
JaredL

ついにこれが機能するようになりました。何らかの理由で、PostgreSQL接続を有効にするにはMicrosoftOfficeのProfessionalPlusエディションが必要なようです。このバージョンを新しいコンピューターに新たにインストールすると、デフォルトでPower Query -> From Databaseの下にPostgreSQLオプションが利用可能になりました。このオプションを選択し、ホストとデータベース名、次にユーザー名とパスワードを指定すると、Ngpsqlデータプロバイダーが見つからないというエラーが表示されました。したがって、メニューに表示されるオプションは、単にMS Officeのバージョンによるものであり、Ngpsqlプロバイダーがインストールされているかどうかによるものではありません。上記の this ページに移動し、Setup_Npgsql-2.2.5.0-r3-net40.exeインストーラーをダウンロードして実行し、Excelを再起動すると、すべてが機能しました。

3
JaredL

PostgreSQLについては特に経験はありませんが、一般にデータベースドライバーについては、開始するプログラムのアーキテクチャが32ビット(別名x86)か64ビット(別名x64)かを理解することから始めることが重要です。これらの混乱した名前からわかるように、MicrosoftはこのIMOの完全なハッシュを作成しました。

Excel 2013の場合は、[ファイル]/[アカウント]/[Excelについて]に移動し、テキストの最初の行の終わりを確認します。 Excel(他のすべてのプログラムと同様)は、同じアーキテクチャのドライバーでのみ機能します。

リンクしたPowerQueryのドキュメントページはこれを示唆していますが、「Power Queryのインストールに一致するドライバーを選択してください」と表示されると、少し誤解を招く可能性があります。実際、アーキテクチャを設定するのはExcelのインストールです。 Power Queryのアーキテクチャも、Excelのアーキテクチャに完全に依存しています。

PowerQueryページのリンクからNgpsql2.2.5 R3ファイルをダウンロードしました-はっきりしていませんが、インストールウィザードから判断すると、これは32ビットです-フォルダC:\Program Files (x86)\The Npgsql Development Team\Npgsqlにインストールすることをお勧めします

それが唯一のソースである場合、これを機能させるには32ビットのExcelインストールが必要であることをお勧めします。

1
Mike Honey