1. http://www.andykhan.com/jexcelapi/index.html 에서 download JExcelApi.
2. tomcat의 경우 자신의 WEB-INF/lib에 위에서 받은 file중에 jxl.jar를 복사 한다
3. 자신에 계정의 CLASSPATH에 WEB-INF/lib/jxl.jar를 추가한다.
4. 적당한 name으로 다음 내용과 같은 html file을 만든다.
<html><head>
<title>Excel Test</title></head>
<body>
<form method="POST" action="/???/servlet/ExcelTest">
<input type="submit" value="Excel" name="ok">
</form></body></html>
4. WEB-INF/classes에서 ExcelTest.Java를 다음과 같이 작성한다.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import jxl.*;
import jxl.write.*;
public class ExcelTest extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String filepath = "/tmp";
String filename = "output.xls";
try {
WritableWorkbook workbook =
Workbook.createWorkbook(new File( filepath+ "/" + filename ));
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
Label label = new Label(0, 2, "Pungjoo");
sheet.addCell(label);
jxl.write.Number number = new jxl.write.Number(3, 4, 3.1459);
sheet.addCell(number);
workbook.write();
workbook.close();
}
catch ( Exception e ){
}
try {
File file = new File( filepath+ "/" + filename );
FileInputStream fin = new FileInputStream(file);
int ifilesize = (int)file.length();
byte b[] = new byte[ifilesize];
response.setContentLength(ifilesize);
response.setContentType("application/smnet");
response.setHeader(
"Content-Disposition",
"attachment; filename=" + filename+";"
);
ServletOutputStream oout = response.getOutputStream();
fin.read(b);
oout.write(b,0,ifilesize);
oout.close();
fin.close();
file.delete();
}
catch ( Exception e ) {
}
}
}
5. 자세한 사용법은 http://www.andykhan.com/jexcelapi/tutorial.html 를 본다.
6. code가 엉성하죠?.. 그냥 심심해서....
7. tutorial을 자세히 보면 Form file을 작성하고 위와 같은 방식으로 좌표 값을
넣고 병합을 하는 방식이 있습니다. 즉 2개의 File을 이용한다는 것 입니다.
하나는 Form file로 Chart나 합을 구한다던가 뭐 하여간 이런 저런 저런 것을
넣은 File을 편하게 Excel로 만들고 위와 같은 방식으로 해당 Form file의
Cell 좌표에 값을 넣는 File 하나를 만들고 Form File과 위 방식으로 만든
File을 병합하면 됩니다.
또는 원본 File을 참조해 modify 방법으로 out file을 만들 수 있습니다.
tutorial하단에 나옵니다.
8. 쩝. 지금까지 저는 Excel로 원하는 Form을 작성하고 그것을 html로 변환하고
Form에서 특정 값을 mark하고 그 값을 edit에서 search해서 data를 넘겨 주고
하는 방식으로 작성을 했습니다. 이렇게 하다보니 Form에서 한 Cell만 바뀌어도 다시
작성하는 바보 같은 짓을 했습니다. 저 같은 바보 짓을 하지 맙시다.
9. 위에 분께서 workload에 대해서 언급을 하셨는데 저는 잘 모르겠습니다.
Compaq Alpha DS20E Server에서 Test를 해서 그런지 또는 file 내용이 부실해서..
10. modify부분을 만들어 봤습니다.
우선 Excel로 A3 Cell에 "당신의 이름은?" 라고 넣고 form.xls로 저장합니다.
Server의 /tmp directory에 위 form.xls file을 복사합니다.
11. 위에 ExcelTest file을 아래와 같이 변경합니다.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import jxl.*;
import jxl.write.*;
public class ExcelTest extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String filepath = "/tmp";
String filename = "output.xls";
try {
Workbook workbook = Workbook.getWorkbook(new File("/tmp/form.xls"));
WritableWorkbook copy =
Workbook.createWorkbook(
new File( filepath+ "/" + filename ),
workbook
);
WritableSheet sheet = copy.getSheet(0);
Label label = new Label(1, 2, "Pungjoo");
sheet.addCell(label);
copy.write();
copy.close();
}
catch ( Exception e ) {
}
try {
File file = new File( filepath+ "/" + filename );
FileInputStream fin = new FileInputStream(file);
int ifilesize = (int)file.length();
byte b[] = new byte[ifilesize];
response.setContentLength(ifilesize);
response.setContentType("application/smnet");
response.setHeader(
"Content-Disposition",
"attachment; filename=" + filename+";"
);
ServletOutputStream oout = response.getOutputStream();
fin.read(b);
oout.write(b,0,ifilesize);
oout.close();
fin.close();
file.delete();
}
catch ( Exception e ) {
}
}
}
12. 위와 같이 하면 Excel file의 B3에 Pungjoo라고 병합이 되어 excel file이
생성됩니다.
13. 이번 Test는 Intel Pentium III (600MHz) / Linux에서 해 봤습니다.
위에 언습하신 분 말씀처럼 workload가 역시 있네요...
따뜻한 하루 하루를 보내시길.....
--------------------------------------------------------------------------------------
현존하는 인 보다 죽어 나간 인이 더 많은 시점에 같은 공간 같은 시간 속에 우리네들은 서 있다.