엑셀에서 허용되는 글꼴 최대 수는 512이다

 private HSSFCellStyle setConFont(){
        HSSFFont  font = this.createFont();
        font.setFontName("가을체");
        font.setFontHeightInPoints((short) 10);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        HSSFCellStyle cellStyle =createCellStyle();
        cellStyle.setFont(font);
        return cellStyle;
    }

다음과 같이 함수를 만들어서 해당 셀 스타일이 필요할때마 호출이 되면  HSSFFont  font = this.createFont();이 부분이 함수 실핼할때마다 실행되므로 글꼴 수가 1개씩 증가하게 된다.

그러므로 512개의 셀에 다음 함수를 512번 호출하게되면 513번째 호출할때에는 에러가 발생하고 이건 엑셀에서 해당파일을 열때 글꼴이 초과 되었다는 메세지가 나타난다.

Excel 2007에서는 메세지창 확인 버튼을 클릭하고 작업을 계속 할수 있어서 별로 문제가 되지 않지만 Excel 2003과 Excel 2002에서는 수정 및 저장이 안되는 치명적인 현상이 발견됐다.

이 문제의 해결책은 바로 싱글톤..

나 같은 경우는 엑셀이 여러 곳에서 쓰이는 것이 아니라 한 곳에서 만쓰기때문에 객체로 빼지 않고 그냥 함수 안에서 객체가 중복되어 생성되는 것을 막았다.

 private HSSFCellStyle setConFont(){
        if(font == null){
            font = this.createFont();
        }
        font.setFontName("가을체");
        font.setFontHeightInPoints((short) 10);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
        HSSFCellStyle cellStyle =createCellStyle();
        cellStyle.setFont(font);
        return cellStyle;
    }

그 결과 아무리 많은 셀을 사용해도 글꼴이 초과 되었다는 메세지는 뜨지 않았다.

신고
Posted by genius3k
첨부할 파일은 웹서버에 위치해 있어야 하므로 일단 파일을 웹서버로 전송하여 저장하고 저장된 파일의 절대위치로 파일첨부하여 전송하면된다.
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import="java.util.*,java.io.*,javax.mail.*,javax.mail.internet.*,javax.activation.*" %> 
<%
String msgText = "This is a message include file. \n 파일 첨부 메시지입니다..";
String msgSubj = "JavaMail 파일첨부메일입니다.";
msgText = new String(msgText.getBytes("euc-kr"),"8859_1");
msgSubj = new String(msgSubj.getBytes("euc-kr"),"8859_1");

String to = kenu@okjsp.pe.kr; <-- 받는 주소
String from = heogn@hotmail.com; <-- 보내는 주소
String host = "localhost"; <-- 메일서버 주소
String filename = "C:/AUTOEXEC.BAT"; <-- 메일에 첨부할 파일위치

// create some properties and get the default Session
Properties props = new Properties();
props.put("mail.smtp.host", host);

Session sess = Session.getDefaultInstance(props, null);

try {
	// create a message
	Message msg = new MimeMessage(sess);
	msg.setFrom(new InternetAddress(from)); 
	InternetAddress[] address = {new InternetAddress(to)};
	msg.setRecipients(Message.RecipientType.TO, address);
	msg.setSubject(msgSubj);
	
	
	// create and fill the first message part
	MimeBodyPart mbp1 = new MimeBodyPart();
	mbp1.setText(msgText);
	
	// create the second message part
	MimeBodyPart mbp2 = new MimeBodyPart();
	
	// attach the file to the message
	FileDataSource fds = new FileDataSource(filename);
	mbp2.setDataHandler(new DataHandler(fds));
	mbp2.setFileName(fds.getName());
	
	// create the Multipart and its parts to it
	Multipart mp = new MimeMultipart();
	mp.addBodyPart(mbp1);
	mp.addBodyPart(mbp2);
	
	// add the Multipart to the message
	msg.setContent(mp);
	
	msg.setSentDate(new Date());
	Transport.send(msg);
	out.println(host+"를 통해 "+filename+"을 발송했습니다. ^_^");
} catch (MessagingException mex) {
	out.println(mex.getMessage());
	out.println(host+"접속에 문제가 생겼네요.\n발송하지 못했습니다.");
} 

%>
신고
Posted by genius3k
웹사이트 최적화기법 책에 따르면 웹페이지 접속시 각 부분 속도측정을 해본 결과 HTML을 다운로드받는 데 소요되는 시간은 10% ~ 20%를 차지한다 나머지 80% ~90%는 페이지안의 모든 구성요소를 다운받는데 소비된다

1. HTTP 요청수를 줄여라
웹사이트에는 이미지,CSS,Javascript등의 많은 파일들로 구성되어있고 웹브라우저에서 접속을 하면 이 파일들을 다 다운받은 후 파싱하고 그 결과를 보게 되는데 이 때 파일 요청의 수를 최소한으로 줄이면 속도는 향상될 것이다.
이미지 파일들은 하나의 이미지파일로 합치고 프로그램으로 필요한 이미지 부분을 가져와서 보여지게 하고 Javascript와 CSS는 각각 하나의 파일로 합쳐서 사용하는 것이다.
HTML안에 Javascript와 CSS를 전부 넣는 것이 가장 빠르겠지만 이렇게하면 관리가 힘드므로 패스~

2. CDN(콘텐츠 전송 네트워크)를 사용하라. 하지만 돈이 든다.
신고
Posted by genius3k

티스토리 툴바