팡이네

이름 정의 (엑셀: 수식 > 이름관리자)

HSSFWorkbook wb = new HSSFWorkbook();

//참조 sheet 생성
HSSFSheet sheet = workbook.createSheet("감면");
//참조 데이터 생성
...

//userName 이라는 이름 정의
String name = "userName";

HSSFName namedCell = wb.createName();
namedCell.setNameName(name);
namedCell.setRefersToFormula("감면!$A$11:$A$35");   //감면 sheet 해당 범위에 참조 데이터 존재
//또는
namedCell.setRefersToFormula("'감면'!$A$11:$A$35");

//이미 이름이 정의되어 있는 엑셀인 경우
FileInputStream file = new FileInputStream(new File("already.xlsx"));
HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFName namedCell = wb.getName(name);
...

 

이름 적용

//String name = "userName";
HSSFSheet sheet = workbook.createSheet("Test");
...
//CellRangeAddressList(시작 row index, 종료 row index, 시작 column index, 종료 column index);
//범위 설정 (1 ~ 10행, B열)
CellRangeAddressList addressList = new CellRangeAddressList(0, 9, 1, 1);

//데이터 유효성 검사 추가(엑셀: 데이터 > 데이터 유효성 검사)
DVConstraint dvConstraint = DVConstraint.createFormulaListConstraint(name);
DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);

dataValidation.setEmptyCellAllowed(false);      //공백무시
dataValidation.setShowPromptBox(false);         //설명 미표시
dataValidation.setSuppressDropDownArrow(false); //셀 선택 시 드롭다운 목록 미표시

sheet.addValidationData(dataValidation);

출처

https://kkani.tistory.com/entry/poi-HSSF-%EC%82%AC%EC%9A%A9%EC%8B%9C-Excel-DropDownListBox-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C

'Java' 카테고리의 다른 글

List 다중 컬럼 정렬  (0) 2021.05.21
날짜 관련 유틸리티  (0) 2018.10.23
JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
사진 이미지 크기 변경 후 Base64 문자열 변환  (0) 2018.04.26
POI, Excel 셀 생성  (0) 2015.06.30

List 다중 컬럼 정렬

Java2021. 5. 21. 08:55

List 에 대하여 다중 컬럼 정렬을 하고자 할 때

 

//
export class Test {
    String name;
    Integer age;
    Integer score;
}

List list = ...;

// 점수순으로 정렬
list.sort( (a, b) -> a.getScore().compareTo(b.getScore()) );

// 점수순, 나이순으로 정렬
Collections.sort(list, Comparator.comparing(Test::getScore)
            .thenComparing(Test::getAge));
//

출처

https://stackoverflow.com/questions/4258700/collections-sort-with-multiple-fields

 

Collections.sort with multiple fields

I have a list of "Report" objects with three fields (All String type)- ReportKey StudentNumber School I have a sort code goes like- Collections.sort(reportList, new Comparator<Report>() { @

stackoverflow.com

내림차순(역순) 정렬

public class TempDTO {

	private Integer order;
    private String name;
    ...
}

list.sort(Comparator.comparing(TempDTO::getOrder, Comparator.reverseOrder()));

날짜 관련 유틸리티

Java2018. 10. 23. 14:12
	/**
	 * 지정한 시간(min) 뒤의 시각 반환
	 * @param min
	 * @return
	 */
	public static Date addMin(Integer min) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.MINUTE, min);
		return c.getTime();
	}
	
	/**
	 * 오늘 23:59:59 시각 반환
	 * @return
	 */
	public static Date getTodayMidnight() {
		Calendar c = Calendar.getInstance();
		c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE), 23, 59, 59);
		return c.getTime();
	}

윈도우 운영체제에 독립 이클립스 개발환경을 구축하려면 JDK를 인스톨해야 한다.

하지만 윈도우 운영체제에 JDK를 인스톨 없이 이용하고자 한다면 아래와 같이 해보자.


1. 오라클 사이트에서 윈도우용 JDK 8u191 버전을 다운로드 한다.


jdk-8u191-windows-x64.exe


2. 7zip 과 같은 압축 해제 유틸리티로 다운받은 파일을 설치하지 않고 압축을 해제한다.


3. ~/.rsrc/1033/JAVA_CAB10 폴더 안의 111 파일을 오른쪽 버튼을 눌러

'여기에 압축 풀기'를 선택하면 tools.zip 파일이 생긴다.


3.1. tools.zip 파일 압축을 풀어 폴더명을 jdk-8u191-x64 같이 바꿔준다.


3.2. 명령 프롬프트를 실행하여 압축을 푼 폴더로 가서 아래와 같은 명령을 실행한다.


for /r %i in (*.pack) do .\bin\unpack200.exe %i %~pi%~ni.jar


4. ~/.rsrc/1033/JAVA_CAB9 폴더 안의 110 파일을 오른쪽 버튼을 눌러

'여기에 압축 풀기'를 선택하면 src.zip 파일이 생긴다. 3.1.에서 만든 폴더에 넣어준다.


5. ~/.rsrc/1033/JAVA_CAB11 폴더 안의 112 파일을 오른쪽 버튼을 눌러

'여기에 압축 풀기'를 선택하면 COPYRIGHT 파일이 생긴다. 3.1.에서 만든 폴더에 넣어준다.


6.  이 폴더를 이클립스 환경설정에서 사용하면 된다.


출처: http://linux.systemv.pe.kr/windows-jdk-1-8-portable/

'Java' 카테고리의 다른 글

List 다중 컬럼 정렬  (0) 2021.05.21
날짜 관련 유틸리티  (0) 2018.10.23
사진 이미지 크기 변경 후 Base64 문자열 변환  (0) 2018.04.26
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 숫자 셀 생성  (0) 2015.06.30

이미지 크기 조절

/**
 * 사진 이미지 크기 조절
 * @param img
 * @param width
 * @param height
 * @return
 */
private BufferedImage resizeImage(BufferedImage img, int width, int height) {
	//int type = img.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : img.getType();			//png = TYPE_INT_ARGB
	
	Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
	BufferedImage resized = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);	//jpeg = TYPE_INT_RGB
	Graphics2D g2d = resized.createGraphics();
	g2d.drawImage(tmp, 0, 0, null);
	g2d.dispose();
	return resized;
}

사진 이미지 Base 64 문자열 변환

private String resizePhoto(String filePath, int MAX_SIZE) {
	try {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		
		//업로드 된 이미지(원본) 파일 읽기
		File file = new File(filePath);
		BufferedImage orgImage = ImageIO.read(file);
		BufferedImage resizedImage = null;
		
		int imageWidth = orgImage.getWidth();
		int imageHeight = orgImage.getHeight();
		
		//가로가 긴 이미지
		if (imageWidth > imageHeight) {
			if (imageWidth > MAX_SIZE) {
				double height = (double)imageHeight / (double)imageWidth * (double)MAX_SIZE;
				//가로 크기 = MAX_SIZE, 세로 크기 = height
				resizedImage = resizeImage(orgImage, MAX_SIZE, (int)height);
			}
		//세로가 긴 이미지
		} else {
			if (imageHeight > MAX_SIZE) {
				double width = (double)imageWidth / (double)imageHeight * (double)MAX_SIZE;
				//가로크기 = width, 세로 크기 = MAX_SIZE
				resizedImage = resizeImage(orgImage, (int)width, MAX_SIZE);
			}
		}
		
		//이미지 크기 변경 = resizedImage 아니면 원본 이미지 = orgImage
		ImageIO.write((resizedImage != null) ? resizedImage : orgImage, "jpeg", os);
		
		return Base64.getEncoder().encodeToString(os.toByteArray());	//base64 문자열 변환
	} catch (FileNotFoundException ex) {
		System.out.println("▶▶▶ File not found in [resizePhoto] " + ex);
	} catch (IOException ex) {
		System.out.println("▶▶▶ Error in [resizePhoto] " + ex);
	}
	
	return null;
}

'Java' 카테고리의 다른 글

날짜 관련 유틸리티  (0) 2018.10.23
JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 숫자 셀 생성  (0) 2015.06.30
POI, Excel 병합 셀 생성  (0) 2015.06.30

POI, Excel 셀 생성

Java2015. 6. 30. 14:53

POI, Excel 셀 생성

/**
 * 엑셀 셀을 생성한다.
 * 세로 맞춤 : 가운데
 * @param row
 * @param nCell		생성할 셀 인덱스
 * @param font		글꼴
 * @param bgColor	배경색
 * @param hAlign	가로 맞춤
 * @param border	테두리
 * @return
 */
private XSSFCell createCell(XSSFRow row, int nCell, Font font, XSSFColor bgColor, short hAlign, short border)
{
	short vAlign = CellStyle.VERTICAL_CENTER;
	
	XSSFSheet sheet = row.getSheet();
	XSSFWorkbook wb = sheet.getWorkbook();
	XSSFCellStyle cs = wb.createCellStyle();
	
	//정렬 설정
	cs.setAlignment(hAlign);
	cs.setVerticalAlignment(vAlign);
	
	//테두리 설정
	cs.setBorderTop(border);
	cs.setBorderRight(border);
	cs.setBorderBottom(border);
	cs.setBorderLeft(border);
	
	//글꼴 설정
	cs.setFont(font);
	
	//배경색 설정
	if (bgColor != null)
	{
		cs.setFillForegroundColor(bgColor);
		cs.setFillPattern(CellStyle.SOLID_FOREGROUND);
	}
	
	//Cell 생성
	XSSFCell cell = row.createCell(nCell);
	cell.setCellStyle(cs);
	
	return cell;
}


POI, Excel 숫자 셀 생성

/**
 * 숫자 서식 셀을 생성한다.
 * 세로 맞춤 : 가운데
 * 테두리 : 모두
 * @param row
 * @param nCell		생성할 셀 인덱스
 * @param font		글꼴
 * @param bgColor	배경색
 * @param hAlign	가로 맞춤
 * @return
 */
private XSSFCell createNumericCell(XSSFRow row, int nCell, Font font, XSSFColor bgColor, short hAlign)
{
	short vAlign = CellStyle.VERTICAL_CENTER;
	short border = CellStyle.BORDER_THIN;
	
	XSSFSheet sheet = row.getSheet();
	XSSFWorkbook wb = sheet.getWorkbook();
	XSSFCellStyle cs = wb.createCellStyle();
	
	cs.setAlignment(hAlign);
	cs.setVerticalAlignment(vAlign);
	
	cs.setBorderTop(border);
	cs.setBorderRight(border);
	cs.setBorderBottom(border);
	cs.setBorderLeft(border);
	
	cs.setFont(font);

	//배경색 설정
	if (bgColor != null)
	{
		cs.setFillForegroundColor(bgColor);
		cs.setFillPattern(CellStyle.SOLID_FOREGROUND);
	}
	
	XSSFDataFormat df = (XSSFDataFormat) wb.createDataFormat();
	cs.setDataFormat(df.getFormat("#,###"));
	
	XSSFCell cell = row.createCell(nCell);
	cell.setCellStyle(cs);
	
	return cell;
}

'Java' 카테고리의 다른 글

JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
사진 이미지 크기 변경 후 Base64 문자열 변환  (0) 2018.04.26
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 병합 셀 생성  (0) 2015.06.30
POI, Excel 한 Cell에 여러 줄 표시  (0) 2015.06.30

POI 이용, Excel 병합 셀 생성

/**
 * 병합 셀을 생성한다.
 * 세로 맞춤 : 가운데
 * 테두리 : 모두
 * @param row
 * @param nStart	시작 셀 인덱스
 * @param nEnd		종료 셀 인덱스
 * @param font		글꼴
 * @param bgColor	배경색
 * @param hAlign	가로 맞춤
 * @param border	테두리
 * @return
 */
private XSSFCell createMergedCell(XSSFRow row, int nStart, int nEnd, Font font, XSSFColor bgColor, short hAlign, short border)
{
	short vAlign = CellStyle.VERTICAL_CENTER;
	
	XSSFCell returnCell = null;
	
	XSSFSheet sheet = row.getSheet();
	XSSFWorkbook wb = sheet.getWorkbook();
	XSSFCellStyle cs = wb.createCellStyle();
	
	//정렬
	cs.setAlignment(hAlign);
	cs.setVerticalAlignment(vAlign);
	
	//테두리 설정
	cs.setBorderTop(border);
	cs.setBorderRight(border);
	cs.setBorderBottom(border);
	cs.setBorderLeft(border);
	
	//글꼴 설정
	cs.setFont(font);
	
	//배경색 설정
	if (bgColor != null)
	{
		cs.setFillForegroundColor(bgColor);
		cs.setFillPattern(CellStyle.SOLID_FOREGROUND);
	}
	
	//셀 생성
	for (int i = nStart; i <= nEnd; i++)
	{
		XSSFCell cell = row.createCell(i);
		
		if (i == nStart)
		{
			returnCell = cell;
		}
		
		cell.setCellStyle(cs);
	}
	
	//병합 영역 설정
	sheet.addMergedRegion(new CellRangeAddress(row.getRowNum(), row.getRowNum(), nStart, nEnd));
	
	return returnCell;
}



'Java' 카테고리의 다른 글

JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
사진 이미지 크기 변경 후 Base64 문자열 변환  (0) 2018.04.26
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 숫자 셀 생성  (0) 2015.06.30
POI, Excel 한 Cell에 여러 줄 표시  (0) 2015.06.30

POI 사용 Excel Cell 생성 및 한 Cell에 여러 줄 표시

private void createCell(XSSFRow row, int nCell, Font font, XSSFColor bgColor, String cellValue)
{
	short hAlign = CellStyle.ALIGN_LEFT;
	short vAlign = CellStyle.VERTICAL_CENTER;
	short border = CellStyle.BORDER_THIN;
	
	XSSFSheet sheet = row.getSheet();
	XSSFWorkbook wb = sheet.getWorkbook();
	
	int nCount = 0;
	String[] remark = cellValue.split("\\|");	//분리자 |
	String description = "";
	
	//줄 높이 계산
	for (int k = 0; k < remark.length; k++)
	{
		if (remark[k].length() > 0)
		{
			if (nCount == 0)
				description += remark[k];
			else
				description += "\r\n"+ remark[k];
			
			nCount++;
		}
	}
	
	//줄 높이 설정
	if (nCount > 1)
		row.setHeightInPoints((nCount * sheet.getDefaultRowHeightInPoints()));
	
	//스타일 설정
	XSSFCellStyle cs = wb.createCellStyle();
	cs.setFont(font);
	
	//배경색 설정
	cs.setFillForegroundColor(bgColor);	//주의: 반드시 ForegroundColor를 사용(BackgroundColor가 아님)
	cs.setFillPattern(CellStyle.SOLID_FOREGROUND);
	
	//정렬 설정
	cs.setAlignment(hAlign);
	cs.setVerticalAlignment(vAlign);
	
	//테두리 설정
	cs.setBorderTop(border);
	cs.setBorderRight(border);
	cs.setBorderBottom(border);
	cs.setBorderLeft(border);
	
	//여러 줄 표시할 경우 꼭 true
	cs.setWrapText(true);
	
	//Cell 생성
	XSSFCell cell = row.createCell(nCell);
	cell.setCellStyle(cs);
	cell.setCellValue(new XSSFRichTextString(description));
	
	sheet.autoSizeColumn(nCell);	//너비를 자동으로 다시 설정
}


'Java' 카테고리의 다른 글

JDK 8 인스톨 없이 설치하기  (0) 2018.10.20
사진 이미지 크기 변경 후 Base64 문자열 변환  (0) 2018.04.26
POI, Excel 셀 생성  (0) 2015.06.30
POI, Excel 숫자 셀 생성  (0) 2015.06.30
POI, Excel 병합 셀 생성  (0) 2015.06.30