c# excel 파일을 읽는 방법
OLEDB를 사용하면 excel 파일을 읽을 수 있습니다. 이 excel 파일을 데이터 원본으로 사용하면 됩니다.
D 디스크에서 excel 파일 테스트를 만듭니다.xls:
2 워크시트 시트 1의 내용을 DataSet으로 읽기
C#-Code:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
"Extended Properties='Excel 8.0'";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);
읽기 DataSet:
그림에서 excel 파일의 첫 번째 줄이 DataSet의 열 이름으로 바뀌었다는 것을 알 수 있습니다. 이것이 바로 시스템의 기본 설정입니다.
3 첫 줄도 데이터 줄로 하려면 연결 문자열에 HDR=no 속성
예:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
"Extended Properties='Excel 8.0;HDR=No'";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);
첫 번째 줄의 첫 번째 열과 세 번째 열은 모두 비어 있다. 이것은 시스템이 첫 번째 열을 숫자로 식별하고 세 번째 열을 날짜로 식별하기 때문이다. 첫 번째 줄의 데이터는 형식의 요구에 부합되지 않기 때문에 비어 있다.
4 모든 열을 문자열로 읽을 수 있습니다. 속성 IMEX=1만 추가하면
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
"Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);
다시 한 번 예상을 벗어난 것이 아닙니까? 세 번째 줄의 날짜가 어떻게 숫자가 되었습니까? 사실 excel은 형식을 바꿀 때 자동으로 날짜를 숫자로 바꿨습니다. 그러면 이 숫자는 어떻게 된 것입니까?만약 당신이 날짜를 1900년 1월 1일로 바꾼다면, 당신은 그의 전환 결과가 1이라는 것을 볼 수 있을 것이다. 이와 같이 39902가 어느 날인지 알 수 있을 것이다.
5 excel 전체 내용을 읽고 싶지 않을 수도 있습니다
앞의 두 열만 읽으려면: select * from [sheet1$A:B]
A1에서 B2까지의 내용만 읽으려면: select * from [sheet1$A1:B2]
6 작업표의 이름이나 이름을 모르면 어떻게 해야 하나요?
우리는 색인을 통해 지정된 작업표의 이름을 얻을 수 있습니다. 다음 방법은 작업표 이름의 그룹을 얻을 수 있습니다.
ArrayList al = new ArrayList();
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable
(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
conn.Close();
foreach (DataRow dr in sheetNames.Rows)
{
al.Add(dr[2]);
}
return al;