Apache POI version 3.0.1 の練習1

準備

  1. Apache POI (http://poi.apache.org/)
    1. download (http://www.apache.org/dyn/closer.cgi/poi/release/)
    2. bin を選択
    3. poi-bin-3.0.1-FINAL-20070705.zip をダウンロード
    4. jar xvf poi-bin-3.0.1-FINAL-20070705.zip で解凍
    5. poi-3.0.1-FINAL\poi-3.0.1-FINAL-20070705.jar を使用する
      1. eclipseを起動
      2. [ファイル]-[新規]-[プロジェクト]
        1. [Javaプロジェクト]
        2. [次へ]
        3. [プロジェクト名:test]
        4. [次へ]
        5. [ライブラリー]タブ-[外部JARの追加]-[poi-3.0.1-FINAL-20070705.jar]
        6. [終了]
      3. [ファイル]-[新規]-[パッケージ]
        1. [jp.papa33]
        2. [終了]
      4. [ファイル]-[新規]-[クラス]
        1. [名前:SamplePoi01]
        2. [public static void main(Stirng[] args:チェック]
        3. [終了]
  2. HSSF Quick Guide (http://poi.apache.org/hssf/quick-guide.html)
    1. 「// TODO 自動生成されたメソッド・スタブ」を書き換える

HSSFの構成

HSSF(Excel)オブジェクトの操作は、ブック・シート・行・セル・文字列から構成される。Excelの構造を直観的に表しているそうだ・・・

  • HSSFWorkbook(ブックを操作するクラス)
    • HSSFSheet(シートを操作するクラス)
      • HSSFRow(行を操作するクラス)
        • HSSFCell(セルを操作するクラス)
          • HSSFRichTextString(文字列を操作するクラス)

まずは、Excelファイルの作成

package jp.papa33;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class SamplePoi01 {
  public static void main(String[] args) {
    // 新規ワークブックを作成
    HSSFWorkbook book = new HSSFWorkbook();
    // 新規ワークシートを作成
    HSSFSheet sheet1 = book.createSheet("シート1");
    HSSFSheet sheet2 = book.createSheet("シート2");
    // 作成したシート名を変更
    book.setSheetName(1, "シート21");
    // 行オブジェクトの作成(行は0からスタート)
    HSSFRow row1 = sheet1.createRow(0);
    HSSFRow row2 = sheet2.createRow(1);
    // セルオブジェクトの作成(セルは0からスタート)
    HSSFCell cella1 = row1.createCell((short)0);
    HSSFCell cellb2 = row2.createCell((short)1);
    // セルに値を設定
    HSSFRichTextString richString1
    = new HSSFRichTextString("A1のセル");
    cella1.setCellValue(richString1);
    HSSFRichTextString richString2 
    = new HSSFRichTextString("B2のセル");
    cellb2.setCellValue(richString2);
    // 作成したワークブックを保存
    FileOutputStream fileOut = null;
    try {       
      fileOut = new FileOutputStream("C:\\SamplePoi01.xls");
      book.write(fileOut);
      System.out.println(
          "Excelファイルの作成が完了しました!");
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      return;
    } catch (IOException e) {
      e.printStackTrace();
      return;
    } finally {
      try {
        fileOut.close(); 
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

戸惑った点

1.エンコーディング設定(ENCODING_UTF_16)は不要になった

org.apache.poi.hssf.usermodel -> HSSFCell -> setEncoding(short encoding)

setEncoding(short encoding)
Deprecated. As of 3-Jan-06 POI now automatically handles Unicode without forcing the encoding.

2.setCellValueするには、HSSFRichTextStringしておく (メソッド setCellValue(String) は型 HSSFCell で使用すべきではありません。)

getString CellValue()
Deprecated. Use the HSSFRichTextString return

新規作成(シート10、列10、行10のセルに値設定)

package jp.papa33;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class SamplePoi02 {
  public static void main(String[] args) {
    // 新規ワークブックを作成
    HSSFWorkbook book = new HSSFWorkbook();
    //新規ワークシートを作成
    for(int i = 0; i < 10; i++) {
      HSSFSheet sheet = book.createSheet("シート" + i);
      // 行オブジェクトの作成(行は0からスタート)
      for (int j = 0; j < 10; j++) {
        HSSFRow   row   = sheet.createRow(j);
        // セルオブジェクトの作成,値を設定(セルは0からスタート)
        for(int k = 0; k < 10; k++) {
          HSSFCell  cell  = row.createCell((short)k);
          HSSFRichTextString richString
          = new HSSFRichTextString("セル" + i + j + k);
          cell.setCellValue(richString);
        }
      }
    }
    // 作成したワークブックを保存
    FileOutputStream fileOut = null;
    try {       
      fileOut = new FileOutputStream("C:\\SamplePoi02.xls");
      book.write(fileOut);
      System.out.println(
          "Excelファイルの作成が完了しました!");
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      return;
    } catch (IOException e) {
      e.printStackTrace();
      return;
    } finally {
      try {
        fileOut.close(); 
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

ファイルの読み込み

上記で作成したSamplePoi02.xlsを読み込み、セルの内容を表示する

package jp.papa33;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.poifs.filesystem.POIFSFileSystem;

public class SamplePoi03 {
  public static void main(String[] args) {
    POIFSFileSystem fs;
    HSSFWorkbook book = null;
    
    try {
      fs = new POIFSFileSystem(
          new FileInputStream("C:\\SamplePoi02.xls"));
      book = new HSSFWorkbook(fs);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      return;
    } catch (IOException e) {
      e.printStackTrace();
      return;
    }
    
    for(int i = 0; i < book.getNumberOfSheets(); i++) {
      HSSFSheet sheet = book.getSheetAt(i);
      System.out.println("*" + book.getSheetName(i));
      for(int j = 0; j <= sheet.getLastRowNum(); j++) {
        HSSFRow row = sheet.getRow(j);
        for(int k = 0; k <= row.getLastCellNum(); k++) {
          HSSFCell cell = row.getCell((short) k);
          HSSFRichTextString richStr = 
            cell.getRichStringCellValue();
          System.out.print(richStr + " ");
        }
        System.out.println();
      }
    }
  }
}

実行結果

*シート0
セル000 セル001 セル002 セル003 セル004 セル005 セル006 セル007 セル008 セル009
セル010 セル011 セル012 セル013 セル014 セル015 セル016 セル017 セル018 セル019
セル020 セル021 セル022 セル023 セル024 セル025 セル026 セル027 セル028 セル029
セル030 セル031 セル032 セル033 セル034 セル035 セル036 セル037 セル038 セル039
セル040 セル041 セル042 セル043 セル044 セル045 セル046 セル047 セル048 セル049
セル050 セル051 セル052 セル053 セル054 セル055 セル056 セル057 セル058 セル059
セル060 セル061 セル062 セル063 セル064 セル065 セル066 セル067 セル068 セル069
セル070 セル071 セル072 セル073 セル074 セル075 セル076 セル077 セル078 セル079
セル080 セル081 セル082 セル083 セル084 セル085 セル086 セル087 セル088 セル089
セル090 セル091 セル092 セル093 セル094 セル095 セル096 セル097 セル098 セル099
*シート1
セル100 セル101 セル102 セル103 セル104 セル105 セル106 セル107 セル108 セル109
セル110 セル111 セル112 セル113 セル114 セル115 セル116 セル117 セル118 セル119
セル120 セル121 セル122 セル123 セル124 セル125 セル126 セル127 セル128 セル129
セル130 セル131 セル132 セル133 セル134 セル135 セル136 セル137 セル138 セル139
セル140 セル141 セル142 セル143 セル144 セル145 セル146 セル147 セル148 セル149
セル150 セル151 セル152 セル153 セル154 セル155 セル156 セル157 セル158 セル159
セル160 セル161 セル162 セル163 セル164 セル165 セル166 セル167 セル168 セル169
セル170 セル171 セル172 セル173 セル174 セル175 セル176 セル177 セル178 セル179
セル180 セル181 セル182 セル183 セル184 セル185 セル186 セル187 セル188 セル189
セル190 セル191 セル192 セル193 セル194 セル195 セル196 セル197 セル198 セル199
*シート2
セル200 セル201 セル202 セル203 セル204 セル205 セル206 セル207 セル208 セル209
セル210 セル211 セル212 セル213 セル214 セル215 セル216 セル217 セル218 セル219
セル220 セル221 セル222 セル223 セル224 セル225 セル226 セル227 セル228 セル229
セル230 セル231 セル232 セル233 セル234 セル235 セル236 セル237 セル238 セル239
セル240 セル241 セル242 セル243 セル244 セル245 セル246 セル247 セル248 セル249
セル250 セル251 セル252 セル253 セル254 セル255 セル256 セル257 セル258 セル259
セル260 セル261 セル262 セル263 セル264 セル265 セル266 セル267 セル268 セル269
セル270 セル271 セル272 セル273 セル274 セル275 セル276 セル277 セル278 セル279
セル280 セル281 セル282 セル283 セル284 セル285 セル286 セル287 セル288 セル289
セル290 セル291 セル292 セル293 セル294 セル295 セル296 セル297 セル298 セル299
*シート3
セル300 セル301 セル302 セル303 セル304 セル305 セル306 セル307 セル308 セル309
セル310 セル311 セル312 セル313 セル314 セル315 セル316 セル317 セル318 セル319
セル320 セル321 セル322 セル323 セル324 セル325 セル326 セル327 セル328 セル329
セル330 セル331 セル332 セル333 セル334 セル335 セル336 セル337 セル338 セル339
セル340 セル341 セル342 セル343 セル344 セル345 セル346 セル347 セル348 セル349
セル350 セル351 セル352 セル353 セル354 セル355 セル356 セル357 セル358 セル359
セル360 セル361 セル362 セル363 セル364 セル365 セル366 セル367 セル368 セル369
セル370 セル371 セル372 セル373 セル374 セル375 セル376 セル377 セル378 セル379
セル380 セル381 セル382 セル383 セル384 セル385 セル386 セル387 セル388 セル389
セル390 セル391 セル392 セル393 セル394 セル395 セル396 セル397 セル398 セル399
*シート4
セル400 セル401 セル402 セル403 セル404 セル405 セル406 セル407 セル408 セル409
セル410 セル411 セル412 セル413 セル414 セル415 セル416 セル417 セル418 セル419
セル420 セル421 セル422 セル423 セル424 セル425 セル426 セル427 セル428 セル429
セル430 セル431 セル432 セル433 セル434 セル435 セル436 セル437 セル438 セル439
セル440 セル441 セル442 セル443 セル444 セル445 セル446 セル447 セル448 セル449
セル450 セル451 セル452 セル453 セル454 セル455 セル456 セル457 セル458 セル459
セル460 セル461 セル462 セル463 セル464 セル465 セル466 セル467 セル468 セル469
セル470 セル471 セル472 セル473 セル474 セル475 セル476 セル477 セル478 セル479
セル480 セル481 セル482 セル483 セル484 セル485 セル486 セル487 セル488 セル489
セル490 セル491 セル492 セル493 セル494 セル495 セル496 セル497 セル498 セル499
*シート5
セル500 セル501 セル502 セル503 セル504 セル505 セル506 セル507 セル508 セル509
セル510 セル511 セル512 セル513 セル514 セル515 セル516 セル517 セル518 セル519
セル520 セル521 セル522 セル523 セル524 セル525 セル526 セル527 セル528 セル529
セル530 セル531 セル532 セル533 セル534 セル535 セル536 セル537 セル538 セル539
セル540 セル541 セル542 セル543 セル544 セル545 セル546 セル547 セル548 セル549
セル550 セル551 セル552 セル553 セル554 セル555 セル556 セル557 セル558 セル559
セル560 セル561 セル562 セル563 セル564 セル565 セル566 セル567 セル568 セル569
セル570 セル571 セル572 セル573 セル574 セル575 セル576 セル577 セル578 セル579
セル580 セル581 セル582 セル583 セル584 セル585 セル586 セル587 セル588 セル589
セル590 セル591 セル592 セル593 セル594 セル595 セル596 セル597 セル598 セル599
*シート6
セル600 セル601 セル602 セル603 セル604 セル605 セル606 セル607 セル608 セル609
セル610 セル611 セル612 セル613 セル614 セル615 セル616 セル617 セル618 セル619
セル620 セル621 セル622 セル623 セル624 セル625 セル626 セル627 セル628 セル629
セル630 セル631 セル632 セル633 セル634 セル635 セル636 セル637 セル638 セル639
セル640 セル641 セル642 セル643 セル644 セル645 セル646 セル647 セル648 セル649
セル650 セル651 セル652 セル653 セル654 セル655 セル656 セル657 セル658 セル659
セル660 セル661 セル662 セル663 セル664 セル665 セル666 セル667 セル668 セル669
セル670 セル671 セル672 セル673 セル674 セル675 セル676 セル677 セル678 セル679
セル680 セル681 セル682 セル683 セル684 セル685 セル686 セル687 セル688 セル689
セル690 セル691 セル692 セル693 セル694 セル695 セル696 セル697 セル698 セル699
*シート7
セル700 セル701 セル702 セル703 セル704 セル705 セル706 セル707 セル708 セル709
セル710 セル711 セル712 セル713 セル714 セル715 セル716 セル717 セル718 セル719
セル720 セル721 セル722 セル723 セル724 セル725 セル726 セル727 セル728 セル729
セル730 セル731 セル732 セル733 セル734 セル735 セル736 セル737 セル738 セル739
セル740 セル741 セル742 セル743 セル744 セル745 セル746 セル747 セル748 セル749
セル750 セル751 セル752 セル753 セル754 セル755 セル756 セル757 セル758 セル759
セル760 セル761 セル762 セル763 セル764 セル765 セル766 セル767 セル768 セル769
セル770 セル771 セル772 セル773 セル774 セル775 セル776 セル777 セル778 セル779
セル780 セル781 セル782 セル783 セル784 セル785 セル786 セル787 セル788 セル789
セル790 セル791 セル792 セル793 セル794 セル795 セル796 セル797 セル798 セル799
*シート8
セル800 セル801 セル802 セル803 セル804 セル805 セル806 セル807 セル808 セル809
セル810 セル811 セル812 セル813 セル814 セル815 セル816 セル817 セル818 セル819
セル820 セル821 セル822 セル823 セル824 セル825 セル826 セル827 セル828 セル829
セル830 セル831 セル832 セル833 セル834 セル835 セル836 セル837 セル838 セル839
セル840 セル841 セル842 セル843 セル844 セル845 セル846 セル847 セル848 セル849
セル850 セル851 セル852 セル853 セル854 セル855 セル856 セル857 セル858 セル859
セル860 セル861 セル862 セル863 セル864 セル865 セル866 セル867 セル868 セル869
セル870 セル871 セル872 セル873 セル874 セル875 セル876 セル877 セル878 セル879
セル880 セル881 セル882 セル883 セル884 セル885 セル886 セル887 セル888 セル889
セル890 セル891 セル892 セル893 セル894 セル895 セル896 セル897 セル898 セル899
*シート9
セル900 セル901 セル902 セル903 セル904 セル905 セル906 セル907 セル908 セル909
セル910 セル911 セル912 セル913 セル914 セル915 セル916 セル917 セル918 セル919
セル920 セル921 セル922 セル923 セル924 セル925 セル926 セル927 セル928 セル929
セル930 セル931 セル932 セル933 セル934 セル935 セル936 セル937 セル938 セル939
セル940 セル941 セル942 セル943 セル944 セル945 セル946 セル947 セル948 セル949
セル950 セル951 セル952 セル953 セル954 セル955 セル956 セル957 セル958 セル959
セル960 セル961 セル962 セル963 セル964 セル965 セル966 セル967 セル968 セル969
セル970 セル971 セル972 セル973 セル974 セル975 セル976 セル977 セル978 セル979
セル980 セル981 セル982 セル983 セル984 セル985 セル986 セル987 セル988 セル989
セル990 セル991 セル992 セル993 セル994 セル995 セル996 セル997 セル998 セル999