2017-04-26 150 views
1

これまでは、個人データシートのExcelファイルを入力して印刷しました。私はこれを置き換えるオンラインシステムを開発していますが、ユーザーがシステムを通じて提供した情報で完全に満たされた全く同じExcelファイルを生成するオプションもあります。だから代わりに、ユーザーがExcelファイルを埋める代わりに、ユーザーはオンラインシステムを介してそれを入力し、システムは今度は彼のためにそれを補充し、完全にダウンロードします。Apache POIのExcelコントロールの状態を処理する

しかし、そこには私が埋めることができないフィールドがあります。 Genderフィールドは、 "Male"と "Female"の2つのActiveXチェックボックスオブジェクトで構成され、Civil Statusフィールドはコンボボックスです。フィールドの値を設定し、ターゲットチェックボックスの値を確認するにはどうすればよいですか?

XSSFWorkbookの中のすべてのコントロールを取得し、それらを反復して、実際のコントロールであるかどうかを確認しますが、どこから開始するのかはわかりません。

ダウンロード可能なExcelファイルの他のすべてのフィールドは、残りの部分のみがExcelコントロールです。

答えて

2

ApachePOIによってActiveXコントロールが処理されることは期待できません。その間、私は次のようにして私の望む出力を達成しました。

  1. Excelで使用しているテンプレートを開き、フォームコントロールをActiveXコントロールからフォームコントロールに変更します。

    2

  2. そのプロパティを確認してください。フォームコントロールを右クリックし、フォーマットコントロール&hellipを選択します。このようなモーダルボックスが表示されます。 セルのリンクフィールドで

    3

  3. 、空のセルを指定します。そのセルはブール値TRUEまたはFALSEを保持し、ApachePOIによって設定された値になります。 セルリンクとしてB1を設定し、セルの値をTRUEに設定すると、参照するフォームコントロールがにチェックされます。

    同じルールがコンボボックスに適用されますが、TRUEまたはFALSEではなく、選択するオプションのインデックスを指定する必要があります。ここで

はサンプルコードです:

CellReference cr = new CellReference("B1"); 
XSSFRow row = currentActiveSheet.getRow(cr.getRow()); 
XSSFCell cell = row.getCell(cr.getCol()); 

cell.setCellValue(value); 
cell.setCellType(Cell.CELL_TYPE_BOOLEAN); 
1

ActiveXコントロールのセルのリンクを行うには:

1-デザインモード

に[開発]タブに

2 - をクリックします

3-チェックボックスを右クリックして

、4-

5変更LinkedCellの値

Properties ActiveX Controll

Apacheのポイコードが同じであるプロパティオプションに移動します:

CellReference cr = new CellReference("D30"); 
XSSFRow row = currentActiveSheet.getRow(cr.getRow()); 
XSSFCell cell = row.getCell(cr.getCol()); 
関連する問題