팡이네

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

다른 프로젝트의 Resources.resx 파일의 리소스에 접근하기
try
{
	//시작 프로젝트에 있는 리소스일 경우는 GetEntryAssembly()
	//var assembly = System.Reflection.Assembly.GetEntryAssembly();

	var assembly = System.Reflection.Assembly.Load("MyAssemplyName");
	var res = new System.Resources.ResourceManager("MyNameSpace.Properties.Resources", assembly);
	var image = Image.FromStream(res.GetStream("MyImageName"));

	//리소스 파일에 있는 특정 문자열을 가져오려면
	var text = res.GetString("MyResourceName", System.Globalization.CultureInfo.CurrentCulture);
}
catch (Exception ex)
{
	throw ex;
}
다른 프로젝트의 특정 폴더에 있는 이미지에 접근하려면
try
{
	var assembly = System.Reflection.Assembly.Load("MyAssemplyName");
	var image = Image.FromStream(assembly.GetManifestResourceStream("MyNameSpace.MyFolderName.MyImageFileName"));
}
catch (Exception ex)
{
	throw ex;
}
전체 리소스 이름을 알고 싶다면 다음 메소드를 사용한다.
var list = System.Reflection.Assembly.Load("MyAssemplyName").GetManifestResourceNames();

foreach (var item in list)
{
	...
}


'C#' 카테고리의 다른 글

사진 이미지 관련 클래스  (0) 2016.04.14
오라클 BLOB 등록 및 조회  (0) 2016.04.14
윈도우에 등록된 확장자를 가진 파일 열기  (0) 2011.11.16
날짜 문자열을 DateTime형으로 변환  (0) 2011.10.27
ComboBox SelectedItem  (0) 2011.10.27

윈도우에 등록된 확장자를 가진 파일을 열고자 할 때 사용한다.

간단하게
	Process.Start(filePath);
또는
private void OpenFile(string filePath)
{
	try
	{
		System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
		info.RedirectStandardOutput = true;
		info.UseShellExecute = false;
		info.CreateNoWindow = true;
		info.FileName = "cmd";
		info.Arguments = "/c \"" + filePath + "\"";	//실행 후 cmd.exe를 종료한다.

		System.Diagnostics.Process proc = new System.Diagnostics.Process();
		proc.StartInfo = info;
		proc.Start();

		//string result = proc.StandardOutput.ReadToEnd();
		//MessageBox.Show(result);
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.Message);
	}
}

ComponentOne의 FlexGrid에서 Cell에 이미지 버튼을 표현하는 방법
아래의 방법은 일종의 이미지 버튼을 흉내내는 방법이다.

//이벤트 핸들러 추가
grdMain.MouseMove += new MouseEventHandler(grdMain_MouseMove);
grdMain.MouseDown += new MouseEventHandler(grdMain_MouseDown);

//커서 변경
private void grdMain_MouseMove(object sender, MouseEventArgs e)
{
	if (grdMain.MouseRow > 0)
	{
		if (grdMain.MouseCol == grdMain.Cols["ViewInfo"].Index)
			this.Cursor = Cursors.Hand;
		else
			this.Cursor = Cursors.Default;
	}
}

//마우스 클릭
private void grdMain_MouseDown(object sender, MouseEventArgs e)
{
	if (grdMain.MouseRow > 0)
	{
		if (grdMain.MouseCol == grdMain.Cols["ViewInfo"].Index)
		{
			Row row = grdMain.Rows[grdMain.MouseRow];
			string seqNo = row["SeqNo"].ToString();

			ViewInfo(seqNo);
		}
	}
}

//그리드 바인딩 후 아래와 같은 방법으로 이미지를 표시한다.
//전체 Row에 같은 이미지를 표시하고자 할 경우 아래와 같이 구현한다.
private void LoadCellImage()
{
	Hashtable ht = new Hashtable();
	ht.Add("", 특정 이미지);
	Column LinkCol = grdMain.Cols["ViewInfo"];
	LinkCol.ImageMap = ht;
	LinkCol.ImageAndText = false;
	LinkCol.ImageAlign = ImageAlignEnum.CenterCenter;
}

//해당 Row의 상태에 따라 다른 이미지를 표시하려면 아래의 메소드처럼 구현한다.
private void LoadCellImage()
{
	Hashtable ht = new Hashtable();

	//그리드 제목이 있을 경우 grdMain.Rows.Fixed부터 처리
	for (int i = grdMain.Rows.Fixed; i < grdMain.Rows.Count; i++)
	{
		Row row = grdMain.Rows[i];
		if (row["Exist"].ToString() == "Y")
		{
			ht.Add(row["SeqNo"].ToString(), 특정 이미지1);
		}
		else
		{
			ht.Add(row["SeqNo"].ToString(), 특정 이미지2);
		}
	}

	Column LinkCol = grdMain.Cols["SeqNo"];
	LinkCol.ImageMap = ht;
	LinkCol.ImageAndText = false;
	LinkCol.ImageAlign = ImageAlignEnum.CenterCenter;
}

아래처럼 DateTime.ParseExact를 이용한다.

DateTime date = DateTime.ParseExact("20111027"
		, "yyyyMMdd"
		, new System.Globalization.CultureInfo("ko-KR"));

또는

DateTime date = DateTime.ParseExact("2011-10-27", "yyyy-MM-dd", null);

null을 입력하여 현재 CultureInfo를 사용한다.

ComboBox SelectedItem

C#2011. 10. 27. 11:08
DataTable로 바인딩 하여 콤보박스를 표시했을 경우
선택한 Row 전체를 가져오고자 할 때
	var columnValue = ComboBox.SelectedRow["ColumnName"].ToString();
또는
	var selectedRow = ComboBox.SelectedItem as DataRowView;
	var columnValue = selectedRow["ColumnName"].ToString();

ValueMember나 DisplayMember로 지정하지 않은 컬럼의 값으로
콤보박스를 선택하고자 할 때
public static DataRowView GetComboSelectedItem(ComboBox cbo
	, string columnName, string valueForSelect)
{
	foreach (DataRowView row in cbo.Items)
	{
		if (row[columnName].ToString() == valueForSelect)
		{
			return row;
		}
	}

	return null;
}

DataTable dt = ...;

cboCombo.DisplayMember = "Text";
cboCombo.ValueMember = "Code";
cboCombo.DataSource = dt;

cboCombo.SelectedItem
	= GetComboSelectedItem(cboCombo, "OtherColumnName", "04");


콤보박스 Dictionary 로 바인딩
var list = new Dictionary<string, int>();
list.Add("1", 100);
list.Add("2", 200)
list.Add("3", 300);

combobox.DisplayMember="Key";
combobox.ValueMember="Value";
combobox.DataSource = new BindingSource(list, null);

오픈 소스인 zxing(Zebra Crossing) 1.7을 이용한다.
(http://code.google.com/p/zxing/)

//인코딩 설정
//zxing의 인코딩 기본값이 ISO-8859-1이므로
//한글처리를 위해 인코딩 힌트를 UTF-8로 설정한다.
Hashtable htHint = new Hashtable();
if (cbUTF8.Checked)
{
	htHint.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); //zxing 기본값:ISO-8859-1
}

//오류복원레벨 설정
//따로 지정하지 않으면 기본값으로 L이 설정된다.
ErrorCorrectionLevel ecLevel = ErrorCorrectionLevel.L;
switch (cboEcLevel.SelectedIndex)
{
	case 1: ecLevel = ErrorCorrectionLevel.M; break;
	case 2: ecLevel = ErrorCorrectionLevel.Q; break;
	case 3: ecLevel = ErrorCorrectionLevel.H; break;
}
htHint.Add(EncodeHintType.ERROR_CORRECTION, ecLevel); //기본값:L

try
{
	//QRCode 이미지를 만든다.
	QRCodeWriter writer = new QRCodeWriter();
	ByteMatrix bm = writer.encode(txtData.Text, BarcodeFormat.QR_CODE
					, tbSize.Value, tbSize.Value, htHint);

	pbQRCode.Image = bm.ToBitmap();	//pictureBox 컨트롤에 표시
}
catch (Exception ex)
{
	MessageBox.Show(ex.ToString());
}