일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- spring boot
- 오류
- 함수
- 리엑트
- 파이어베이스
- 바인딩
- Firebase
- 깃허브
- db
- MVVM
- listview
- GitHub
- HTML
- 자바스크립트
- React JS
- .NET
- JavaScript
- Animation
- Binding
- 플러터
- page
- 닷넷
- MSSQL
- 마우이
- Maui
- 애니메이션
- typescript
- MS-SQL
- AnimationController
- Flutter
Archives
- Today
- Total
개발노트
1. [C#] Excel, csv 파일 DataTable로 변환시키기 본문
반응형
Excel 및 csv 파일을 DataTable로 변환하려면 먼저, 아래와 같이 2가지가 필요합니다.
준비물 1) ExcelDataReader 누겟 설치 (Excel Sheet를 DataSet으로 변환해줌)
준비물 2) OpenFileDialog( 파일열기를 통한 엑셀파일 가져오는 Control)
1. DragDrop으로 파일가져오는 메소드
private void gcList1_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
string filename = files[0].ToString().Trim();
if (MessageBox.Show("Excel 파일을 데이터로 변환시키시겠습니까? \n\n" + filename, "Excel 파일 가져오기", MessageBoxButtons.YesNo) == DialogResult.No) return;
Remove_Columns();
if (filename.Substring(filename.Length - 4, 4) == ".csv")
{
getDataTableFromCsv(filename, false);
}
else
{
Convert_FileToDataTable(filename);
}
}
2. Excel파일을 DataTable로 변환하는 메소드
private void Convert_FileToDataTable(string FileName)
{
//엑셀파일인 경우
FileStream stream = new FileStream(FileName, FileMode.Open, FileAccess.Read);
IExcelDataReader excelDataReader = ExcelReaderFactory.CreateReader(stream); //버전에 따라 CreateReader,CreateBinaryReader
if (stream.Position == 0)
{
excelDataReader = ExcelReaderFactory.CreateBinaryReader(stream); //버전에 따라 CreateReader,CreateBinaryReader
}
DataSet DS_Result = excelDataReader.AsDataSet();
DataTable DT_Result = DS_Result.Tables[0];
lb_TableName.Text = DS_Result.Tables[0].TableName;
lb_Path.Text = stream.Name;
for (int i = 0; i < DT_Result.Columns.Count; i++)
{
DT_Result.Columns[i].ColumnName = DT_Result.Rows[0][i].ToString();
GridColumn column = gvList1.Columns.AddVisible(DT_Result.Columns[i].ColumnName, DT_Result.Columns[i].ColumnName);
gvList1.Columns.Add(column);
gvList1.Columns[i].OptionsColumn.AllowEdit = false;
}
DT_Result.Rows[0].Delete();
DT_Result.AcceptChanges();
gcList1.DataSource = DT_Result;
gvList1.BestFitColumns();
}
3. .csv파일을 DataTable로 변화하는 메소드
private void getDataTableFromCsv(string FileName, bool isFirstRowHeader)
{
//csv파일인경우
string header = isFirstRowHeader ? "Yes" : "No";
string pathOnly = Path.GetDirectoryName(FileName);
string fileName = Path.GetFileName(FileName);
string sql = @"SELECT * FROM [" + fileName + "]";
using (OleDbConnection connection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + "\""))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
DataTable DT_Result = new DataTable();
DT_Result.Locale = CultureInfo.CurrentCulture;
adapter.Fill(DT_Result);
for (int i= 0; i <= 11; i++)
{
DT_Result.Rows[0].Delete();
DT_Result.AcceptChanges();
}
for (int i = 0; i < DT_Result.Columns.Count; i++)
{
DT_Result.Columns[i].ColumnName = DT_Result.Rows[0][i].ToString();
GridColumn column = gvList1.Columns.AddVisible(DT_Result.Columns[i].ColumnName, DT_Result.Columns[i].ColumnName);
gvList1.Columns.Add(column);
gvList1.Columns[i].OptionsColumn.AllowEdit = false;
}
gcList1.DataSource = DT_Result;
gvList1.BestFitColumns();
}
}
Tip) 벌크 카피로 DataTable이 DB에 Insert가 안되거나 NULL값이 들어간다면, 아래와 같이 SqlBulkCopyColumnMapping을 추가해주세요.
SqlBulkCopy sCopy = new SqlBulkCopy();
var mapp = new SqlBulkCopyColumnMapping("Source 칼럼명", "Destination 칼럼명");
sCopy.ColumnMappings.Add(mapp);
- Source 칼럼명 : DataTable의 칼럼명
- Destination 칼럼명: Insert할 DB Table의 칼럼명
감사합니다.
반응형
'미분류 노트' 카테고리의 다른 글
[HTML, CSS] Reset CSS로 HTML 간격 리셋하기 (0) | 2023.05.24 |
---|---|
GitHub Page 무료 호스팅 이용하기 (0) | 2023.05.15 |
ClickOnce로 게시된 .app-ms에 다른 프로그램의 Arguments 값 받아오기 (0) | 2022.12.23 |
빌드는 성공하지만 팅긴다면.. (0) | 2022.11.21 |
Lottie File 커스텀 하기 (0) | 2022.11.16 |
Comments