2017-07-18 74 views
0
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", path + new_filename); 

OleDbConnection objConn = null; 
System.Data.DataTable dt_sheet = null; 
objConn = new OleDbConnection(connectionString); 
objConn.Open(); 

dt_sheet = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 

string SheetName = dt_sheet.Rows[0]["TABLE_NAME"].ToString(); 

if (dt_sheet.Rows.Count > 0) 
{ 
    if (dt_sheet.Rows[0]["TABLE_NAME"].ToString() == Handle.ToString(SheetName)) 
    { 
     string query = String.Format("select * from [{0}]", SheetName); 
     OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); 

     DataTable dt = new DataTable(); 

     dataAdapter.Fill(dt); 

     //rest code 
    } 
} 

如果我將data-> text轉換爲column-> text,但在我的情況下,日期將以強制日期格式輸入日期。我已經通過日期翻轉問題在stackoverflow,但它採取單一領域。我想在dataTable中獲得完整的excel,而不需要翻閱日期。有沒有什麼辦法可以搞定。另外一個問題是,在excel日期的某個時候可以僅僅作爲文本上傳,所以在後面的代碼中,我不能去強制功能來翻轉日期。 我使用的Visual Studio 2013,C#將excel導出爲數據表時,日期和月份值正在翻轉

+0

我可以建議的最好的方法是循環瀏覽表單中的結果,並根據需要評估和重新格式化日期,然後填充數據表。 – Ortund

+0

如果你能爲此創建一個[mcve],那將是非常有用的。 – Enigmativity

+0

@Enigmativity您是否在談論我的建議? – Ortund

回答

0

假設datetime值都在您的電子表格的同一列,它應該是比較容易來循環行和重新格式化需要的日期:

if (dt_sheet.Rows.Count > 0) 
{ 
    if (dt_sheet.Rows[0]["TABLE_NAME"].ToString() == Handle.ToString(SheetName)) 
    { 
     foreach (DataRow row in dt_sheet.Rows) 
     { 
      row[3] = (DateTime)row[3].ToString("mm/dd/yyyy") as DateTime; 
     } 
     // The rest of your code goes here. 
    } 
} 

我沒有時間測試此代碼,但它應該足以讓您前進。

+0

對不起,但它給出了一個錯誤「方法沒有超載'Tostring'需要'1'參數」。 –

+0

'行[3]'是一個「對象」。您需要首先將其轉換爲DateTime,然後調用ToString方法。 –

+0

嘗試在行尾添加'as DateTime;'。 '(日期時間)演員應該照顧這一點,雖然 – Ortund

相關問題