본문 바로가기
개발언어/C#

[C#] EXCEL File을 읽고 쓰는 방법

by 창용이랑 2022. 9. 27.
728x90

1. Microsoft.Office.Interop.Excel 참조 

솔루션 탐색기에서 참조를 선택 후 마우스 오른쪽 버튼 클릭

 

어셈블리 > 검색에 Microsoft.Office.Interop.Excel 검색 > 결과 뜨면 체크 > 확인

 

2. using 입력 

 

3. TEST 환경 구축

- winform에 textbox를 추가해 Excel 경로를 입력하게 하고 

- 버튼을 누르면 

- richtextbox에 내용을 담거나, 읽어서 엑셀에 쓰도록 하려고 한다. 

 

 

4. 버튼 클릭 이벤트 생성

버튼 선택 후 속성창에서 번개모양 선택 후 Click을 찾아 더블클릭하면 자동으로 생성된다 

버튼을 클릭하면 textbox안에 있는 경로의 excel file을 읽어서

첫번째 sheet를 사용하고, 글이 작성되어있는 부분의 range를 받아, 내용을 읽어 richtextbox에 append한다.

 

여기서 파일 경로는 해당부분을 변경해주면 되고, 

  Microsoft.Office.Interop.Excel.Workbook _workbook = _app.Workbooks.Open(filepath, 0, true, 5, "", ":", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

 

sheet는 해당 부분을 

Microsoft.Office.Interop.Excel.Worksheet _worksheet = (Microsoft.Office.Interop.Excel.Worksheet)_workbook.Worksheets.get_Item(1);

 

그리고 현재는 "A"열의 정보를 가져온다.

 if (_worksheet.get_Range("A"+i).Value2 == null) acolumn = "";

  private void button1_Click(object sender, EventArgs e)
        {
            //File 경로
            string filepath = textBox1.Text;

            //APP 연결, WORKBOOK 설정, WORKSHEET 설정 
            Microsoft.Office.Interop.Excel.Application _app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook _workbook = _app.Workbooks.Open(filepath, 0, true, 5, "", ":", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            //첫 번째 SHEET 사용 / 만약 2번째 SHEET 사용 시 .get_Item(2) 
            Microsoft.Office.Interop.Excel.Worksheet _worksheet = (Microsoft.Office.Interop.Excel.Worksheet)_workbook.Worksheets.get_Item(1);
            object misvalue = System.Reflection.Missing.Value;

            //사용되어진 column의 갯수와 row 갯수를 변수로 저장 
            int column_Count = _worksheet.UsedRange.Columns.Count;
            int row_Count = _worksheet.UsedRange.Rows.Count;

            string acolumn = "";
            //1번째 줄부터, row_count까지 
            for (int i = 1; i<= row_Count; i++)
            {
                if (_worksheet.get_Range("A"+i).Value2 == null) acolumn = "";
                else acolumn = _worksheet.get_Range("A"+i).Value2.ToString();

                richTextBox1.AppendText(i.ToString() + "번째줄 " + acolumn + "\n");
            }
        }

 

5. Excel에 Data를 쓰기

Excel에 쓰여진 글을 읽어왔으니, 데이터를 쓰기도 해보자

Excel에 쓸 때 사용되는 내용은 다음과 같다. 

 _worksheet.Cells[i, 2] = i.ToString(); 

 

   private void button1_Click(object sender, EventArgs e)
        {
            //File 경로
            string filepath = textBox1.Text;
            string newfilepat=  @"C:\testexcel2.xlsx";
            //APP 연결, WORKBOOK 설정, WORKSHEET 설정 
            Microsoft.Office.Interop.Excel.Application _app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook _workbook = _app.Workbooks.Open(filepath, 0, true, 5, "", ":", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            //첫 번째 SHEET 사용 / 만약 2번째 SHEET 사용 시 .get_Item(2) 
            Microsoft.Office.Interop.Excel.Worksheet _worksheet = (Microsoft.Office.Interop.Excel.Worksheet)_workbook.Worksheets.get_Item(1);
            object misvalue = System.Reflection.Missing.Value;

            //사용되어진 column의 갯수와 row 갯수를 변수로 저장 
            int column_Count = _worksheet.UsedRange.Columns.Count;
            int row_Count = _worksheet.UsedRange.Rows.Count;

            string acolumn = "";

            for (int i = 1; i <= 10; i++ )
            {
                _worksheet.Cells[i, 2] = i.ToString();
            }
                //1번째 줄부터, row_count까지 
            _workbook.SaveAs(newfilepat);
            _workbook.Close(false, misvalue, misvalue);
            _app.Quit();
        }

 

 

 

[참고1] 참고로 새로 저장할 이름을 그냥 string으로 적어서 사용했지만, 하단 링크를 참조해 경로, 파일이름, 파일형식으로 분리하여 다음과같이 사용할 수도 있겠다. 

  _eWorkbook.SaveAs(filepath + @"\" + filename + "_Revised" + extension);

https://hengs.tistory.com/38

 

[c#] file 경로를 경로, 파일이름, 파일 형식으로 분리

1. USING 작성 using System.IO; 2. 소스 작성 private void button1_Click(object sender, EventArgs e) { //File 경로 string fullpath = textBox1.Text; string filepath = Path.GetDirectoryName(fullpath).To..

hengs.tistory.com

 

[참고2] 데이터를 읽을 때도 "A"라고 특정 열의 알파벳을 지정했다.

반복문으로 실행 시 i를 주고 i열의 알파벳을 받고싶을 때 해당 링크를 참조하자. 

https://hengs.tistory.com/40

 

[c#] 숫자를 엑셀 열 알파벳으로 변환

excel을 읽어올 때 _worksheet.get_Range("A" + i).Value2 이런식으로 읽어오다 보니, for( int i =0; i<=100; i++) 이런식으로 반복문을 한다고 했을 때 22번째 열의 알파벳은 무엇인가? 에 대한 고민을 한적이..

hengs.tistory.com

 

 

출처 : https://hengs.tistory.com/39