3

テーブルを SQL SERVER 2012 から Excel 2007 ブックにエクスポートしようとしています。

OLE DB Source -> Excel Destination からの単純なタスクは完全に機能します。

[POD Assignment] というフィールドがあり、[POD Assignment] が「UNKNOWN」の場合はワークブックの 1 つのシートにエクスポートし、そうでない場合は別のシートにエクスポートします。

OLE DB ソースを条件付き分割にリンクします。

条件が「[POD Assignment] == "UNKNOWN"」である「Unknowns」という名前の出力があります。出力「Unknowns」を Excel の宛先にリンクします。

この時点で、パッケージを実行すると、すべてが正常に機能します。行はワークブックに正しくエクスポートされ、カウントも正しくなりました。ここに見られるように:

[] http://imgur.com/iKcJCfY,rHnW8ax#0

ここで、条件付き分割を、出力が条件付き分割のデフォルト出力である 2 番目の Excel 宛先に接続します。Excel の 2 番目の宛先は、最初の宛先とまったく同じ Excel 接続を使用します。そして、すべてのデータは同じワークブックの別のシートにエクスポートされるはずです。

これを実行すると失敗します。ここに見られるように:

[]: http://imgur.com/iKcJCfY,rHnW8ax#1

タスクはエラーで途中で中止されます。

次のエラー コードが表示されます。

[Excel 宛先 1 [101]] エラー: SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x80004005。OLE DB レコードが利用可能です。ソース: "Microsoft Office Access データベース エンジン" Hresult: 0x80004005 説明: "名前付き範囲を拡張できません。".

[Excel 宛先 1 [101]] エラー: SSIS エラー コード DTS_E_INDUCEDTRANSFORMFAILUREONERROR。エラー コード 0xC020907B が発生したため、"Excel Destination 1.Inputs[Excel Destination Input]" が失敗し、"Excel Destination 1.Inputs[Excel Destination Input]" のエラー行の処理がエラー時の失敗を示しています。指定されたコンポーネントの指定されたオブジェクトでエラーが発生しました。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。

[SSIS.Pipeline] エラー: SSIS エラー コード DTS_E_PROCESSINPUTFAILED。入力「Excel Destination Input」(112) の処理中に、コンポーネント「Excel Destination 1」(101) の ProcessInput メソッドがエラー コード 0xC0209029 で失敗しました。識別されたコンポーネントが ProcessInput メソッドからエラーを返しました。エラーはコンポーネントに固有のものですが、エラーは致命的であり、データ フロー タスクの実行が停止します。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。[OLE DB ソース [188]] エラー: バッファーの行セットの末尾を設定すると、エラー コード 0xC0047020 で失敗しました。[SSIS.Pipeline] エラー: SSIS エラー コード DTS_E_PRIMEOUTPUTFAILED。OLE DB ソースの PrimeOutput メソッドがエラー コード 0xC0209017 を返しました。パイプライン エンジンが PrimeOutput() を呼び出したときに、コンポーネントがエラー コードを返しました。エラー コードの意味はコンポーネントによって定義されますが、エラーは致命的であり、パイプラインは実行を停止しました。これより前に、失敗に関する詳細情報を含むエラー メッセージが投稿される場合があります。

どんな助けでも大歓迎です。これは私を夢中にさせています。条件付き分割に 1 つの宛先を使用すると完全に機能する理由がわかりませんが、2 番目の宛先を追加するとすべてが失敗します。

4

4 に答える 4

3

この正確なエラーメッセージがありました。私は他の答えで提案を試みましたが、どれもうまくいきませんでした。

私の問題は、同時に異なるタブに書き込もうとしていたことであることが判明しました。

同じデータフロー タスクのすべてのタブに書き込む代わりに、各タブを独自のデータフローに配置して、各書き込みが一度に 1 つずつ行われるようにしました。これで問題は解決しました。

于 2015-10-12T14:59:26.933 に答える
2

Excel の宛先にデータが含まれていないことを確認します (該当する場合はヘッダー行を除く)。

エラーが発生しましたがHresult: 0x80004005 Description: "Cannot expand named range."、問題はすぐにはわかりませんでした:

  • 既存Union Allの 2 つの Excel ファイルを 1 つの Excel ファイルにしました
  • あるソースの最初の列は数値でした。もう 1 つのソースは英数字でした。
  • ソースの最初の列を新しいものに変更し、Derived Column英数字になりました。
  • (宛先のクリーンアップを怠りました - データの最初の数行が数値であった既存のデータがまだありました)
  • Union All機能しましたが、宛先は失敗しました (ソース ファイルにも赤い X が表示されました)。

Excelファイルをヘッダー行だけに「切り捨てる」ことで修正しました。(そして、列Aのいくつかのサンプル行を数値に戻すことで、エラーを再現できました)。空の Excel ファイル テンプレートを使用して、最初に宛先を上書きすると思います (もっと簡単な方法がない場合は?)

于 2013-04-24T05:09:41.590 に答える
1

出力先として使用すると、Excel ファイルが書き込みロックされるため、同じブックから異なるシートに同時に書き込むことはできません

于 2016-10-20T21:40:56.460 に答える