SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Apache POI HSSFによるExcelファイルの読み込み

Java EEのWebプロジェクトにおけるExcelデータの読み込み

  • X ポスト
  • このエントリーをはてなブックマークに追加

読み込んだデータを使用する

 次の例では、筆者の番組録画コレクションの情報をコンソールに出力しています。

public static void main(String args[])
{
   ArrayList<String>                colNames      = null;
   ArrayList<Map<String, Object>>   columnMaps    = null;
   ExcelReader                      excelReader   = null;
   Iterator<String>                 colNamesIt    = null;
   Iterator<Map<String, Object>>    columnMapsIt  = null;
   Map<String, Object>              columnMap     = null;
   String                           colKey        = null;
   String[]                         myRecordings  = new
      String[]{"NCIS", "DoctorWho"};

   try
   {
      excelReader = getInstance("demo_data.xls");

      for(int i=0; i < myRecordings.length; i++)
      {
         colNames     = excelReader.getColNames(myRecordings[i]);
         colNamesIt   = colNames.iterator();
         columnMaps   = excelReader.getMappedValues(myRecordings[i]);
         columnMapsIt = columnMaps.iterator();

         while(columnMapsIt.hasNext())
         {
            columnMap     = columnMapsIt.next();

            while(colNamesIt.hasNext())
            {
               colKey = colNamesIt.next();

               System.out.println(colKey+"\t"+
                  ((columnMap.get(colKey)!=null)?
                    columnMap.get(colKey):""));
            }
            System.out.println("---------------------------------");
            colNamesIt = colNames.iterator();
         }
      }
   }
   catch (Exception any)
   {
      any.printStackTrace();
   }
}

 わずかな変更で、これをHTMLテーブルとして表示することもできます。

<tr><% while(colNamesIt.hasNext()){%>
   <th><%=colNamesIt.next() %></th>
   <%}colNamesIt  = colNames.iterator();%></tr>
<% while(columnMapsIt.hasNext()){ %><tr>
<% columnMap = columnMapsIt.next(); while(colNamesIt.hasNext()){
   colKey = colNamesIt.next();
   isNeed = colKey.equals("Status")
            && columnMap.get(colKey)==null;%>
<td<%if(isNeed){ %> bgcolor="red"<%} %>>
   <%=((columnMap.get(colKey)!=null)?columnMap.get(colKey):"Need") %>
</td>
<%}colNamesIt  = colNames.iterator();%></tr>
<%} %></table></td><%}%></tr></table><%}catch
   (Exception any){any.printStackTrace();}%>
図1 HSSFによるWebテーブルの表示
図1 HSSFによるWebテーブルの表示

 フィールドの名前と値を取り出し、SQLのinsert文やupdate文を作成してもよいでしょう。

まとめ

 非技術系ユーザーがMicrosoft Excelファイル形式のデータを自分で送信できるようにすることは、開発者にとってもユーザーにとっても利益をもたらします。POIプロジェクトのHSSFおよびXSSF APIを利用すると、これをJava EEの任意のWebプロジェクトで実現できます。

 参考までに、HSSFは「Horrible Spread Sheet Format」の略で、XSSFは「XML Spread Sheet Format」の略です。前者はExcel 2007以前に対応し、後者はExcel 2007以降に対応します。大多数のユーザーはまだ以前のExcelフォーマットを使用しているので、本稿ではHSSFの例だけを掲載しました。MS Officeアップグレードの無料コピーがあれば新しいAPIもテストしたのですが、残念ながらそういうものは手に入らないようですね。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Nelson(Scott Nelson)

ポータルおよびその他の複合Webアプリケーションを専門とするシニアプリンシパルコンサルタント。個人経営の商店からFortune 500(c)に入る多国籍企業まで、大小さまざまな企業向けのアプリケーションを「正しく」かつ「早く」作成した実績を持つ。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3584 2009/03/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング