Excel 파일에서 데이터를 읽고 있습니다. 일반 Excel 파일을 읽을 때 잘 작동하지만 아래와 같은 열이있는 Excel 파일을 읽으면 워크 시트를 찾지 못하고 예외가 발생합니다.
Microsoft Jet 데이터베이스 엔진이 'Sheet1 $ _'개체를 찾을 수 없습니다. 개체가 존재하고 해당 이름과 경로 이름을 올바르게 입력했는지 확인하십시오.
Excel을 읽는 내 코드는-
private static DataTable getExcelData(string ExcelPath)
{
OleDbConnection con;
string connectionString;
string[] pathArray = ExcelPath.Split('.');
var Extention = pathArray[pathArray.Length - 1];
if (Extention == "xlsx")
//read a 2007 file
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
ExcelPath + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
else
//read a 97-2003 file
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
ExcelPath + ";Extended Properties=Excel 8.0;";
con = new OleDbConnection(connectionString);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
DataTable dbSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, null);
var firstSheetName = dbSchema.Rows[0]["TABLE_NAME"];
OleDbDataAdapter cmd = new OleDbDataAdapter("select * from [" + firstSheetName + "] Where NOT [Event Code]=''", con);
DataSet ds = new DataSet();
cmd.Fill(ds);
con.Close();
return ds.Tables[0];
}
}
월, 화 등의 모든 열을 가져와야합니다.
GetOleDbSchemaTable 은 Excel 파일에 숨겨진 테이블도 반환합니다. 일반적으로 다음과 같은 이름 Sheet1$_
은에 필터를 적용 할 때 생성되는 숨겨진 테이블을 나타냅니다 Sheet1$
.
코드를 변경해야합니다.로 끝나는 테이블을 검색 $
하여 set firstSheetName
.
있습니다 그들이 Excel에서 있었다으로 OLEDB는 시트 순서를 보존하지 않습니다 .
또한 여러 행 제목이있는 Excel 파일을 읽으려면이 작업을 수행해야합니다.
HDR=No
에서 EXTENDED PROPERTIES
연결 문자열의OleDbCommand
처음 두 행을 건너 뛰 려면 열 이름을 지정하고 범위를 선택하십시오.예를 들면 :
SELECT [F1] AS Location,
[F2] AS EmpId,
[F3] AS EmpName,
[F4] AS MondayShift,
[F5] AS Monday15Min,
[F6] AS Monday30Min,
[F7] AS Monday15Min2
FROM [Sheet1$A3:G]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다