±âŸ(framework)
2018.06.29 / 21:53

Jakarta POI - Àбâ

aichatbot
Ãßõ ¼ö 230

http://poi.apache.org/index.html
http://blog.naver.com/levin01.do?Redirect=Log&logNo=100011049989


I. POI ¶õ?

ÀϹÝÀûÀ¸·Î POI°¡ ¿¢¼¿ÆÄÀÏÀ» ¾²´Â ÄÄÆÛ³ÍÆ®·Î ¾Ë·ÁÁ® ÀÖÀ¸³ª POI´Â ÇÁ·ÎÁ§Æ® À̸§ÀÔ´Ï´Ù.
Áï POI´Â Microsoft Format FileÀ» ¾×¼¼½º ÇÒ ¼ö ÀÖ´Â API¸¦ Á¦°øÇÕ´Ï´Ù. (ÇѸ¶µð·Î ÀÚ¹Ù¿¡¼­ MSÆÄÀÏÀ» ÀÐ°í ¾µ¼öÀÖµµ·Ï Áö¿øÇÕ´Ï´Ù.)

POI¾È¿¡´Â ¿©·¯ ÄÄÆÛ³ÍÆ®µéÀÌ ÀÖ½À´Ï´Ù.

¨ç POIFS 
MicrosoftÀÇ OLE2 Æ÷¸Ë Çü½ÄÀÇ ¹®¼­¸¦ ÀÚ¹Ù·Î ÀÐ°í ¾µ¼ö ÀÖ´Â ÄÄÆÛ³ÍÆ®ÀÔ´Ï´Ù
±âº»ÀûÀ¸·Î POIÀÇ ¸ðµç ÄÄÆÛ³ÍÆ®µéÀÌ POIFS¸¦ »ç¿ëÇÕ´Ï´Ù.
¨è HSSF
MicrosoftÀÇ ¿¢¼¿ÆÄÀÏÀ» ÀÐ°í ¾µ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ÄÄÆÛ³ÍÆ®ÀÔ´Ï´Ù.
¨é HWPF
MicrosoftÀÇ ¿öµåÆÄÀÏÀ» ÀÐ°í ¾µ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ÄÄÆÛ³ÍÆ®ÀÔ´Ï´Ù.
ÀÌ ÄÄÆÛ³ÍÆ®´Â µðÀÚÀÎ Ãʱâ´Ü°èÀÔ´Ï´Ù.
¨ê HPSF
MicrosoftÀÇ OLE2 Æ÷¸Ë Çü½ÄÀÇ ¹®¼­ ¼Ó¼ºÀ» ¾îÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ë ÇÒ¼ö ÀÖµµ·Ï Áö¿øÇÏ´Â ÄÄÆÛ³ÍÆ®ÀÔ´Ï´Ù.
ÇöÀç Àб⠱â´É¸¸ Á¦°øÇÕ´Ï´Ù

¿öµåÆÄÀÏÀ» Çڵ鸵 ÇÏ´Â HWPF´Â Ãʱâ´Ü°è¶ó »ç¿ëÀ» ¸øÇÏÁö¸¸ ±â´ë´Â µÇ´Â±º¿ä ^^

ps. ¿µ¾î»çÀüÀ» ã¾Æº¸´Ï poi´Â ÇÏ¿ÍÀÌÀÇ Åä¶õ ¿ä¸®¸¦ ¶æÇÏ´õ±º¿ä.
¿ì¸®³ª¶ó¸»·Î ÇÏ´Ï ÀÚÄ«¸£Å¸ Åä¶õ ÇÁ·ÎÁ§Æ® Âë µÉ¶ó³ª? ¤¾¤¾

II. ´Ù¿î·Îµå ¹× ¼³Ä¡
´Ù¿î·Îµå ¹ÞÀ¸·¯ °©½Ã´Ù~!
http://jakarta.apache.org/site/downloads/downloads_poi.cgi

ÇöÀç 2.5.1¹öÁ¯ÀÔ´Ï´Ù.
´Ù¿î¹ÞÀº ÆÄÀÏÀ» ¾ÐÃàÀ» Ç®¸é *.jar ÆÄÀϵéÀÌ ÀÖÀ»°Ì´Ï´Ù ÀÌ ÆÄÀϵéÀ» ÀÚ½ÅÀÇ ¾îÇø®ÄÉÀÌ¼Ç /lib/¿¡ º¹»çÇսôÙ

POI API http://jakarta.apache.org/poi/apidocs/index.html

Quick Guide http://jakarta.apache.org/poi/hssf/quick-guide.html

III. Formula(¼ö½Ä) Áö¿ø¿¡ °üÇØ..

¿¢¼¿À» ÀÐ°í ¾µ¶§ ¼ö½ÄÀ» Áö¿øÇÕ´Ï´Ù. 
org.apache.poi.hssf.usermodel.HSSFCellÀÇ setCellFormula("formulaString") ¸Þ½îµå´Â ½ºÇÁ·¹µå½ÃÆ®¿¡ ¼ö½ÄÀ» Ãß°¡Çϴµ¥ »ç¿ëµÇ¸ç getCellFormula() ¸Þ½îµå´Â ¼ö½ÄÀ» ´ëÇ¥ÇÏ´Â ¹®ÀÚ¿­À» Çؼ®Çϴµ¥ »ç¿ëµË´Ï´Ù. ÇÏÁö¸¸ ¿¢¼¿¿¡¼­ »ç¿ëÇÏ´Â ¼ö½ÄÀ» ¸ðµÎ »ç¿ë ÇÒ ¼ö´Â ¾ø½À´Ï´Ù.

¨ç Áö¿øµÇ´Â ºÎºÐ
-. ¼¿ ÂüÁ¶, ½ÃÆ®ÂüÁ¶, Áö¿ªÂüÁ¶
-. »ó´ëÀû ȤÀº Àý´ëÀû ÂüÁ¶ 
-. ¼ö¿¬»ê ¹× ³í¸®¿¬»ê
-. ½ÃÆ® ȤÀº ¸ÅÅ©·Î ÇÔ¼ö
-. ¼ö½Ä °á°ú°ª ¹Ýȯ

¨è ºÎºÐÀû Áö¿ø
¹®ÀÚ¿­À» Æ÷ÇÔÇÏ´Â ¼ö½ÄÀ» Çؼ®ÇÒ ¼ö´Â ÀÖÁö¸¸ ¹®ÀÚ¿­°ªÀ» ¹ÝȯÇÏ´Â ¼ö½ÄÀº ¾ÆÁ÷ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.

¨é Áö¿øµÇÁö ¾Ê´Â ºÎºÐ
-. ¹è¿­ ¼ö½Ä 
-. 1Áø¹ý ¼ö½Ä
-. 3D ÂüÁ¶
-. ¿¡·¯ °ª (cells containing #REF's or #VALUE's)

IV. ±âº»°´Ã¼

°¡Àå ±âº»À̵Ǵ °´Ã¼°¡ ´ÙÀ½ 4°¡Áö ÀÔ´Ï´Ù. À̸§¿¡¼­ ¹«¾ùÀ» ¶æÇÏ´ÂÁö ´ë°­ ÁüÀÛ ÇÒ ¼ö ÀÖ°ÚÁÕ?

¨ç HSSFWorkbook - ¿¢¼¿ ¿öÅ©ºÏÀ» ¸»ÇÕ´Ï´Ù.
¨è HSSFSheet - ¿¢¼¿ ½¬Æ®¸¦ ³ªÅ¸³À´Ï´Ù.
¨é HSSFRow - ¿¢¼¿¿¡¼­ ƯÁ¤ ÇàÀÔ´Ï´Ù.
¨ê HSSFCell - ¿¢¼¿¿¡¼­ ƯÁ¤ Çà¿¡´ëÇÑ Æ¯Á¤ ¼¿ÀÔ´Ï´Ù

À§ 4°¡Áö °´Ã¼´Â ¾ÕÀ¸·Î °è¼Ó ³ª¿Ã°Ì´Ï´Ù. ´«¿©°Ü ¹Ì¸® ºÁ µÓ½Ã´Ù. @.@

V. ¿¢¼¿ Àб⠿¹Á¦

¨ç POSFSÀ» ÀÌ¿ëÇÏ¿© ¿¢¼¿ ¿öÅ©ºÏÀ» »ý¼ºÇÕ´Ï´Ù.

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("excelfile.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fs);

¨è »ý¼ºµÈ ¿öÅ©ºÏÀ» ÀÌ¿ëÇÏ¿© ½ÃÆ® ¼ö¸¸Å­ µ¹¸é¼­ ¿¢¼¿ ½ÃÆ® Çϳª¾¿À» »ý¼ºÇÕ´Ï´Ù.

int sheetNum = workbook.getNumberOfSheets();

for (int k = 0; k < sheetNum; k++) {
   System.out.println("Sheet Number : "+k);

   System.out.println(Sheet Name : " + workbook.getSheetName(k));
   HSSFSheet sheet = workbook.getSheetAt(k);

}

¨é »ý¼ºµÈ ½ÃÆ®¸¦ ÀÌ¿ëÇÏ¿© ±× ÇàÀÇ ¼ö¸¸Å­ µ¹¸é¼­ ÇàÀ» Çϳª¾¿ »ý¼ºÇÕ´Ï´Ù.

int rows = sheet.getPhysicalNumberOfRows();

for (int r = 0; r < rows; r++) {
   HSSFRow row   = sheet.getRow(r);

   System.out.println("Row : "+row.getRowNum());

}

¨ê ¿ª½Ã³ª »ý¼ºµÈ ÇàÀ» ÀÌ¿ëÇÏ¿© ±× ¼¿ÀÇ ¼ö¸¸Å­ µ¹¸é¼­ ¼¿À» Çϳª¾¿ »ý¼ºÇÕ´Ï´Ù.

int cells = row.getPhysicalNumberOfCells();

for (short c = 0; c < cells; c++) {              <--!! short ÇüÀÔ´Ï´Ù. 255°³°¡ max!
    HSSFCell cell  = row.getCell(c);

    int celltype = cell.getCellType();

    ...

}

¼¿À» »ý¼ºÇÏ¿© ¼¿ ŸÀÔ¿¡ µû¶ó 󸮸¦ ÇØÁÖ¸é ³¡~

¨ë ÁÖÀÇ»çÇ×

¸¸¾à ¿¢¼¿¿¡¼­ A¿­¿¡ ¾Æ¹«·± °ªÀÌ ¾øÀ¸¸é ±× ÇàÀº ÀÐÁö ¸øÇÕ´Ï´Ù.
ÇàÀ» ÀÐÁö ¸øÇÏ´Ï ¼¿¶ÇÇÑ Ã³¸® ÇÒ ¼ö ¾ø½À´Ï´Ù

VI. ¿¢¼¿Àб⠻ùÇüҽº

»ùÇà µ¥ÀÌÅÍ

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö

A¿­Àº B¿­¿¡ ´ëÇÑ ¼¿ ŸÀÔÀ» ³ªÅ¸³»¸ç C¿­Àº D¿­¿¡´ëÇÑ ¼¿ ŸÀÔÀ» ³ªÅ¸³À´Ï´Ù.
Áï B:1 ÀÇ 123456ÀÇ ¼¿ ŸÀÔÀº A:1 ÀϹݠÀ̶ó´Â °ÍÀÌ¸ç ¸¶Âù°¡Áö·Î
D:1ÀÇ 2005-02-09ÀÇ ¼¿Å¸ÀÔÀº C:1 »ç¿ëÀÚÁ¤ÀÇ·Î ¼¼ÆÃÇÏ¿´´Ù´Â °Ì´Ï´Ù

ÀÌ ¿¢¼¿ÀÇ µ¥ÀÌÅ͸¦ ´ÙÀ½ ¼Ò½º·Î ÀÐ¾î º¸°Ú½À´Ï´Ù.

<%@ page
language="java"
contentType="text/html;charset=euc-kr" 
import="java.io.*,
 org.apache.poi.poifs.filesystem.POIFSFileSystem,
 org.apache.poi.hssf.record.*,
 org.apache.poi.hssf.model.*,
 org.apache.poi.hssf.usermodel.*,
 org.apache.poi.hssf.util.*" %>


<html>
<head><title>Read example</title></head>
<body>

<%

  String excelfile = "C:\\Tomcat 5.0\\webapps\\ROOT\\example.xls";

  try {
       POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(excelfile));


       //¿öÅ©ºÏÀ» »ý¼º!               

       HSSFWorkbook workbook = new HSSFWorkbook(fs);

       int sheetNum = workbook.getNumberOfSheets();


       for (int k = 0; k < sheetNum; k++) {


            //½ÃÆ® À̸§°ú ½ÃÆ®¹øÈ£¸¦ ÃßÃâ
%>

            <br><br>
            Sheet Number <%= k %> <br>
            Sheet Name <%= workbook.getSheetName(k) %><br>
<%
            HSSFSheet sheet = workbook.getSheetAt(k);
            int rows = sheet.getPhysicalNumberOfRows();


            for (int r = 0; r < rows; r++) {


                // ½ÃÆ®¿¡ ´ëÇÑ ÇàÀ» Çϳª¾¿ ÃßÃâ
                HSSFRow row   = sheet.getRow(r);
                if (row != null) { 
                     int cells = row.getPhysicalNumberOfCells();
%>
                     ROW  <%= row.getRowNum() %> <%=cells%></b><br>
<%

                     for (short c = 0; c < cells; c++) {


                         // Çà¿¡´ëÇÑ ¼¿À» Çϳª¾¿ ÃßÃâÇÏ¿© ¼¿ ŸÀÔ¿¡ µû¶ó ó¸®
                         HSSFCell cell  = row.getCell(c);
                         if (cell != null) { 
                              String value = null;

                              switch (cell.getCellType()) {

                                   case HSSFCell.CELL_TYPE_FORMULA :
                                       value = "FORMULA value=" + cell.getCellFormula();
                                        break;
                                   case HSSFCell.CELL_TYPE_NUMERIC :
                                       value = "NUMERIC value=" + cell.getNumericCellValue(); //double
                                       break;
                                  case HSSFCell.CELL_TYPE_STRING :
                                       value = "STRING value=" + cell.getStringCellValue(); //String
                                       break;
                                  case HSSFCell.CELL_TYPE_BLANK :
                                      value = null;
                                     break;
                                 case HSSFCell.CELL_TYPE_BOOLEAN :
                                     value = "BOOLEAN value=" + cell.getBooleanCellValue(); //boolean
                                    break;
                                case HSSFCell.CELL_TYPE_ERROR :
                                     value = "ERROR value=" + cell.getErrorCellValue(); // byte
                                     break;
                                default :
                             }
%>         
                          <%= "CELL col=" + cell.getCellNum() + " VALUE=" + value %> <br>
<%
                        } 
                    }
                }
            }
       }
   } catch (Exception e) {
%>
       Error occurred:  <%= e.getMessage() %>
<%   
       e.printStackTrace();
    }

%>


</body>
</html>

À§ ¼Ò½ºÀÇ °á°úÀÔ´Ï´Ù.

Sheet Number 0 
Sheet Name ÇѱÛ
ROW 0 4
CELL col=0 VALUE=STRING value=ÀϹݠ
CELL col=1 VALUE=NUMERIC value=123456.0 
CELL col=2 VALUE=STRING value=»ç¿ëÀÚÁ¤ÀÇ 
CELL col=3 VALUE=NUMERIC value=38392.0 
ROW 1 4
CELL col=0 VALUE=STRING value=¼ýÀÚ 
CELL col=1 VALUE=NUMERIC value=123456.0 
CELL col=2 VALUE=STRING value=³¯Â¥ (yy-m-d h:mm) 
CELL col=3 VALUE=NUMERIC value=38393.0 
ROW 2 4
CELL col=0 VALUE=STRING value=ÅëÈ­ 
CELL col=1 VALUE=NUMERIC value=123456.0 
CELL col=2 VALUE=STRING value=³¯Â¥ (yyÒ´ mmêÅ ddìí) 
CELL col=3 VALUE=NUMERIC value=38394.0 
ROW 3 4
CELL col=0 VALUE=STRING value=ÅؽºÆ® 
CELL col=1 VALUE=NUMERIC value=123456.0 
CELL col=2 VALUE=STRING value=³¯Â¥ (yyyy³â mm¿ù ddÀÏ) 
CELL col=3 VALUE=NUMERIC value=38395.0


°á°ú¸¦ º¸´Ï »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ¼¿ ŸÀÔ¿¡ °ü°è¾øÀÌ ¼ýÀÚ°ü·Ã ¼¿Àº POI¿¡¼­ ¸ðµÎ ¼ýÀÚ Å¸ÀÔÀ¸·Î ÀνÄÇØ ¹ö·È½À´Ï´Ù.³¯Â¥ ¿ª½Ã ÁöÁ¤ÇÑ ¼¿ ŸÀÔ¿¡ °ü°è¾øÀÌ ¸ðµÎ ¼ýÀÚ Å¸ÀÔÀ¸·Î ÀνÄÇØ ¹ö¸®´Â±º¿ä!
±×·³ ¾î¶»°Ô ³¯Â¥¸¦ Á¦´ë·Î Ç¥ÇöÇÒ±î¿ä?
³¯Â¥ ŸÀÔÀ» Á¦´ë·Î ³ªÅ¸³»±â À§Çؼ­´Â ³¯Â¥ Cell¿¡´Â getDateCellValue()¸¦ »ç¿ëÇϸé Á¤»óÀûÀ¸·Î ó¸® ÇÒ ¼ö ÀÖ½À´Ï´Ù.

SimpleDateformat sdf = new SimpleDateformat("yyyy-MM-dd hh:mm");
String date = sdf.format(cell.getDateCellValue());

µîÀ» ÀÌ¿ëÇÏ¸é ³ªÅ¸³»°íÀÚ ÇÏ´Â ¾ËÂ¥¸¦ Ç¥Çö Çϱ⠴õ ½±°ÚÁö¿ä ³ª¸ÓÁö ¼ö½ÄÀ» °¡Á® ¿Ã¶§µµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. ÀÌ·± »çÇ×À» µµÇ¥·Î ³ªÅ¸³»º¸¾Ò½À´Ï´Ù.

org.apache.poi.hssf.usermodel.HSSFCell ¿¡´Â ¸ðµÎ 6°¡ÁöÀÇ Cell TypeÀÌ Àִµ¥, cell.getCellType()À» ÇÏ¸é ±× ¼¿ÀÇ ¹Ýȯ°ªÀ» ¾Ë ¼ö ÀÖÀ¸¸ç ±×¿¡ »óÀÀÇÏ´Â static ÇʵåŸÀÔÀº ´ÙÀ½°ú °°½À´Ï´Ù.

¼¿Å¸ÀÔÇʵåŸÀÔ

ÇÔ¼ö

ÇÔ¼ö¹Ýȯ°ª
0CELL_TYPE_NUMERIC

getNumericCellValue() 
-> ¼ýÀÚ Å¸ÀÔÀ϶§
getDateCellValue()
-> ³¯Â¥ ŸÀÔÀ϶§

double

Date

1CELL_TYPE_STRING

getStringCellValue()

String
2CELL_TYPE_FORMULA

getCellFormula()
-> ¼ö½ÄÀÚü¸¦ °¡Á®¿Ã¶§
getNumericCellValue()
-> ¼ö½Ä ¹Ýȯ°ªÀÌ ¼ýÀÚÀ϶§
getStringCellValue()
-> ¼ö½Ä ¹Ýȯ°ªÀÌ ¹®ÀÚÀ϶§

String

double

String

3CELL_TYPE_BLANK

4CELL_TYPE_BOOLEAN

getBooleanCellValue()

boolean
5CELL_TYPE_ERROR

getErrorCellvalue()

byte