SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

japan.internet.com翻訳記事

Apache POI HSSFによるExcelファイルの作成

Java EEのWebプロジェクトにおけるExcelデータの書き出し

全体像

 参照したり読者自身の環境にコピーしたりしやすいように、この例で使ったWriterクラスの全体を示しておきます。

package com.fywservices.poi.hssf;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import org.apache.poi.hssf.usermodel.*;

public class ExcelWriterDemo
{
   private static final     String[] HEADINGS =
      new String[]{"Symbol", "Price", "PEG", "Yield", "Change"};

   public HSSFWorkbook
      createExcelWorkbook(ExcelWriterDemoData[] data)
   {
      HSSFWorkbook     excelWorkbook  = new HSSFWorkbook();
      HSSFSheet        excelSheet     = null;
      HSSFRow          sheetRow       = null;
      HSSFCell         rowCell        = null;

      ExcelWriterDemoStyles    =
         new ExcelWriterDemoStyles(excelWorkbook);
      ExcelWriterDemoStock     stock  = null;

      HSSFCellStyle     headerStyle   = styles.getHeaderStyle();
      HSSFDataFormat    dataFormat    = styles.getDataFormat();
      HSSFFont          headerFont    = styles.getHeaderFont();
      HSSFPalette       palette       = styles.getPalette();

      int               rowIndex      = 1;

      excelSheet   =
         excelWorkbook.createSheet("Today Stock Analysis");
      sheetRow = excelSheet.createRow(0);
      excelSheet.setColumnWidth(0, 6000);
      excelSheet.setColumnWidth(1, 6000);
      excelSheet.setColumnWidth(2, 2500);
      excelSheet.setColumnWidth(3, 2500);
      excelSheet.setColumnWidth(4, 3000);
      sheetRow.setHeight((short)600);
      for(int cellIndex = 0; cellIndex < HEADINGS.length;
      {
         rowCell = sheetRow.createCell(cellIndex);
         rowCell.setCellType(HSSFCell.CELL_TYPE_STRING);
         rowCell.setCellValue(new
            HSSFRichTextString(HEADINGS[cellIndex]));
         rowCell.setCellStyle(headerStyle);
      }

      for(Iterator<ExcelWriterDemoStock>   stockIt =
         data[0].getDemoDataCollection().iterator();
         stockIt.hasNext(); rowIndex++)
     {
         sheetRow  = excelSheet.createRow(rowIndex);
         stock     = stockIt.next();

         rowCell   = sheetRow.createCell(0);
         rowCell.setCellType(HSSFCell.CELL_TYPE_STRING);
         rowCell.setCellStyle(styles.getDataStringStyle());
         rowCell.setCellValue(new
            HSSFRichTextString(stock.getSymbol()));

         rowCell   = sheetRow.createCell(1);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellStyle(styles.getDataDollarStyle());
         rowCell.setCellValue(stock.getPrice());

         rowCell   = sheetRow.createCell(2);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getPeg());

         rowCell   = sheetRow.createCell(3);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getYield());

         rowCell   = sheetRow.createCell(4);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getChange());

      }
      excelSheet   =
         excelWorkbook.createSheet("Yesterday Stock Analysis");
      sheetRow     = excelSheet.createRow(0);
      excelSheet.setColumnWidth(0, 6000);
      excelSheet.setColumnWidth(1, 6000);
      excelSheet.setColumnWidth(2, 2500);
      excelSheet.setColumnWidth(3, 2500);
      excelSheet.setColumnWidth(4, 3000);
      sheetRow.setHeight((short)600);
      for(int cellIndex =
         0; cellIndex < HEADINGS.length; cellIndex++)
      {
         rowCell = sheetRow.createCell(cellIndex);
         rowCell.setCellType(HSSFCell.CELL_TYPE_STRING);
         rowCell.setCellValue(new
            HSSFRichTextString(HEADINGS[cellIndex]));
         //TODO: SHOW RICH TEXT STRING APPROACH TOO
         rowCell.setCellStyle(headerStyle);
      }
      rowIndex      = 1;
      for(Iterator<ExcelWriterDemoStock> stockIt =
         data[1].getDemoDataCollection().iterator();
         stockIt.hasNext(); rowIndex++)
      {
         sheetRow   = excelSheet.createRow(rowIndex);
         stock      = stockIt.next();

         rowCell    = sheetRow.createCell(0);
         rowCell.setCellType(HSSFCell.CELL_TYPE_STRING);
         rowCell.setCellStyle(styles.getDataStringStyle());
         rowCell.setCellValue(new
            HSSFRichTextString(stock.getSymbol()));

         rowCell    = sheetRow.createCell(1);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellStyle(styles.getDataDollarStyle());
         rowCell.setCellValue(stock.getPrice());

         rowCell    = sheetRow.createCell(2);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getPeg());

         rowCell    = sheetRow.createCell(3);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getYield());

         rowCell    = sheetRow.createCell(4);
         rowCell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
         rowCell.setCellValue(stock.getChange());
      }
      return excelWorkbook;
   }
}

まとめ

 Webアプリケーションはユーザーに情報を提示する便利な手段です。情報を提示することが第一段階だとすれば、その次の段階は情報自体を役に立つものにすることです。Web 2.0はWebベースのデータの有用性を高める1つの方法ですが、それ以前、つまり企業に有用性を売り込むためのさまざまなキャッチコピーが登場する以前から存在していた方法も数多くあります。そのような(インターネットの年表で言えば)"古い"方法のうち、見直していきたいのがApache POIプロジェクトとHSSFライブラリです。あるいは、ただの整然とレイアウトされたHTMLとMIMEタイプでも役に立つかもしれません。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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)に入る多国籍企業まで、大小さまざまな企業向けのアプリケーションを「正しく」かつ「早く」作成した実績を持つ。

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3585 2009/03/17 14:00

イベント

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

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

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

メールバックナンバー