첨부파일로 엑셀이나 CSV를 가져오면 DataTable로 변환하는 함수
1.
전송하는 폼 속성 <form name="theForm" enctype="multipart/form-data" >
2.
업로드된 파일의 정보를 가져온다
string strGroupName = Request["name"];
string strGroupInfo = Request["info"];
string strFileName;
string strNewPath;
string strFileExtension;
string strXlsFile = Request.Files[0].FileName;
System.IO.FileInfo fi = new System.IO.FileInfo(strXlsFile);
strFileName = fi.Name;
strFileExtension = fi.Extension;
strNewPath = @"D:\TempUploadFolder\" + strFileName;
//업로드 된 파일 저장
Request.Files[0].SaveAs(strNewPath);
ExcelConvert ec = new ExcelConvert(strGroupName, strGroupInfo, strNewPath, strFileExtension);
2.
업로드 된 파일을 체크한 다음 어떤 파일이 업로드 되었는지 비교후
Provider를 선택하여 해당파일에 OleDB 컨넥션하여 자료를 가져옴
OleDB로 CSV를 접근하려면 파일 Format을 설정해야함
1. 업로드한 파일과 같은 경로에 schema.ini을 생성하던가 생성방법
2. 레지스터리의
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text
의 값중 Format 의 값을 CSVDelimited 으로 변경해줘야함
/// 엑셀을 가져와서 DataTable로 리턴
public DataTable GetExclefile()
{
string strProvider = string.Empty;
string strQuery = string.Empty;
if (StrExtension == ".xls")
{
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + StrFilePath + "; Extended Properties=Excel 8.0";
}
else if (StrExtension == ".xlsx")
{
strProvider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + StrFilePath + "; Extended Properties=Excel 12.0";
}
else if (StrExtension == ".csv")
{
StrFilePath = @"D:\TempUploadFolder\";
strProvider = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + StrFilePath + "; Extended Properties='Text;HDR=NO;FMT=Delimited;';";
}
if (StrExtension == ".csv")
{
strQuery = string.Format("SELECT * FROM [{0}]", StrFileName);
}
else
{
strQuery = "SELECT * FROM [Sheet1$]";
}
OleDbConnection oleDBCon = null;
OleDbCommand oleDBCom = null;
OleDbDataReader oleDBReader = null;
DataTable dt = new DataTable("SMS_GROUP_USER");
DataColumn dc1 = new DataColumn("SMS_Group_IDX", typeof(int));
DataColumn dc2 = new DataColumn("SMS_Name", typeof(string));
DataColumn dc3 = new DataColumn("SMS_Email", typeof(string));
DataColumn dc4 = new DataColumn("SMS_Phone", typeof(string));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
DataRow dr;
using (oleDBCon = new OleDbConnection(strProvider))
{
oleDBCom = new OleDbCommand(strQuery, oleDBCon);
oleDBCon.Open();
oleDBReader = oleDBCom.ExecuteReader(CommandBehavior.CloseConnection);
while (oleDBReader.Read())
{
dr = dt.NewRow();
dr["SMS_Group_IDX"] = IntGroupID;
dr["SMS_Name"] = StringUtil.CutStr(oleDBReader[0].ToString(), 50);
dr["SMS_Email"] = StringUtil.CutStr(oleDBReader[1].ToString(), 100);
dr["SMS_Phone"] = StringUtil.CutStr(oleDBReader[2].ToString(), 14);
dt.Rows.Add(dr);
}
IntGroupUserCount = dt.Rows.Count;
return dt;
}
}
~~~~
'Study > Programming' 카테고리의 다른 글
C# UltraGrid 방향키 KeyMapping (0) | 2011.03.17 |
---|---|
C# 파일 입출력 예제 (0) | 2011.02.27 |
C# Excel Upload (0) | 2011.02.15 |
C# 울트라그리드 멀티헤더 (0) | 2011.02.14 |
C# 키 유효성 검사 숫자만 입력 (0) | 2011.01.25 |