2
두 개의 Excel 워크 시트가로드됩니다. 두 행 모두 정확히 1 행에서 동일한 헤더를 가지고 있습니다. 둘 다 동일한 코드를 사용하고 있습니다.OLEDB를 사용하여로드 된 두 개의 Excel 테이블이 거의 같습니다. 하나는 헤더와 하나가 없습니다.
이제 두 번째 파일의 머리글을 얻었고 첫 번째 머리글은 없습니다.
코드 :
private static string GetExcelConnectionString(string Filename){return "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + Filename + ";Extended Properties = \"Excel 12.0 Xml;HDR=YES\"";}
private static void AddToListByOLE(string Filename, ref System.Collections.Generic.List<System.Data.DataTable> MyList, int nTab = -1)
{
string sql = string.Empty;
using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(GetExcelConnectionString(Filename)))
{
using (System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter())
{
System.Data.DataTable dt = new System.Data.DataTable();
using (System.Data.OleDb.OleDbCommand command = cn.CreateCommand())
{
cn.Open();
System.Data.DataTable dtSchema = cn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME");
sql = "SELECT * FROM [" + firstSheetName + "]";
command.CommandText = sql;
adapter.SelectCommand = command;
adapter.Fill(dt);
if (dt.Rows.Count == 0)
{
System.Data.OleDb.OleDbDataReader reader = command.ExecuteReader();
dt.Load(reader);
}
cn.Close();
MyList.Add(dt);
}
}
}
}
: 첫번째 수입 (DataTable의에서, 헤더)의
결과
두 번째 가져 오기 결과 (헤더로 올바른 가져 오기) :
아무도 아이디어가 있습니까? 나는 절대적으로 같은 연결 문자열 (파일 이름 제외)을 사용하여 루프에서이 파일을로드하고 같은 기능을 사용하므로 실제로 아이디어가 없습니다.
는, 사전에 감사 J.
헤더가없는 워크 시트의 연결 문자열을'HDR = No'로 변경해야합니다. HDR은 Header! –
고맙습니다.하지만 해결책은 아닙니다. 이제 두 파일 모두 헤더가 없습니다. 나는 datatable의 컬럼을 엑셀 시트의 헤더로 명명하고 싶다. – Jan021981
질문을 만족스럽게 표시하는 올바른 방법은 대답을 수락하는 것입니다. 제목을 변경하지 마십시오. –