본문 바로가기
JAVA

[Java] 텍스트 내용을 엑셀로 전환 방법 (영상)

by GoodDayDeveloper 2022. 5. 31.
반응형

 

안녕하세요.

오늘은 자바에서 텍스트 파일을 엑셀로 변환하는 방법에 대해 정리해보겠습니다.

아래는 구현 영상입니다.

 

 

 

3개의 텍스트 파일이 있고

프로그램을 실행하면,

엑셀 파일이 생성되면서 텍스트파일의 내용을 보여줍니다.

 

 

 

 


 

 

 

 

우선,

텍스트를 읽어오기 위해서 자바의 io 클래스의 BufferedReader 객체와

엑셀을 만들기 위한 jxl 라이브러리가 필요합니다.

 

 

 

 

pom.xml

 

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
<dependency>
    <groupId>net.sourceforge.jexcelapi</groupId>
    <artifactId>jxl</artifactId>
    <version>2.6.12</version>
</dependency>
cs

 

pom.xml에  jxl라이브러리를 추가해줍니다.

 

 

 

 

 

 

 

 

Controller

 

1
2
3
4
5
6
7
storeVO detailVO = storeService.getDetailMain(searchVO);
 
String projPath = C:\upload;
File finalFile =  new File(EgovWebUtil.filePathBlackList(projPath+"/complete.txt"));
if(!finalFile.isFile() && !finalFile.exists()) {
    textCf.texttoExcel(projPath,detailVO);
}
cs

 

우선 저는 글에 대한 상세조회 정보를 불러왔는데 이유는 식별할 수 있는 정보를 활용하기 위해서입니다. (detailVO)

저는 식별코드와 게시판 작성자 id를 활용할 예정입니다.

 

경로를 지정해주고

만약에 complete.txt란 텍스트 파일이 없다면 texttoExcel 메서드를 실행하도록 합니다.

 

complete.txt는 엑셀파일이 생성되면 자동으로 생성될 수 있도록 설정하였습니다.

반복 실행을 방지하기 위함이죠.

 

 

 

 

 

 

 

 

TexttoExcelMethod / texttoExcel method

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
package com.bsite.bioresource.store.service.impl;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.stereotype.Component;
 
import com.bsite.bioresource.store.service.StoreService;
import com.bsite.vo.bio.storeVO;
import com.bsite.vo.store.stats_01;
import com.bsite.vo.store.stats_02;
import com.bsite.vo.store.stats_03;
import com.mysql.jdbc.StringUtils;
 
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Alignment;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
 
@Component
public class TexttoExcelMethod {
 
@Resource(name = "StoreService")
  private StoreService storeService;
 
public void texttoExcel(String projPath, storeVO detailVO) throws Exception{
    
    
    try {
 
     BufferedReader in1 = new BufferedReader(new FileReader(projPath + "/statistics_01.txt"));
       BufferedReader in2 = new BufferedReader(new FileReader(projPath + "/statistics_02.txt"));
       BufferedReader in3 = new BufferedReader(new FileReader(projPath + "/statistics_03.txt"));
 
 
 
     //st1
       String[] sArray1;
       String s1;
       int i1 = 0;
       stats_01 st1 = new stats_01();
       st1.setCodeKey(detailVO.getFs_code());
       st1.setCret_id(detailVO.getCret_id());
       while ((s1 = in1.readLine()) != null) {
           
           if(i1 != 0) {
               
               sArray1 = s1.split("\t");  
               String val1 =  sArray1[0].trim();
               String val2 =  sArray1[1].trim();
               String val3 =  sArray1[2].trim();
               String val4 =  sArray1[3].trim();
               String val5 =  sArray1[4].trim();
               
               st1.setSample(val1);
               st1.setR1(val2);
               st1.setR1_Trimming_rate(val3);
               st1.setR2(val4);
               st1.setR2_Trimming_rate(val5);
               
               storeService.textDataInsert1(st1);
               
           }
           
           i1++;
       }
       
 
       
       
       //st2
       String[] sArray2;
       String s2;
       int i2 = 0;
       stats_02 st2 = new stats_02();
       st2.setCodeKey(detailVO.getFs_code());
       st2.setCret_id(detailVO.getCret_id());
       while ((s2 = in2.readLine()) != null) {
           
           if(i2 != 0) {
               
               sArray2 = s2.split("\t");  
               String val1 =  sArray2[0].trim();
               String val2 =  sArray2[1].trim();
               String val3 =  sArray2[2].trim();
               String val4 =  sArray2[3].trim();
               String val5 =  sArray2[4].trim();
               
               st2.setSample(val1);
               st2.setINPUT_CNT(val2);
               st2.setSSR_number(val3);
               st2.setSSR_seq_CNT(val4);
               st2.setSSR_predion_rate(val5);
               
               storeService.textDataInsert2(st2);
               
           }
           
           i2++;
       }
       
       
       
       //st3
       String[] sArray3;
       String s3;
       int i3 = 0;
       stats_03 st3 = new stats_03();
       st3.setCodeKey(detailVO.getFs_code());
       st3.setCret_id(detailVO.getCret_id());
       while ((s3 = in3.readLine()) != null) {
           
           if(i3 != 0) {
               
               sArray3 = s3.split("\t");  
               String val1 =  sArray3[0].trim();
               String val2 =  sArray3[1].trim();
               String val3 =  sArray3[2].trim();
               String val4 =  sArray3[3].trim();
               
               st3.setSample(val1);
               st3.setPRIMER_INPUT(val2);
               st3.setPRIMER_OUTPUT(val3);
               st3.setPRIMER_prediction_rate(val4);
               
               storeService.textDataInsert3(st3);
               
           }
           
           i3++;
       }
          
 
    List<stats_01> list = storeService.textDataList(st1);
      
   File file = new File(projPath + "/statisticsExcel.xls"); 
   simpleExcelWrite(file, list, projPath);
 
    BufferedWriter fw = new BufferedWriter(new FileWriter(projPath+"/complete.txt" , true));
   fw.flush();
 
    in1.close();
   in2.close();
   in3.close();
 
        
    }catch(Exception e) {
        e.printStackTrace();
    }
 
}
cs

 

 

우선 BufferedReader객체를 이용하여 텍스트 파일을 in1,2,3에 넣어두고,

readLine()를 통해서 한줄씩 읽어오는거죠

그리고 데이터베이스에 저장을 시킵니다.

 

다 저장한 부분을 list로 불러와서 파일이름과 함께 엑셀을 만들 simpleExcelWrite 메소드에 넣어줍니다.

그리고 simpleExcelWrite가 완료되면 BufferedWriter를 이용하여 complete.txt를 만들어줘서

complete.txt가 있을 경우 또 실행하지 못하도록 장치를 만들어줍니다.

 

다 완료되었으면 텍스트 파일을 닫아줍니다.

 

 

 

 

 

반응형

 

 

 

TexttoExcelMethod / simpleExcelWrite method

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public void simpleExcelWrite(File file, List<stats_01> data, String projPath)throws Exception {
  WritableWorkbook workbook = null;
  WritableSheet sheet = null;
 
  try {
      
 
   WorkbookSettings setting = new WorkbookSettings();
   setting.setEncoding("UTF-8");
   workbook = Workbook.createWorkbook(file, setting);
   workbook.createSheet("fileSheet"0); 
 
 
   sheet = workbook.getSheet(0); // 시트 생성 소환
   WritableCellFormat cellFormat = new WritableCellFormat(); // 셀스타일 지정 
   cellFormat.setAlignment(Alignment.CENTRE);      
   for(int i = 0; i < 3; i++){
       int col = 0// 가로
       int row = 0// 세로
       
       String val = "";
       sheet.mergeCells(0040); 
       
       
       switch (i) {
       
           case 0:  val = "Trimming_statistics";
           sheet.mergeCells(0040); 
           break;
       
           case 1:  val = "SSR_stastitics";
           sheet.mergeCells(5080); 
           row = 5;
             break;
             
           case 2:  val = "PRIMER_stastistics";
           sheet.mergeCells(90110); 
           row = 9;
           break;
           
       }
       
       jxl.write.Label label = new jxl.write.Label(row, col,val,cellFormat);
       sheet.addCell(label);
   }
   
   List<String> dataList = new ArrayList<String>();
   dataList.add("Sample");
   dataList.add("R1");
   dataList.add("R1_Trimming_rate");
   dataList.add("R2");
   dataList.add("R2_Trimming_rate");
   dataList.add("INPUT_CNT");
   dataList.add("SSR_number");
   dataList.add("SSR_seq_CNT");
   dataList.add("SSR_predion_rate");
   dataList.add("PRIMER_INPUT");
   dataList.add("PRIMER_OUTPUT");
   dataList.add("PRIMER_prediction_rate");
   
   int col = 1// 가로
   int row = 0// 세로 
   for(stats_01 k : data) {
      
        dataList.add(k.getSample());
        dataList.add(k.getR1());
        dataList.add(k.getR1_Trimming_rate());
        dataList.add(k.getR2());
        dataList.add(k.getR2_Trimming_rate());
        dataList.add(k.getINPUT_CNT());
        dataList.add(k.getSSR_number());
        dataList.add(k.getSSR_seq_CNT());
        dataList.add(k.getSSR_predion_rate());
        dataList.add(k.getPRIMER_INPUT());
        dataList.add(k.getPRIMER_OUTPUT());
        dataList.add(k.getPRIMER_prediction_rate());
       
   }
 
       for(int i = 0; i < dataList.size(); i++){
        String val = (String)dataList.get(i);
        jxl.write.Label label = new jxl.write.Label(row, col,val,cellFormat);
        sheet.addCell(label);
 
        if(row> 10){ 
            row = 0
            col++
        }else {
            row++
        }
            
    }
       
 
   workbook.write();  
 
  } catch (Exception e) {
   e.printStackTrace();
   throw e;
  } finally {
   try {
    if (workbook != null)
     workbook.close();
   } catch (WriteException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 
 
 }
cs

 

 

리스트로 뽑아온 데이터를 simpleExcelWrite에서 본격적으로  엑셀을 만들 작업을 합니다.

 

createWorkbook로 엑셀을 생성시키고,

mergeCells로 셀을 병합하여 데이터와 별개로 컬럼을 생성해줍니다. 

 

반복문으로 데이터를 dataList에 넣어준다음,

하나씩 꺼내면서 셀에 넣어줍니다.

row가 10보다 커지면 다음 행으로 이동하여 다시 넣어주도록 합니다.

 

그리고 마지막으로 workbook.write()를 실행함으로써 엑셀이 만들어지게 됩니다.

 

 

 

 

 

 

 

 

 

위 코드들을 입맛에 맞게 응용하시면

자바코드를 이용하여 텍스트파일을 엑셀파일로 변환하는 것은 어렵지 않게 하실 수 있을 겁니다.

 

반응형

댓글