'Development & Tips/C# / WPF Programming'에 해당되는 글 5건

  1. 2011/11/11 엑셀 파일 읽고 저장하기
  2. 2011/11/10 외부에서 Drag & Drop으로 파일 리스트 받기
  3. 2011/11/10 COM 오브젝트 Release하기
  4. 2011/11/10 폴더 및 하위 파일 삭제
  5. 2011/11/10 XML 파일 처리

요구사항

 

1. COM Object 참조 추가

 

 

 

 

2. 네임스페이스 추가

 

using Excel = Microsoft.Office.Interop.Excel;

 

 

기본 동작 순서 및 구조

 

  1: Excel.Application xlApp = null;
  2: Excel.Workbook xlWorkBook = null;
  3: Excel.Worksheet xlWorkSheet = null;
  4: object misValue = System.Reflection.Missing.Value;
  5: 
  6: xlApp = new Excel.ApplicationClass();
  7: {
  8: 	xlWorkBook = xlApp.Workbooks.Add(misValue);
  9: 	{
 10: 		xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);
 11: 
 12: 		releaseObject(xlWorkSheet);
 13: 	}
 14: 	xlWorkBook.Close(true, misValue, misValue);
 15: 	releaseObject(xlWorkBook);
 16: }
 17: xlApp.Quit();
 18: releaseObject(xlApp);

 

 

1. 항목별 초기화 (애플리케이션 – 워크북 – 워크시트)

 

  1: Excel.Application xlApp = null;
  2: Excel.Workbook xlWorkBook = null;
  3: Excel.Worksheet xlWorkSheet = null;

 

 

2. Missing Value 정의

 

  1: object misValue = System.Reflection.Missing.Value;

 

 

3. 애플리케이션 인스턴스 생성

 

  1: xlApp = new Excel.ApplicationClass();

 

 

4. 애플리케이션 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlApp);

 

 

5. 애플리케이션 종료

 

  1: xlApp.Quit();

 

 

6. 워크북 인스턴스 생성

 

  1: xlWorkBook = xlApp.Workbooks.Add(misValue);

 

 

7. 워크북 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlWorkBook);

 

 

8. 파일 열기

 

  1: xlWorkBook = xlApp.Workbooks.Open(/*파일 명*/, 0, /*읽기 전용 ex)true*/, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

 

 

9. 파일 저장하기

 

  1: xlWorkBook.SaveAs(/*파일 명*/, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);

 

 

10. 워크북 닫기

 

  1: xlWorkBook.Close(/*저장 여부 ex)true*/, misValue, misValue);

 

 

11.  워크시트 생성

 

  1: xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);

 

 

12. 워크시트 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlWorkSheet);

 

13. 워크시트 가져오기

  1: xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(/*워크시트 인덱스*/);

 

 

14. 워크시트 이름 변경

 

  1: xlWorkSheet.Name = /*워크시트 이름*/;

 

 

15. 셀에 내용 설정

 

  1: xlWorkSheet.Cells[y, x] = /*셀 내용*/;

 

 

16. 셀의 값 가져오기

  1: string value = /*알맞는 캐스트로 변경*/(string)(range.Cells[/*Cell Y*/, /*Cell X*/] as Excel.Range).Value2

 

 

17. 셀 범위 설정 (1)

 

  1: Excel.Range range = worksheet.get_Range(/*시작 위치 ex)"A1"*/, /*마지막 위치 ex)"E1"*/);

 

 

18. 셀 범위 설정 (2)

 

  1: Excel.Range range = objSheet.get_Range(/*시작 위치 ex)"A1"*/, Missing.Value);
  2: range = range.get_Resize(/*Width 범위*/, /*Height 범위*/);

 

 

19. 선택된 셀의 행 전체 선택

 

  1: Excel.Range range = ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireRow;

 

 

20. 선택된 셀의 열 전체 선택

 

  1: Excel.Range range = ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn;

 

 

21.  셀 배경 색 설정

 

  1: System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(/*색상 ex)#FFFFFF*/);
  2: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).Interior.Color = System.Drawing.ColorTranslator.ToOle(color);

 

 

22. 셀 내용 포맷 설정 (http://xlsgen.arstdesign.com/core/numberformat.html)

 

  1: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn.NumberFormat = /*포맷 ex)"@"*/;

 

 

23. 셀 크기 자동 맞춤

 

  1: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn.AutoFit();
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG C#, Excel, xls, 엑셀

1. Drop 처리 할 Form 생성
 




2. 생성된 컨트롤 속성 변경 (AllowDrop - True)




3. 아래 코드 삽입 (IDC_DROP_BOX은 컨트롤 이름임)

private void IDC_DROP_BOX_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy | DragDropEffects.Scroll;
}

}

private void IDC_DROP_BOX_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string str in file)
{
/*여기에 파일 처리*/
}
}
 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC

아래 함수 호출

private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
        MessageBox.Show("Unable to release the Object " + ex.ToString());
    }
    finally
    {
        GC.Collect();
    }


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
DirectoryInfo dirInfo = new DirectoryInfo(path);
if (dirInfo.Exists) dirInfo.Delete(true);

true를 false로 바꾸면 하위 폴더 및 파일은 삭제하지 않음. 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC

1. XML 문서 생성하기
 XmlDocument xmlDoc = new XmlDocument();

2. XML 가져오기
 xmlDoc.Load(/*파일 이름*/);

3. 정의 설정하기
 XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
 xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);

4. 루트 요소 가져오기
 XmlElement rootElement = xmlDoc.DocumentElement;

5. 요소 생성하기
 XmlElement element = xmlDoc.CreateElement(/*요소 이름*/);

6. 요소 추가하기 (루트 요소로 설정 / XmlDocument 에 추가)
 xmlDoc.AppendChild(element);

7. 요소 추가하기 (자식 요소로 추가 / XmlNode에 추가)
 node.AppendChild(element);

8. 자식 노드 가져오기
 XmlNode node = xmlDoc.FirstChild;

9. 자식 노드 가져오기 (복수)
 XmlNodeList nodes = node.ChildNodes;

10. 자식 노드 탐색
 foreach (XmlNode node in nodes);

11. 형제 노드 가져오기
 XmlNode sibiling = node.NextSibling;

12. 애트리뷰트 값 가져오기
 string value = node.Attributes[/*애트리뷰트 이름*/].Value;

13. 애트리뷰트 설정하기 (XmlElement에 설정)
 element.SetAttribute(/*애트리뷰트 이름*/, /*애트리뷰트 값*/);

14. 애트리뷰트 설정하기 (XmlNode에 설정)
 XmlAttributeCollection acxNode = node.Attributes;
 XmlAttribute newAttr = xmlDoc.CreateAttribute(/*애트리뷰트 이름*/);
 newAttr.Value = /*애트리뷰트 값*/;
 acxNode.SetNamedItem(newAttr);

15. 고정된 깊이의 노드들을 리스트로 가져오기
 XmlNodeList nodeList = xmlDoc.SelectNodes("//parent/child");   

16. XML 저장하기
 xmlDoc.Save(/*파일 이름*/);







저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG C#, XML