1

誰かがアルゴリズムを考え出すのを手伝ってくれることを願っています。

私はまだApache POIに非常に慣れていないため、テンプレート(Excel)を読み取り、データ自体からヘッダー/列名を抽出する方法に関するアルゴリズムを考え出すように割り当てられました。

次の点を考慮する必要があります。

  1. Excel ファイルの 1 つのシートに複数のヘッダー/列名を含めることができます。

  2. ヘッダーは、本質的に水平および/または垂直にすることができます。これは、1 つのシートに垂直ヘッダーと水平ヘッダーが混在している可能性があることを意味します。

  3. ヘッダーは必ずしもファイルの最初の行にある必要はありません。そこに紹介やバナー画像があるかもしれません。

  4. システムはあらゆる種類の Excel 形式を許可する必要があるため、セルの形式、命名規則などを制御することはできません。

  5. 一部のヘッダーは本質的に英数字です。つまり、数字も含まれています。

  6. 一部のセルは、特定のヘッダー用のスペースを作るために結合されます。

どんなアイデアや提案も大歓迎です。さらに明確な説明がある場合はお知らせください。

4

2 に答える 2

4

(私は Apache については何も知りませんが、Excel の相互運用機能については知っています)

検出するシートがあなたのものである場合は、それらのヘッダー セルに名前を付けることをお勧めします。(Excel でセルに名前を付けるには、画面の左上にフィールドがあり、通常はセル座標が表示されます (「A1」や「B2」など)。その場所に名前を入力すると、その名前でコードを介してそのセルを識別できるようになります ( 'Worksheet.Range("Name")' は、コードを介してそれらのセルを取得する場所です)。

名前を管理するには、Excel のバージョンに応じて、[挿入 - 名前] または [数式 - 名前マネージャー] に移動します。

(個人的には、ヘッダーに名前を付けずにコードを介してシートを操作することはありません。次に、「オフセット」を使用して、それらのヘッダーに対応するデータ セルを取得します。これにより、後でコードを壊さずにシートを自由に編集できます)

シートが自分のものでない場合は、データの範囲を調べる必要があります。(最後の行と最後の列) 次に、すべての列が入力され、空白の列がない最初の行を確認します。それはおそらく水平ヘッダーです。すべての行が入力されている最初の列を確認するだけでなく。それはおそらく垂直ヘッダーです。

同様に、複数の水平ヘッダーまたは垂直ヘッダーを含むシートの場合、完全に空白の行および/または列を検索して、一部のデータの後にあるヘッダーを見つけることもできます。

これらのセルのいくつかの書式設定プロパティ (たとえば、Range.Interior または Range.Font) を使用して、それらがヘッダーであるかどうかを識別できます (通常、ヘッダーにはさまざまな形式、色、​​境界線などがあります)。

数値ヘッダーがないことが確実な場合、つまり、すべてのヘッダーにテキストが含まれている場合は、セル内のデータの種類を確認してください。すべてが文字列の場合、ヘッダーの確率が高くなります。

それでも、シートが何らかのパターンに従っていない場合、それらのいずれかがコードをだまして誤った結果をもたらすことがあります。許可されている場合は、プロセスが完了した後に結果を確認するために人間による検証を追加することをお勧めします.

于 2013-03-20T12:02:52.023 に答える