2017-06-04 30 views
0

我有這樣的代碼讀取Excel文件:有沒有一種簡單的方法來刪除/忽略使用OleDbConnection Excel文件中的列名上面的行?

string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
    "Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=YES\";"; 

using (OleDbConnection conn = new OleDbConnection(connStr)) 
{ 
    conn.Open(); 
    DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
    string sheetName = dtSchema.Rows[0].Field("TABLE_NAME"); 
    OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", conn); 
    sheetAdapter.Fill(sheetData); 

    DataTable dtColumns = conn.GetSchema("Columns", new string[] { null, null, sheetName, null }); 

    ... 
}

我的代碼需要使用/看列標題。以上僅適用於列標題是第一行的情況。有時,我們從客戶端接收到的Excel文件在列標題上方有幾行,並帶有一些關於Excel中數據的元數據。發生這種情況時,列標題將位於第10行。

我可以打開Excel文件並手動刪除列標題上方的額外行,這可以解決問題。但是我們想要刪除這個手動步驟。

是否有任何簡單的方法來刪除/忽略列頭之上的這些額外的起始行?或者我必須拿出自定義代碼?我能想到的最好方法是關閉HDR,然後每列中具有值的第一行是列標題行。有更容易的方法嗎?

回答

0

據我所知(過去檢查過這個問題)沒有辦法從excel文件中使用SQL查詢選擇一個表格System.Data.OleDb如果頭文件沒有放在第1行中。
解決方案適用於我(比如你做)是在查詢工作表之前刪除標題行上的所有行 - 只需打開工作簿,刪除多餘的行,關閉它並查詢它。

Excel是一個非常強大的工具,但從來沒有被設計爲像數據庫(例如SQL \ Access文件)行爲。

0

我有從Excel讀取的代碼,需要忽略工作表中的前11行,並從列A到P讀取最多64000行。

// Read columns A - P after skipping 11 rows to read the header row 
string ExcelDataQuery = string.Concat("SELECT * FROM [", sheetname, "A12:P64012]"); 
相關問題