이러한 상황이 흔하지는 않습니다. 대게(?) DataGridView에서 Excel 파일로 저장해줄 수 있기 때문에 굳이, DataGridView에서 특정 부분의 셀을 드레그한 후 Copy(Ctrl + C)해서 Excel에 Paste(Ctrl + V)를 할일이 없다고 생각이 되는군요-_-;;
하지만, 간혹 DataGridView에 있는 막대한(?) 데이터가 필요가 없고, 원하는 부분만을 복사해서 붙여넣기 식으로 편집하는 쪽이 더 좋다고 생각되어 진다면, 개발자 입장에서는 우길수밖에 없습니다.
그냥 써보시라고…
그러나, 마냥 클라이언트쪽의 요구사항(?)을 무시할 수만은 없기 때문에(짤립니다-_-;;) DataGridView에 바인딩되어 있는 한글들을 Excel에서 제대로 보여질 수 있도록 해줘야겠습니다.
항상 고객만족을 실천하는 개발자 아니겠습니까?
상황
Windows Vista UltimateK NEX R4.5
Microsoft Excel 2007
Visual Studio 2005
첨부파일에 소스를 다운 받은 후 압축을 풀고 실행시켜 보세요.
아래의 그림처럼 셀들을 드레그한 후 Ctrl + C합니다.
엑셀을 실행한 후 Ctrl + V해보시면 아래의 그림처럼 한글이 깨지는것을 확인할 수 있습니다.
첫번째 해결 방법
아래의 그림처럼 붙여넣기할 위치에서 Ctrl + V하지 마시고, 우클릭 >선택하여 붙여넣기선택
텍스트를 선택한 후 확인을 누릅니다.
제대로 한글이 들어가는게 확인이 되셨죠?
여기서 힌트를 얻어서 두번째 방법을 해볼 수 있습니다. 그건 바로 클립보드에 있는 텍스트를 변수에 넣어두고 Text로 변환한 다음 다시 클립보드에 저장하는거죠-_-;; 다 아는건가요! 하하;;
두번째 해결 방법
위의 방식이 번거롭기(?) 때문에 직접 Ctrl + CV가 가능하도록 약간의 소스를 고쳐보도록 하겠습니다.
우선 샘플 코드에 아래의 이벤트를 하나 추가해 줍니다.
this.dataGridView1.KeyUp += new KeyEventHandler(dataGridView1_KeyUp);
참고 : this.dataGridView1.KeyUp += 탭키 두번… 자동으로 이벤트 핸들러와 이벤트 처리기를 생성해줍니다.
자동으로 생성된 이벤트 처리기에 아래처럼 코딩해 줍니다.
void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
throw new Exception("The method or operation is not implemented.");
}
{
throw new Exception("The method or operation is not implemented.");
}
위의 붉은색은 지워준 후 아래의 코드를 넣어주세요.
if (e.KeyCode == Keys.C)
{
string str;
str = Clipboard.GetText();
Clipboard.Clear();
Clipboard.SetText(str, TextDataFormat.Text);
}
{
string str;
str = Clipboard.GetText();
Clipboard.Clear();
Clipboard.SetText(str, TextDataFormat.Text);
}
이제 다시 실행해서 확인해 보시면 한글이 깨지지 않고 입력되는것을 확인할 수 있습니다.
사실은 제가 이러한 문제에 부딪친건 아닙니다.-_-;; 갑자기 메신저로 위의 문제에 대한 해결방법을 물어보기에 나름데로 여러 게시판을 찾아본 결과 해결방법을 찾지 못해서 나름데로 해결해본겁니다.
위의 코드는 문제점이 많은거 같긴 하지만, 급한데로^^;;
감기 조심하세요^-^;;