EMDI는 지금도 개발중

C# : OpenFileDialog 파일 불러오기 엑셀 열기 및 DataTable 데이터 받기 How to export Excel file to DataTable 본문

언어/C#

C# : OpenFileDialog 파일 불러오기 엑셀 열기 및 DataTable 데이터 받기 How to export Excel file to DataTable

EMDI 2020. 12. 30. 15:21

이번 글에서는 SaveFileDialog에 이어 파일을 불러올 수 있는 OpenFileDialog에 대해 배워보도록 하겠습니다. 만약 SaveFileDialog 사용하는 방법에 대해 알고 싶으신 분들은 아래의 링크를 참고해주세요.

 

C# : SaveFileDialog 엑셀 저장 및 열기 How to open Excel File after save in C#

이번 글에서는 SaveFileDialog를 이용해서 엑셀을 저장하고 난 뒤, 해당 저장한 엑셀 파일을 여는 방법에 대해 설명하도록 하겠습니다. 단순 저장만 하려고 했는데 어쩌다보니 해당 엑셀 파일을 열

milkoon1.tistory.com

 

// using 참조
using Excel = Microsoft.Office.Interop.Excel;

private DataTable get엑셀데이터가져오기()
{
	try
	{
    		//-------------------------------------------------------------------------
		string path = @"";
		OpenFileDialog dialog = new OpenFileDialog();
		dialog.InitialDirectory = @"D:\";             // 디폴트 경로

		if (dialog.ShowDialog() == DialogResult.OK)
		{
			path = dialog.FileName;
		}
		//-------------------------------------------------------------------------
		DataTable _printData = new DataTable();
		if (!_printData.Columns.Contains("source_name")) { _printData.Columns.Add("source_name"); };
		if (!_printData.Columns.Contains("source_type")) { _printData.Columns.Add("source_type"); };
		if (!_printData.Columns.Contains("file_type")) { _printData.Columns.Add("file_type"); };
		if (!_printData.Columns.Contains("url_path")) { _printData.Columns.Add("url_path"); };
		if (!_printData.Columns.Contains("file_path")) { _printData.Columns.Add("file_path"); };

		DataRow row;
		int index = 0;
		object rowIndex = 2;

		Excel.ApplicationClass app = new Excel.ApplicationClass();
		Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
		Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;

		while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2 != null)
		{
			rowIndex = 2 + index;
			row = _printData.NewRow();
			row[0] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 1]).Value2);
			row[1] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 2]).Value2);
			row[2] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 3]).Value2);
			row[3] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 4]).Value2);
			row[4] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 5]).Value2);
			index++;
			_printData.Rows.Add(row);
		}
		app.Workbooks.Close();

		return _printData;
	}
	catch (Exception ex)
	{
		return null;
	}
}

1) 파일 불러오기(OpenFileDialog) : 이미 저장되어 있는 파일을 불러오고 싶은 경우에는 OpenFileDialog 클래스를 사용하면 됩니다.

string path = @""; // OpenFileDialog에서 받은 경로를 담을 변수
OpenFileDialog dialog = new OpenFileDialog(); // 생성자 생성
dialog.InitialDirectory = @"D:\";             // 화면을 띄웠을 때 처음 보여줄 경로

if (dialog.ShowDialog() == DialogResult.OK) // ShowDialog()로 화면 띄우기
{
	path = dialog.FileName; // 선택한 파일의 경로 받기
	// 그 외 필요한 내용 적기
} 

사용방법은 우선 생성자를 생성한 다음 ShowDialog()를 이용해서 파일을 불러오면 되는데 dialog.FileName이 선택한 파일의 경로를 말합니다.

 

2) 선택한 엑셀을 DataTable에 담기

그 다음 설명할 내용은 선택한 엑셀의 데이터를 DataTable에 옮겨놓는 작업입니다.

DataTable _printData = new DataTable();
if (!_printData.Columns.Contains("source_name")) { _printData.Columns.Add("source_name"); };
if (!_printData.Columns.Contains("source_type")) { _printData.Columns.Add("source_type"); };
if (!_printData.Columns.Contains("file_type")) { _printData.Columns.Add("file_type"); };
if (!_printData.Columns.Contains("url_path")) { _printData.Columns.Add("url_path"); };
if (!_printData.Columns.Contains("file_path")) { _printData.Columns.Add("file_path"); };

우선 엑셀의 Cells(컬럼)과 동일하게 DataTable Columns를 생성해주세요. 컬럼명은 동일할 필요는 없지만 저는 한눈에 보기 쉽게 해놓았습니다.

 

DataRow row;
int index = 0;
object rowIndex = 2;

Excel.ApplicationClass app = new Excel.ApplicationClass();
Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;

while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2 != null)
{
	rowIndex = 2 + index;
	row = _printData.NewRow();
	row[0] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 1]).Value2);
	row[1] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 2]).Value2);
    row[2] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 3]).Value2);
	row[3] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 4]).Value2);
	row[4] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 5]).Value2);
	index++;
	_printData.Rows.Add(row);
}
app.Workbooks.Close();

그 다음은 엑셀의 데이터를 가져오는 작업입니다. 아까 전에 받았던 dialog.FileName을 얻은 이유가 이제 나오네요. app.Workbooks.Open(path, ~) 중 path를 설정하려고 위의 작업을 했던 것입니다.

While문은 엑셀의 Value값이 null이 아닌 경우 반복해서 작업합니다. row는 위의 코드를 보면 알 수 있듯이 각각 열마다 있는 데이터를 가져오고 있죠.

코드를 정확하게 입력하셨으면 위의 사진과 같이 데이터를 가져올 수 있습니다.

Comments