반응형

Apache POI

 * 개요 : 실무에서 엑셀저장 기능을 사용하는 경우 금액이 입력되어야 하는 경우가 있다. 이 때에 가독성이 좋도록 천의 자리 마다 콤바를 추가하는데 아래 방법을 참고한다.

 

* 방법

CellStyle cs = workbook.createCellStyle();
DataFormat df = workbook.createDataFormat();
cs.setDataFormat(df.getFormat("#,##0"));
...
row.getCell(0).setCellStyle(cs);   // 본인의 환경에 맞춰서 스타일을 적용한다

 

 * 도움을 받은 곳

java - Apache POI changing cell format from dot to comma - Stack Overflow

 

Apache POI changing cell format from dot to comma

I'm using Apache POI to generate excel files. I'm trying to format my cells to display no decimal cases and use dot as the thousand separator. (187103,915 -> 187.103). If I apply the format #.##0

stackoverflow.com

 

반응형
반응형

 

* 개요 : 스프링을 이용하여 엑셀 저장 기능 구현 시 아래 그림 [A]와 같이 여러줄의 내용이 한줄에 나와서 사용자가 높이를 조절해야만 [B]처럼 깔끔하게 나와 번거로운 상황이다.

 

Apache POI 구현 설명

 

* 해결 방법 : 하단 코드와 같이 row의 스타일을 적용하는 부분 아래에 setWrapText(true) 옵션을 추가한다.

                     적용하는 컬럼 1개만 적용해도 모든 row에 적용된다.

                     본인 소스에 맡게 수정한다.

import org.apache.poi.ss.usermodel.Row;
...

Row row = null;



...
...

row.getCell(5).getCellStyle(left_style);   // 스타일을 적요하는 부분
row.getCell(5).getCellStyle().setWrapText(true);   // 자동 줄 바꿈 기능

...

 

 * 도움을 받은 곳 :

https://goni9071.tistory.com/5

 

apache poi 엑셀 병합된 셀 자동 높이 조절하기

apache poi 로 엑셀작업을 하다보면 셀(Cell) 크기 문제로 어려움을 겪는 경우가 많이 있습니다. Cell 세로 높이에 대해서 알아보겠습니다. 가로 크기를 자동으로 해놓으면 내용에 따라 가로 넓이가

goni9071.tistory.com

 

반응형
반응형

 · 개요 : 자바에서 엑셀다운로드 구현 시

           병합한 셀의 테두리 적용이 적상적으로 되지 않는 경우

 · 해결방법 : 

   1. 병합이 되는 셀에도 cell을 추가하고 style을 적용한다

      ex) row.createCell(1);

          row.getCell(1).setCellStyle(style);

      - 병합하는 셀만 style을 적용하지 말고 병합되는 셀에도 style이 적용되어야 한다.

        없으면 추가한다.

 

   2. 셀병합 항목을 셀생성, 스타일 아래에 배치한다.

 

 · 도움을 받은 곳 : https://hidy23.tistory.com/67

 

POI - 셀병합과 병합된 셀의 스타일( border)

셀에서의 개행문자 사용하기 HSSFWorkbook wbwb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); HSSFRow r = null; HSSFCell c = null; HSSFCellStyle cs = wb.createCellStyle(); HSSFFont f = wb.creat..

hidy23.tistory.com

 

반응형
반응형

/**
     * 참조형객체를 다루는 List 중복제거
     * @param list
     * @return
     */
    public static List<HashMap<String, String>>

                          removeDuplication(List<HashMap<String, String>> list){
        List<HashMap<String, String>> reList = list;
       
        String pk = "";                  // 참조형 객체의 키값
        int limit  = 1;                     // 배열의 limit 값(중복이 없으면 증가처리)
        boolean isRemove = false; // 중복 여부
        for(int i = reList.size() - 1 ; i >= 0; i-- ){     // 배열의 마지막 값부터 비교시작
            isRemove = false;
            pk = reList.get(i).get("id");                    // 비교대상 객체의 키값저장
            for(int j = 0; j < reList.size() - limit; j++){ // 배열의 처음부터 비교시작
                if(reList.get(j).get("id").equals(pk)){ 

                            // 비교대상 키값과 배열에 존재하는 키값이 일치할 경우
                    reList.remove(i);                          // 중복이므로 대상객체 제거
                    isRemove = true;
                    break;
                }
            }
            if(!isRemove) limit ++;                           // 비교객체가 중복이 아니면 증가
        }
        return reList;
    }

[출처] Hanjoong님

http://blog.naver.com/korn123/30144869615

반응형
반응형

큰 금액 double 형식을 문자열로 나타낼 때

지수 형식을 숫자로 나타내는 방법

 

DecimalFormat df = new DecimalFormat("#");

result = df.format(double 값);

result 를 출력해보세요~

반응형
반응형

뭐 pdf.js 같은 view를 쓰는 방법도 있지만

이 방법이 생각보다 깔끔하다..

 

스크립트 단에서 window.open 으로 호출하고

서버단에서 아래 코드를 작성하면 된다.

 

밑에 소스는 노트패드++같은데 붙여넣어서 보면 편하다~

 

FileInputStream fis = null;

BufferedOutputStream bos = null;

 

try {

String pdfFileName = "C:/upload/TEST.pdf";

File pdfFile = new File(pdfFileName);

 

//클라이언트 브라우져에서 바로 보는 방법(헤더 변경)

response.setContentType("application/pdf");

 

//★ 이 구문이 있으면 [다운로드], 이 구문이 없다면 바로 target 지정된 곳에 view 해줍니다.

response.addHeader("Content-Disposition", "attachment; filename="+pdfFile.getName()+".pdf");

 

 

//파일 읽고 쓰는 건 일반적인 Write방식이랑 동일합니다. 다만 reponse 출력 스트림 객체에 write.

fis = new FileInputStream(pdfFile);

int size = fis.available(); //지정 파일에서 읽을 수 있는 바이트 수를 반환

byte[] buf = new byte[size]; //버퍼설정

int readCount = fis.read(buf);

 

response.flushBuffer();

bos = new BufferedOutputStream(response.getOutputStream());

bos.write(buf, 0, readCount);

bos.flush();

 

 

catch(Exception e) {

e.printStackTrace();

} finally {

try {

if (fis != null) fis.close(); //close는 꼭! 반드시!

if (bos != null) bos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

[출처] [Java] Pdf 파일 다운로드 or 바로보여주기|

http://blog.naver.com/PostView.nhn?blogId=onandme&logNo=220529022550&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

작성자 onandme

반응형
반응형


CompileClassNotFound 에러는 여러가지 상황에서 일어날 수 있는데 뜻 그대로 클래스를 찾을 수 없다는 말이다.


JSP + Resin + Remote System 환경에서 해당 오류가 났었는데

내가 해결한 방법을 몇가지 적어보겠다.


1. 찾지 못하는 클래스간 package로 연결되어 있는지 확인한다.


2. resin을 재기동 한다. 한번 stop & start 해보고 변화가 없으면 restart도 한번 해본다. 레진 기동중 컴파일 시간차로 해당 에러가 발생할 수도 있다.


3. 마지막에 추가했던 매서드를 하나씩 주석처리 해본다. 아마도 컴파일 하는데 시간이 걸리는 것 같다.


4. 오타를 찾아본다.


위 작업들을 반복하다 보면 어느세 에러가 사라지는 것을 확인할 수 있을 것이다....


만약 계속 안된다면.... 삽질을 더... 


화이팅 !!!

반응형
반응형

Vector to Hashtable

 

- DB에서 해쉬테이블을 벡터에 넣고 서버사이드에서 벡터로 받은 data를 다시 hashtable로 변환하는 방법

 

Hashtable ht = (Hashtable)vt.elementAt(index);

String whatEver = (String)ht.get("HAHAHA");

 

이것이 핵심!

반응형
반응형

 · 개요 : 자바 https 통신 시도 시 다음과 같은 에러가 발생하는 경우

 · 오류 메시지 :

     sun.security.validator.ValidatorException: PKIX path building failed:

     sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

 

     2가지 해결책이 있다.

 

     원인은 간단히 말해서 Java의 신뢰하는 인증서 목록(keystore)에 사용하고자 하는 인증기관이 등록되어 있지 않아 접근이 차단되는 현상이다.

 

 · 해결책 1

     다음 사이트에 인증서를 추가하는 여러가지 방법이 나와 있다. 

     https://www.lesstif.com/pages/viewpage.action?pageId=12451848

 · 해결책 2

     위 사이트 방법대로 신뢰할 수 있는 인증서 목록에 추가하여도 접근이 안되는 경우가 있는 경우는https 대신 http로 코드를 수정하는 것이다.

 

반응형
반응형
남이 만든 소스를 확인하다가

javax.persistence.Column, Id, Table... 등등 알지 못했던 것을 발견하게 되었다.

도데체 persistence는 무엇일까....


위키백과 정의

JPA 

자바 퍼시스턴스 API(Java Persistence API,JPA)는 관계형 데이터베이스에 접근하기 위한 표준 ORM 기술을 제공하며, 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다. JPA는 JSR 220에서 정의된 EJB 3.0 스펙의 일부로 정의가 되어 있지만, JPA는 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다. 또한, JPA는 사용자가 원하는 퍼시스턴스 프로바이더 구현체를 선택해서 사용할 수 있다.

[ 출처 : 위키백과 https://ko.wikipedia.org/wiki/JPA ]


블로그에서 발견한 정의

JPA(Java Persistent API)

  JPA는 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean을 JPA라고 바꾸고 JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술이다. JPA는 ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA이다.

  ORM(Object Relational Mapping)이란 RDB 테이블을 객체지향적으로 사용하기 위한 기술이다. RDB 테이블은 객체지향적 특징(상속, 다형성, 레퍼런스, 오브젝트 등)이 없고 자바와 같은 언어로 접근하기 쉽지 않다. 때문에 ORM을 사용해 오브젝트와 RDB 사이에 존재하는 개념과 접근을 객체지향적으로 다루기 위한 기술이다.


장점

객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.

테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우)

로직을 쿼리에 집중하기 보다는 객체자체에 집중 할 수 있다.

빠른 개발이 가능하다.


단점

어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많다.

잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다. (persistence context)

성능상 문제가 있을 수 있다.(이 문제 또한 잘 이해해야 해결이 가능하다.)

[ 출처 : woniper 블로그 http://blog.woniper.net/255 ]


상세 설명은 상단 블로그에서 확인 할 것!

반응형

+ Recent posts