둘/[ C# ]
[C#] csv load using DataTable
by Kieran_Han
2022. 6. 3.
using ExcelDataReader;
using System;
using System.Data;
using System.IO;
using System.Threading.Tasks;
namespace CSV_test
{
class Program
{
static void Main()
{
// 경로 내 csv를 저장할 빈 list 생성
List<string> listpath = new List<string>();
// openFileDialog로 처음에 경로 지정 ↓예시
string path = "C:\\Users\\KIERAN\\Desktop\\C# Test\\Data";
if (Directory.Exists(path))
{
DirectoryInfo di = new DirectoryInfo(path);
/// 지정한 경로 내 하위 폴더를 포함하여 csv 확장자만 불러옴
var files = di.EnumerateFiles("*.csv", SearchOption.AllDirectories);
/// listpath라는 리스트에 파일들 경로 하나씩 저장 ex) listpath[0]
foreach (var item in files)
{
listpath.Add(item.ToString());
}
}
/// Batch File 위치를 listpath list에서부터 하나씩 가져와 지정함
var stream1 = File.Open(listpath[0], FileMode.Open, FileAccess.Read);
/// stream(경로)으로부터 DataSet이된 Excel을 DataTable형식으로 바꿈 for 특정 Column, Row로부터 값을 가져오기 위함
DataTable Batch1_Excel = ExcelToDataTable(stream1)[0];
var aaaa = Batch1_Excel.DefaultView.ToTable(false, "Excel Features").Rows[0];
var bbbb = aaaa[0];
Console.WriteLine(aaaa);
}
/// <summary>
/// listpath list로부터 경로를 stream으로 가져와서 DataSet으로 Excel을 가져옴
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
static DataTableCollection ExcelToDataTable(FileStream stream)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
using (var reader = ExcelReaderFactory.CreateCsvReader(stream))
{
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (data) => new ExcelDataTableConfiguration()
{
UseHeaderRow = true
}
});
return result.Tables;
}
}
}
}