전환: C# Excel 파일 읽기(2009년 9월 28일)

5112 단어 Excel
원문:유무 | 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 속성을 추가할 수 있습니다
예:
C#-Code:
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만 추가하면 됩니다.
C#-Code:
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 만약에 작업표의 이름이나 이름을 모르고 수정되면 어떻게 해야 하나요?
우리는 색인을 통해 지정된 작업표의 이름을 얻을 수 있습니다. 다음 방법은 작업표 이름의 그룹을 얻을 수 있습니다.
C#-Code:
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;

좋은 웹페이지 즐겨찾기