반응형
* 엑셀 파일 쓰고 읽기 예제...
위 그림과 같이 프로젝트에 참조를 추가 해 줍니다.
참조가 추가 되었으면 이제 메인화면을 만들어 봅니다.
소스 구현을 하기에 앞서 미리 엑셀 파일을 열어 D:\통합 문서.xls 로 샘플로 하나 저장 해 놓았습니다.
샘플로 파일 하나 만들고 위치는 어디에 있던 상관 없습니다.
Form.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
namespace CSharp_ExcelFile
{
public partial class Form1 : Form
{
Excel.Application ExcelApp = null;
Excel.Workbook wb = null;
Excel.Worksheet ws = null;
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
//Read
//파일이 없다면...
if (!File.Exists("C:\\Test.xls"))
{
textBox1.Text += "파일이 존재 하지 않습니다." + System.Environment.NewLine;
return;
}
try
{
ExcelApp = new Excel.Application();
wb = ExcelApp.Workbooks.Open("C:\\Test.xls",
0,
true,
5,
"",
"",
true,
Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
ws = wb.Worksheets["Sheet1"] as Excel.Worksheet;
Excel.Range rg = ws.Cells[1, 1] as Excel.Range ;
Excel.Range rg2 = ws.Cells[1, 2] as Excel.Range;
Excel.Range rg3 = ws.Cells[1, 3] as Excel.Range;
Excel.Range rg4 = ws.Cells[1, 4] as Excel.Range;
//범위 지정...
Excel.Range rgTest = ws.get_Range("A1", "A4");
System.Array ayTest = (System.Array)rgTest.Cells.Value2 ;
string[] strArray = ConvertToStringArray(ayTest);
//텍스트 박스에 디스플레이...
textBox1.Text += "A1: " + rg.Value2.ToString() + System.Environment.NewLine;
textBox1.Text += "A2: " + rg2.Value2.ToString() + System.Environment.NewLine;
textBox1.Text += "A3: " + rg3.Value2.ToString() + System.Environment.NewLine;
textBox1.Text += "A4: " + rg4.Value2.ToString() + System.Environment.NewLine;
textBox1.Text += "===========================" + System.Environment.NewLine;
textBox1.Text += "Excel File Read..." + System.Environment.NewLine; ;
textBox1.Text += "===========================" + System.Environment.NewLine;
//범위 결과 표시...
for (int iCount = 0; iCount < strArray.Length; iCount++)
{
//범위 테스트
textBox1.Text += "A"+ (iCount+1).ToString() +": " + strArray[iCount] + System.Environment.NewLine;
}
//파일 닫기...
wb.Close(false, Type.Missing, Type.Missing);
wb = null;
ExcelApp.Quit();
}
catch (Exception ex)
{
//객체들 메모리 해제
ReleaseExcelObject(ws);
ReleaseExcelObject(wb);
ReleaseExcelObject(ExcelApp);
//가비지 컬렉션 직접 실행...
GC.Collect();
}
finally
{
//객체들 메모리 해제
ReleaseExcelObject(ws);
ReleaseExcelObject(wb);
ReleaseExcelObject(ExcelApp);
//가비지 컬렉션 직접 실행...
GC.Collect();
}
}
private void button1_Click(object sender, EventArgs e)
{
//Write
//파일이 존재 한다면..삭제 하고..
if (File.Exists("C:\\Test.xls"))
{
File.Delete("C:\\Test.xls");
}
try
{
ExcelApp = new Excel.Application();
wb = ExcelApp.Workbooks.Open("D:\\통합 문서.xls",
0,
true,
5,
"",
"",
true,
Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
ws = wb.Worksheets["Sheet1"] as Excel.Worksheet;
//엑셀 시트 인덱스 번호는 0,0 부터 시작 하는 것이 아니라 1,1 A1 부터 시작 함. 0,0 으로 시작하면 오류...
//시트에 값 쓰기...
ws.Cells[1, 1] = "1";
ws.Cells[1, 2] = "12";
ws.Cells[1, 3] = "123";
ws.Cells[1, 4] = "1234";
ws.Cells[2, 1] = "Test1"; //A2
ws.Cells[3, 1] = "Test12"; //A3
ws.Cells[4, 1] = "Test123"; //A4
//포뮬러 셋팅하기
//Excel.Range rg = ws.Cells[1,1] as Excel.Range;
//rg.Formula = "=SUM($A$1:$A$100)";
//string strTmp = rg.Formula.ToString();
//텍스트 박스에 디스플레이...
textBox1.Text += "A1: 1" + System.Environment.NewLine ;
textBox1.Text += "A2: 12" + System.Environment.NewLine;
textBox1.Text += "A3: 123" + System.Environment.NewLine;
textBox1.Text += "A4: 1234" + System.Environment.NewLine;
textBox1.Text += "===========================" + System.Environment.NewLine;
textBox1.Text += "Excel File Write..." + System.Environment.NewLine; ;
textBox1.Text += "===========================" + System.Environment.NewLine;
//다른 이름으로 저장하기...
//wb.Save(); // => 오픈한 파일 그대로 저장...
wb.SaveAs("C:\\Test.xls",
Excel.XlFileFormat.xlWorkbookNormal,
Type.Missing ,
Type.Missing,
Type.Missing,
Type.Missing,
Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
//파일 닫기...
wb.Close(false, Type.Missing, Type.Missing);
wb = null;
ExcelApp.Quit();
}
catch (Exception ex)
{
//객체들 메모리 해제
ReleaseExcelObject(ws);
ReleaseExcelObject(wb);
ReleaseExcelObject(ExcelApp);
GC.Collect();
}
finally
{
//객체들 메모리 해제
ReleaseExcelObject(ws);
ReleaseExcelObject(wb);
ReleaseExcelObject(ExcelApp);
GC.Collect();
}
}
private void ReleaseExcelObject(object obj)
{
try
{
if (obj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
}
catch (Exception ex)
{
obj = null;
throw ex;
}
finally
{
GC.Collect();
}
}
private string[] ConvertToStringArray(System.Array ayValues)
{
string[] strArray = new string[ayValues.Length];
for (int i = 1; i <= ayValues.Length; i++)
{
if (ayValues.GetValue(i, 1) == null)
{
strArray[i - 1] = "";
}
else
{
strArray[i - 1] = (string)ayValues.GetValue(i, 1).ToString();
}
}
return strArray;
}
}
}
* 예제 결과 화면
[C#] File Create & Delete & Read & Write 예제
https://kdsoft-zeros.tistory.com/135
반응형
'C# Programming' 카테고리의 다른 글
[C#] 폴더 및 파일, 드라이브 사이즈 (Size) 구하기 (0) | 2019.10.02 |
---|---|
[C#] 레지스트리를 이용 윈도우 시작 시 프로그램 자동 실행 (3) | 2019.09.30 |
[C#] File Create & Delete & Read & Write 예제 (0) | 2019.09.25 |
[C#] INI File Create & Read & Write (0) | 2019.09.24 |
[C#] 레지스트리(Registry) Create , Read, Write, Delete (0) | 2019.09.22 |