package poi; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFFooter; import org.apache.poi.hssf.usermodel.HSSFHeader; import org.apache.poi.hssf.usermodel.HSSFPrintSetup; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; /** * 売上一覧の作成サンプル */ public class HSSFSalesSample { /** * 売上一覧の出力 */ public void writeSalesData(){ // HSSFWorkbookの生成 HSSFWorkbook workbook = new HSSFWorkbook(); // HSSFSheetの生成 HSSFSheet sheet = workbook.createSheet(); // シート名に日本語を設定する場合はエンコーディング指定 workbook.setSheetName(0, "売上一覧", HSSFWorkbook.ENCODING_UTF_16); // 列幅設定 sheet.setColumnWidth((short) 1, (short) (256 * 15)); sheet.setColumnWidth((short) 2, (short) (256 * 20)); sheet.setColumnWidth((short) 3, (short) (256 * 20)); sheet.setColumnWidth((short) 4, (short) (256 * 20)); sheet.setColumnWidth((short) 5, (short) (256 * 15)); // タイトル表示用セルスタイルの生成 HSSFCellStyle titleCellStyle = createTitleCellStyle(workbook); // タイトル行を生成(処理年月,顧客名,担当部門,担当者名,金額) HSSFRow titleRow = sheet.createRow(1); // タイトルの設定 HSSFCell titleCell = createTitleCell(titleRow, (short) 1, titleCellStyle); titleCell.setCellValue("処理年月"); titleCell = createTitleCell(titleRow, (short) 2, titleCellStyle); titleCell.setCellValue("顧客名"); titleCell = createTitleCell(titleRow, (short) 3, titleCellStyle); titleCell.setCellValue("担当部門"); titleCell = createTitleCell(titleRow, (short) 4, titleCellStyle); titleCell.setCellValue("担当者名"); titleCell = createTitleCell(titleRow, (short) 5, titleCellStyle); titleCell.setCellValue("金額"); // データの設定 // データ部のCellStyleの生成 HSSFCellStyle stringCellStyle = createStringDataCellStyle(workbook); HSSFCellStyle currencyCellStyle = createCurrencyDataCellStyle(workbook); List salesDataList = getDataList(); for (int dataCnt = 0; dataCnt < salesDataList.size(); dataCnt++) { // データ行を作成 HSSFRow dataRow = sheet.createRow( dataCnt + 2); // データ一覧の取得 SalesData salesData = (SalesData)salesDataList.get( dataCnt); for (short columnCnt = 1; columnCnt < 6; columnCnt++) { switch (columnCnt) { case 1: // 処理年月 HSSFCell dataCell = createStringDataCell(dataRow, columnCnt, stringCellStyle); dataCell.setCellValue( salesData.getProcYear() + "年" + salesData.getProcMonth() + "月"); break; case 2: // 顧客名 dataCell = createStringDataCell(dataRow, columnCnt, stringCellStyle); dataCell.setCellValue( salesData.getClientName()); break; case 3: // 担当部門 dataCell = createStringDataCell(dataRow, columnCnt, stringCellStyle); dataCell.setCellValue( salesData.getSectionName()); break; case 4: // 担当者名 dataCell = createStringDataCell(dataRow, columnCnt, stringCellStyle); dataCell.setCellValue( salesData.getPersonName()); break; case 5: // 金額 dataCell = createStringDataCell(dataRow, columnCnt, currencyCellStyle); dataCell.setCellValue( salesData.getProceeds()); break; } } } // ヘッダ、フッタの生成 HSSFHeader header = sheet.getHeader(); header.setLeft("FILE:" + HSSFHeader.file()); header.setRight("DATE:" + HSSFHeader.date()); HSSFFooter footer = sheet.getFooter(); footer.setRight("Page:" + HSSFFooter.page() + " of " + HSSFFooter.numPages() ); // 印刷設定 HSSFPrintSetup ps = sheet.getPrintSetup(); sheet.setAutobreaks(true); ps.setFitHeight((short)1); ps.setFitWidth((short)1); // ファイルの出力 try { FileOutputStream fos = new FileOutputStream("./output/売上一覧.xls"); workbook.write(fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * タイトル行用セルスタイルの生成 * * @param workbook ワークブック * @return タイトル用セルスタイル */ private HSSFCellStyle createTitleCellStyle(HSSFWorkbook workbook) { // ワークブックからセルスタイルを作成 HSSFCellStyle titleCellStyle = workbook.createCellStyle(); // 縦、横の配置設定 titleCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 色設定 titleCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); titleCellStyle.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index); // 罫線設定(上下左右、下だけ2重線) titleCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); titleCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); return titleCellStyle; } /** * 金額用セルスタイルの生成 * * @param workbook ワークブック * @return 金額用セルスタイル */ private HSSFCellStyle createCurrencyDataCellStyle( HSSFWorkbook workbook) { HSSFCellStyle titleCellStyle = workbook.createCellStyle(); titleCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); titleCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 組み込みデータフォーマットの設定 titleCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); return titleCellStyle; } /** * 文字列用セルスタイルの生成 * * @param workbook ワークブック * @return 文字列用セルスタイル */ private HSSFCellStyle createStringDataCellStyle(HSSFWorkbook workbook) { HSSFCellStyle titleCellStyle = workbook.createCellStyle(); titleCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); titleCellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); titleCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); titleCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); return titleCellStyle; } /** * タイトル表示用セルの取得 * * @param row 行 * @param columnIndex 列番号 * @return タイトル表示用セル */ private HSSFCell createTitleCell(HSSFRow row, short columnIndex, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(columnIndex); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellStyle(cellStyle); return cell; } /** * 文字列データ表示用セルの取得 * * @param row 行 * @param columnIndex 列番号 * @return 文字列データ表示用セル */ private HSSFCell createStringDataCell(HSSFRow row, short columnIndex, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(columnIndex); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellStyle(cellStyle); return cell; } /** * 数値データ表示用セルの取得 * * @param row 行 * @param columnIndex 列番号 * @return 数値データ表示用セル */ private HSSFCell createNumericDataCell(HSSFRow row, short columnIndex, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(columnIndex); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyle); return cell; } /** * 売上データを保持するクラス */ class SalesData { // 処理年 private int procYear_; // 処理月 private int procMonth_; // 顧客名 private String clientName_; // 担当部門 private String sectionName_; // 担当者名 private String personName_; // 売上額 private double proceeds_; /** * コンストラクタ * @param year * @param month * @param clientName * @param sectionName * @param personName * @param proceeds */ public SalesData(int year, int month, String clientName, String sectionName, String personName, double proceeds) { procYear_ = year; procMonth_ = month; clientName_ = clientName; sectionName_ = sectionName; personName_ = personName; proceeds_ = proceeds; } public String getClientName() { return clientName_; } public String getPersonName() { return personName_; } public double getProceeds() { return proceeds_; } public int getProcMonth() { return procMonth_; } public int getProcYear() { return procYear_; } public String getSectionName() { return sectionName_; } } /** * 売上データ一覧の取得 * @return 売上データの一覧 */ private List getDataList() { ArrayList salesDataList = new ArrayList(); SalesData salesData = new SalesData(2005, 1, "T財団", "情報システム", "A.YOKOI", 60000); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Sジャパン", "情報システム", "J.SHIRAIWA", 2625000); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Lシステムズ", "コンサルタント", "Y.KATORI", 441393); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Aサービス", "営業", "A.TAKAHASHI", 3579187); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Tコーポレーション", "情報システム", "A.YOKOI", 798000); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Gコミュニケーション", "情報システム", "J.SHIRAIWA", 1302430); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Aテクノロジー", "コンサルタント", "Y.KATORI", 42000); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "J証券", "営業", "A.TAKAHASHI", 630000); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Iジャパン", "情報システム", "A.YOKOI", 6476190); salesDataList.add(salesData); salesData = new SalesData(2005, 1, "Mシステムズ", "情報システム", "J.SHIRAIWA", 367500); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "T財団", "コンサルタント", "Y.KATORI", 60000); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Sジャパン", "営業", "A.TAKAHASHI", 2625000); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Lシステムズ", "情報システム", "A.YOKOI", 1641150); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Aサービス", "情報システム", "J.SHIRAIWA", 2055375); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Tコーポレーション", "コンサルタント", "Y.KATORI", 1260000); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Gコミュニケーション", "営業", "A.TAKAHASHI", 787500); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Aテクノロジー", "情報システム", "A.YOKOI", 6681496); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "J証券", "情報システム", "J.SHIRAIWA", 60000); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Iジャパン", "コンサルタント", "Y.KATORI", 42747); salesDataList.add(salesData); salesData = new SalesData(2005, 2, "Mシステムズ", "営業", "A.TAKAHASHI", 393750); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "T財団", "情報システム", "A.YOKOI", 591150); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Sジャパン", "情報システム", "J.SHIRAIWA", 1260000); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Lシステムズ", "コンサルタント", "Y.KATORI", 798000); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Aサービス", "営業", "A.TAKAHASHI", 1302430); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Tコーポレーション", "情報システム", "A.YOKOI", 42000); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Gコミュニケーション", "情報システム", "J.SHIRAIWA", 630000); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Aテクノロジー", "コンサルタント", "Y.KATORI", 6476190); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "J証券", "営業", "A.TAKAHASHI", 367500); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Iジャパン", "情報システム", "A.YOKOI", 60000); salesDataList.add(salesData); salesData = new SalesData(2005, 3, "Mシステムズ", "情報システム", "J.SHIRAIWA", 2625000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "T財団", "コンサルタント", "Y.KATORI", 1641150); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Sジャパン", "営業", "A.TAKAHASHI", 798000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Lシステムズ", "情報システム", "A.YOKOI", 1302430); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Aサービス", "情報システム", "J.SHIRAIWA", 42000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Tコーポレーション", "コンサルタント", "Y.KATORI", 630000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Gコミュニケーション", "営業", "A.TAKAHASHI", 6476190); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Aテクノロジー", "情報システム", "A.YOKOI", 367500); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "J証券", "情報システム", "J.SHIRAIWA", 60000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Iジャパン", "コンサルタント", "Y.KATORI", 2625000); salesDataList.add(salesData); salesData = new SalesData(2005, 4, "Mシステムズ", "営業", "A.TAKAHASHI", 1641150); salesDataList.add(salesData); return salesDataList; } public static void main(String args[]) throws Exception { HSSFSalesSample salesSample = new HSSFSalesSample(); salesSample.writeSalesData(); } }