Чтение из таблицы Excel дает неверное значение

#excel #vb.net

Вопрос:

Я хочу ознакомиться с расписанием. К сожалению, это не работает. Вместо "3:53" В1 программа считывает и показывает 0.16 . Как я могу это улучшить? Я использую Microsoft.Office.Interop . Я уже пытался изменить форматирование в таблице — безрезультатно.

 Private xlApp As Excel.Application = New Excel.Application
Private xlWorkBook As Excel.Workbook
'in a Sub:
xlWorkBook = xlApp.Workbooks.Open(filepath)
 Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.Worksheets("L7"), Excel.Worksheet)
        Dim xlRange As Excel.Range = xlWorkSheet.UsedRange
        Dim ER As Excel.Range
        Dim ER2 As Excel.Range
        Dim Index As Integer = 0
        For Zeile As Integer = 1 To xlRange.Rows.Count
            ER = CType(xlRange.Cells(Zeile, 1), Excel.Range)
            ER2 = CType(xlRange.Cells(Zeile, 2), Excel.Range)
            If CStr(ER2.Value) = "..." Then
                Continue For
            End If
        Dim gesplittet As String() = CStr(ER2.Value).Split(":"c)
'...
 

ER.Value становится 0,16 вместо «3:53». Я хочу иметь Веревочку.

расписание

Комментарии:

1. Просто отформатируйте его как время. 0.161805555555556 это как 3:53 хранится в Excel

2. Последняя строка опубликованного кода подразумевает, что вы извлекаете информацию о часах/минутах из значения времени. Ячейки Excel, отформатированные по времени, извлекаются как двойной тип данных, как вы обнаружили. Вы можете использовать дату и время. Метод FromOADate(двойной) для преобразования этого значения в структуру даты и времени (только точная в рабочей книге не настроена для использования системы дат 1904 года). Затем вы можете получить доступ к свойствам «Час/минута» из структуры «Дата-время».

Ответ №1:

Значения времени и даты обычно хранятся внутренне совершенно по-разному в программах для электронных таблиц и баз данных. Поэтому вы никогда не получите непосредственно те значения, которые видите, когда получаете исходные значения. В вашем случае кажется, что вы получаете значение времени/даты: дата-это значение перед точкой, а дробные цифры-это доля 24-часового дня.

 0.16 * 24 = 3.84 hours
 

Что означает 3 часа и 0,84 от одного часа:

 0.84 * 60 = 50.4 minutes
 

Я предполагаю, что небольшая разница с вашим ожидаемым значением заключается в том, что значение 0,16 было округленным значением. Используя точное значение и выполняя вычисления, вы должны получить ожидаемый результат.

Комментарии:

1. большое спасибо. Я просто отправил вопрос,когда он тоже пришел мне в голову 🙈