問題
SQL 2005 フィールドにバイナリ データとして保存されている「Excel ファイル」データを解析/アクセス/抽出する方法を教えてください。
(そのため、最終的にすべてのデータを他のテーブルの他のフィールドに格納できます。)
バックグラウンド
基本的に、当社の顧客はユーザーから大量の詳細データを要求しています。残念ながら、当社のお客様は、ユーザーにいかなる種類のデータベース エクスポートも要求できません。そのため、顧客は、ユーザーがデータを入力できるように何らかの UI を提供する必要があります。すべてのユーザーに受け入れられると顧客が判断した UI は、適度に堅牢な UI を備えているため、Excel でした。そのため、顧客はこのデータを解析してデータベースに自動的に保存する必要があります。
私たちは、ユーザーがこれを一度だけ実行してから、データベースのエクスポートを要求することを顧客に納得させようとしました! ただし、顧客はユーザーのデータベース エクスポートを要求することはできません。
- 私たちの顧客は、Excel ファイルを解析するように私たちに要求しています
- 顧客のユーザーは、すべての必要なデータを入力するための「最適な」ユーザー インターフェイスとして Excel を使用しています。
- ユーザーには空白の Excel テンプレートが与えられ、入力する必要があります。
- これらのテンプレートには、固定数の一意の名前のタブがあります
- これらのテンプレートには、完了しなければならない多数の固定領域 (セル) があります。
- これらのテンプレートには、ユーザーが同じフォーマットの行を最大数千行挿入する領域もあります
- 完了すると、Excel ファイルは標準の html ファイルのアップロードによってユーザーから送信されます
- お客様は、このファイルをそのまま SQL データベースに保存します
与えられた
- 標準の Excel (「.xls」) ファイル (ネイティブ形式、コンマまたはタブで区切られていない)
- ファイルは
varbinary(max)
SQL 2005 フィールドにそのまま保存されます - Excel ファイルのデータは、行間で必ずしも「均一」であるとは限りません。つまり、1 つの列がすべて同じデータ型であると仮定することはできません (たとえば、行ヘッダー、列ヘッダー、空のセル、異なる「フォーマット」、 ...)
要件
- 完全に SQL 2005 内のコード (ストアド プロシージャ、SSIS?)
- 任意のワークシート (タブ) の値にアクセスできる
- 任意のセルの値にアクセスできる (数式データや逆参照は不要)
- セル値が行間で「均一」であると仮定してはなりません。つまり、1 つの列がすべて同じデータ型であると仮定することはできません (たとえば、行ヘッダー、列ヘッダー、空のセル、数式、異なる "フォーマット", ...)
環境設定
- ファイルシステムへのアクセスなし (一時的な .xls ファイルの書き込みなし)
- 定義された形式で値を取得します (たとえば、39876 のような生の数値ではなく、実際の日付値)