2014-02-18 6 views
0

У меня есть файл первенствовать содержать час: минуты: секунды (пример: 12:20:00)
я устанавливаю ячейки формат чч: мм: сс в обычае catelogy.
Я использую C# для чтения часа: минута: вторая в этом файле.
Но я получил строка содержит "12/30/1899 12:20:00"
Читайте чч: мм: сс в Ехчел с помощью C#

Почему? Может ли кто-нибудь ответить?
Как решить эту проблему?

Мой код:

string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileExcelCapture.Text + ";Extended Properties='Excel 8.0;HDR=Yes;'"; 
using (OleDbConnection connection = new OleDbConnection(con)) 
{ 
    connection.Open(); 
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using (OleDbDataReader rows = command.ExecuteReader()) 
    { 
     while (rows.Read()) 
     { 
      var nameChannel = rows[0]; 
      string HMS = rows[1].ToString();//Result is "12/30/1899 12:20:00" 
     } 
    } 
} 

Спасибо
Куанг

+0

вы можете использовать split, чтобы получить время из этого поля datetime. –

ответ

2

я могу разрешить мой проблема с использованием следующего кода

DateTime dt = DateTime.Parse(rows[1].ToString()); 
string HMS = String.Format("{0:HH:mm:ss}",dt); 

но я не понимаю,
Зачем содержать в файле excel разную строку в C# ?.

0

значение Формат ячейки с использованием String.Format. Когда вы читаете от excel, оно содержит значение DateTime так, как вам нужно.

String.Format("HH:mm:ss",cellValue); 

В вашем случае используйте как показано ниже, чтобы получить только часть времени из ячейки.

rows[1].ToString("HH:mm:ss"); 
+0

Я могу решить свою проблему, используя следующий код:
DateTime dt = DateTime.Parse (rows [2] .ToString()); строка HMS = String.Format ("{0: HH: mm: ss}", dt);
но я не понимаю, почему в файле excel содержится другая строка в C# ?. –

0

Добавляйте новый шаг! Если вы получили «12/30/1899 12:20:00», добавьте в конце .Split ('') [1], и это вернет «12:20:00».

0

Попробуйте это:

double d = double.Parse(workSheet.Cells[1, 1].value();); 
DateTime conv = DateTime.FromOADate(d); 
0

Значение интерпретируется как DateTime -объект. Просто проанализируйте его как таковой и позвоните по телефону datetime.ToLongTimeString()

Причина, по которой вы получаете дату с 1899 годом, состоит в том, что C# интерпретирует значение как время и рассматривает его как объект DateTime. Но так как нет дат, они берут самую раннюю дату.

0

В камере не было никакой информации о дате, так с # наполнили его the day 0

Что вы должны сделать, это использовать

String.Format("HH:mm:ss",cellValue); 

или

DateTime time; 
time.TimeOfDay.ToString("HH:mm:ss") 
1

Формат hh: mm: ss считается полем DateTime в excel, поэтому, когда вы читаете его в C#, вместо строки вы получаете объект DateTime. И поскольку объект DateTime также имеет дату с ним, даже если не указан, функция ToString() предоставляет полную дату и время, преобразованные в строку. Попробуйте это, чтобы решить вашу проблему:

string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtFileExcelCapture.Text + ";Extended Properties='Excel 8.0;HDR=Yes;'"; 
using (OleDbConnection connection = new OleDbConnection(con)) 
{ 
    connection.Open(); 
    OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection); 
    using (OleDbDataReader rows = command.ExecuteReader()) 
    { 
     while (rows.Read()) 
     { 
      var nameChannel = rows[0]; 
      string HMS = (rows[1] as DateTime).TimeOfDay.ToString(); 
     } 
    } 
} 
Смежные вопросы