0

私は、for each ループを使用してディレクトリ内の Excel ファイルを反復処理し、データ フロー タスクを使用してそれらをインポートする SSIS パッケージに取り組んでいます。

私が抱えている問題は、私が一緒に働いているプロジェクト マネージャーが、ユーザーが常に構造に従うとは考えていないことです。したがって、ファイルがフォルダー内にあり、パッケージがそれをインポートしようとしたが、スプレッドシートに列がないか、余分な列が生成され、もちろんエラーが発生した場合。パッケージを失敗させないようにタスクを設定していますが。パッケージは実際に失敗し、他のファイルはインポートされません。

では、スプレッドシートの形式が正しくないか、エラーがパッケージの実行に失敗するのを防ぐ最も簡単な方法は何ですか? 上記の手順を実行した後、ファイルコピータスクを使用してファイルを「失敗」フォルダーに移動します。次に、スプ​​レッドシートの処理を続けます。

4

3 に答える 3

2

Microsoft Project ファイルのリストを反復処理し、レコードをデータベースにインポートすることを除いて、あなたと同様の SSIS パッケージをセットアップしました。Foreach ループ コンテナー内では、最初にファイルが存在するかどうかを確認するためのチェックが実行されます。FileName の文字列変数とブール変数 bolFileExists をスクリプトに渡しています。ファイルが正しくフォーマットされているかどうかも確認しようとされていることは承知しており、以下のスクリプト タスク コードのようなものを適用できるのではないかと推測しています。

    public void Main()
    {
        if (File.Exists(Dts.Variables["FileName"].Value.ToString()) )
        {
            Dts.Variables["bolFileExists"].Value = true;
        }
        else
        {
            Dts.Variables["bolFileExists"].Value = false;
        }
    }

ここから先は 2 つのパスになります。1 つ目は、「@bolFileExists==True」という式を適用してから、インポート プロセスを実行します。もう 1 つは、「@bolFileExists==False」という式を適用し、そのファイルをスキップして、次のファイルを処理できるようにします。テーブル駆動型の SSIS パッケージでは、両方のオプションについて、インポート ステータスは、インポートされるファイルを一覧表示するテーブルで定義されます。インポートされたファイルが 40 近くあります。これにより、クエリを実行して、不足しているファイルがないかどうかを判断し、プロセスの完了後に送信される自動メールでそのクエリを適用できます。

不適切なフォーマットについては、ワークシートの 1 つの指示に従うためのテンプレートをユーザーに提供することをお勧めします。その後、対象のワークシートに含まれる列のリストまたは数を収集するステージング テーブルまたは SQL を適用してみてください。ここで行うアプローチは、取得する情報の複雑さによって異なります。私の SSIS パッケージでも、インポート後もデータがオフになっている可能性があります。この場合、最初にチェックが実行される一時的なステージング テーブルにインポートし、関心のある基準を満たすものだけが MERGE を使用して最終決定テーブルに正規化されます。

ご不明な点がございましたら、お知らせください。これが問題の一部に役立つことを願っています。

于 2012-12-12T23:00:39.050 に答える
0

列の精度などの検証について話している場合は、Excelファイルを開き、各列を調べて内容が正しいことを確認するスクリプトタスクを実行できます。これは、OpenXMLまたはInterOp.Office参照を使用して実行できます。

Excelバージョンについて話している場合は、ファイルの拡張子を調べるスクリプトタスクを実行できます(ただし、ファイルの名前を変更した場合、これは実際には役に立ちません)。

于 2012-12-13T15:06:55.617 に答える
0

基礎となるデータベース スキーマが参照されている SO に関する 35 の記事があります: https://stackoverflow.com/search?q=GetOleDbSchemaTable

XLS ファイルへの基になる接続を OleDB ソースとして使用するスキーマ検出ステップを使用して、Kosh のスクリプトを強化してみてください。フィールドのリストを抽出したら、必要なすべてのフィールドが正しい順序で存在するかどうかを確認できます。

于 2012-12-13T07:09:07.857 に答える