Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- PostgreSQL
- 장고
- speechtoText
- forof문
- sqlite
- cmd명령어
- Python
- 장고프로젝트
- 이행은이미다른테이블에속해있습니다
- 오류종류
- 사례관리
- 파이썬
- 자바스크립트날짜get
- 다른테이블에속해있습니다
- 자바스크립트수학
- 장고웹프로젝트
- 자바스크립트날짜
- 청소년복지론
- 개발
- 이행은이미다른
- 자바스크립트forinforof차이
- webkitrecognition
- speechAPI
- Android
- 안드로이드
- 자바스크립트날짜형식
- 장고웹
- 자바스크립트for문
- javaScriptError
- R데이터분석
Archives
- Today
- Total
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 사용하는 방법에 대해 알고 싶으신 분들은 아래의 링크를 참고해주세요.
// 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는 위의 코드를 보면 알 수 있듯이 각각 열마다 있는 데이터를 가져오고 있죠.
코드를 정확하게 입력하셨으면 위의 사진과 같이 데이터를 가져올 수 있습니다.
'언어 > C#' 카테고리의 다른 글
C# : DataGridView Cell 밑줄 넣기 Underline (0) | 2021.02.26 |
---|---|
C# : TreeList 특정 노드 찾기 및 TreeListNode 추가하기 : FindNodeByFieldValue (0) | 2020.12.31 |
C# : SEED 비밀번호 암호화 처리 (1) | 2020.05.08 |
C# : DataGridView Header Sort 막기 (0) | 2020.04.17 |
C# : Windows Forms ComboBox 수정 못하게 막는 방법 (0) | 2020.04.08 |
Comments