web-dev-qa-db-ja.com

Excelからデータをインポートしてアクセスすると、外部データベースドライバー(1)から予期しないエラーが発生する

私は2010 Excel file34864 rows1387 columnsにまたがるシートを持っています。インポートウィザードを使用してAccess 2010にインポートしようとしていますが、そのシートを選択するとAccessが応答しなくなり、数秒後に

「外部データベースドライバーからの予期しないエラー(1)」

これはシートのサイズが原因であるか、それとも機能しないようにセルに何かがありますか?同じファイルからの他のシートは問題なくインポートされます。

10
user1251858

セキュリティパッチKB4041681のインストール後にこのエラーが発生する場合があります。この [〜#〜] msdn [〜#〜] エントリを参照してください。私の場合、Microsoft.Jet.OLEDB.4.0プロバイダーとMicrosoft.ACE.OLEDB.12.0が役立ちました。

12

Access 2010の仕様については、こちらをご覧ください http://office.Microsoft.com/en-us/access-help/access-2010-specifications-HA010341462.aspx

あなたのケースでは、それは列の数かもしれませんので、最初に255未満のインポートを試みてください。また、列またはデータ型(テキストを数値にインポートするなど)のデータのサイズである場合もあります。

3
Igor Turman

私もこの問題を経験し、非常にシンプルで簡単な解決策を見つけました。スプレッドシートにカスタム名が付いていることに気付いたので、それが問題の原因かどうかを確認することにしました。私はそれを「Sheet1」のデフォルト名に変更しました、そして、確かに、それはうまくいきました!

2
RHiggins

Microsoft Accessデータベースエンジン2010再頒布可能パッケージをダウンロードしてインストールし、Microsoft ExcelでDB接続文字列を変更して、ACEをプロバイダーとして使用します。

変更(例):

Provider=Microsoft.Jet.OLEDB.4.0

に:

Provider=Microsoft.ACE.OLEDB.12.0.

マイクロソフトは解決に取り組んでおり、次のリリースでアップデートを提供する予定です。

2

これを使って

OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\a.XLS;Extended Properties=Excel 8.0;")

これの代わりに

OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\a.XLS;Extended Properties=Excel 8.0;")
2
alexey

Excelシートを「カンマ区切り」の.CSVファイルに保存し、テキストファイルとしてアップロードします。私にとっては、これで問題ありません。

問題は、.xls(x)にあらゆる種類のレイアウトの問題が存在することです。これを.CSVに変換すると、レイアウト関連のマークアップがすべて削除され、「生」データに変換されます。

ではごきげんよう!

1
Tobias

RHigginsの答えに沿って:

私の場合、Jet OleDb.4.0はこのエラー(oledbconnection.open())をスローしました。ワークブック(.xls)のワークシートの名前が長すぎるためです。

1
jb_

発見された別の問題は、ExcelファイルがバイナリのExcelワークシートとして保存され、Excelワークブックとして再保存され、正常に読み込まれた場合です。

0
Bob

私は同じ問題を抱えていましたが、Windows7でセキュリティアップデートを取得した後、このエラーが発生しました。 Excelファイルが多すぎて開閉操作を実行できないため、他の方法を試すことにしました。

1- Accessが正常に機能したときに復元ポイントを返す:私の場合は機能しませんでした。ソフトウェア構成の唯一の変更はセキュリティ更新であり、セキュリティ更新が依然として問題を引き起こしているようです。

2-行、列などの削減:うまくいきませんでした。アクセスが到達しようとした最初のファイルには10k行があり、この行を3行に減らすことは解決策ではありませんでした。

3-接続文字列を変更しようとしています:私にとってはうまくいきませんでした。接続は何年も働いていますが、突然停止するのはなぜですか?いくつかのケースではそれはしますが、今回はしません。

4-私の場合、最新のセキュリティ更新プログラムをアンインストールしても問題ありませんでした。アンインストールされたセキュリティアップデートは次のとおりです。

アンインストールされたセキュリティアップデートのスクリーンショット

解決して頑張ってください。

0
Tuncermuncer

Windows 7で解決済み:

セキュリティ更新プログラムKB4041681とKB4041678の両方をアンインストールします(ExcelおよびJet/ACEプロバイダーに関連)

0
Diksha

私の場合、スプレッドシートは別のスプレッドシートにリンクされていました。元のシートのサブセットをインポートしていました。新しいシートを作成し、データを列ごとにメモ帳にコピーしてから、リンクを削除して新しいシートにコピーしました。問題を引き起こしているリンクに何かがありました。
BTW:この1つのスプレッドシートからこのデータベースへのインポートシーケンスを50回以上実行したので、これは1つのデータセットでした。データを半分にすると、データの前半(大きい方)では機能しましたが、後半では機能しませんでした。

0
Dave

この問題に対処するために私のために働いた解決策は、インポートとエクスポートが行われているときにインポート/エクスポートが実行されているExcelファイルを開くことです。

この問題は、CLOSED .xlsファイルと他の外部データベースアプリケーションの間でデータトランザクションが発生しないようにするパッチが原因で発生するようです。 Excelファイルを開いておくと、この問題に対処できます。

VBAで何が機能し、何が機能しないかを強調する以下のサンプルコードの例:

[〜#〜]失敗[〜#〜]

wbTarget.SaveAs strFilename, xlExcel8
wbTarget.Close    
ExportSheetToDB strFilename, strSheetName, "tblTemp"

[〜#〜]作品[〜#〜]

wbTarget.SaveAs strFilename, xlExcel8
ExportSheetToDB strFilename, strSheetName, "tblTemp"
wbTarget.Close
0
user2627727

私の場合(私は同じエラーがあります)、問題はAccess DBがネットワークドライブに保存されていたが不足していたことです(インポートを完了するための十分な空き領域がありません)。スペースを解放してDBを圧縮しました。エラーは再発しませんでした。

0
Maciej Lipinski

まったく同じエラーが発生しました。スプレッドシートは別のソフトウェア(SAP)から作成されました。 ExcelはOfficeで作成されていないため、読み取ることができませんでした(!?!)。 Excelで開いて保存し、Accessに読み込む必要があります。最悪のシナリオとして、数十のファイルがあり、インポートする前にVBAコードでファイルを開いたり閉じたりしたとします。

0
Séb Cô

XLSBファイルからインポートするときにこのエラーが発生し、ファイルをXLSXファイルとして保存してからインポートすると、機能するはずです。

0
bharat1010

こんにちは私も.xlsbファイルをインポートするときにこのエラーに直面しています。その後、コンテンツを別のxlsxファイルにコピーしてから、このxlsxファイルをインポートします。

0
Singaravelan