EPPlus возвращает число вместо даты / строки - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь прочитать файл .xlsx с помощью EPPlus.

Я могу загрузить лист и прочитать все ячейки, кроме ячеек, содержащих даты, которые возвращают десятичное число вместо значения в ячейке.

FileInfo fileInfo = new FileInfo(filePath);

using (ExcelPackage excel = new ExcelPackage(fileInfo))
{
    var worksheet = excel.Workbook.Worksheets.First();

    string cellName = worksheet.Cells[i, colDate].ToString(); // = "A2"- correct cell
    string cellValue= worksheet.Cells[i, colDate].Value.ToString(); //  = "42874.6666666667"
}

Ожидаемое возвращаемое значение для ячейки ["A2"] этого листа "19.05.2017 16:00:00", но я получаю "42874.6666666667".

Получениечисловое значение в ячейке рядом с этой работает нормально, поэтому я загружаю нужный файл и лист.

Как я могу получить дату этой ячейки (или хотя бы строку и проанализировать ее)?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вам нужно использовать MemoryStream

  byte[] bin = File.ReadAllBytes(file);
            using (MemoryStream stream = new MemoryStream(bin))
            {
                using (ExcelPackage excel = new ExcelPackage(stream))
                {
                    var worksheet = excel.Workbook.Worksheets.First();
                    string cellValue = worksheet.Cells[2, 1].Value.ToString(); // A2 Cell value
                }
            }
0 голосов
/ 08 мая 2019

применить один из названных стилей к ячейке со значением в ней.

В Excel действительно есть только 2 (2,5?) Типа данных ячейки:

  1. Строки
    • 0-255 символов длиной
    • длиной более 255 символов (иначе "памятка")
  2. Числа с плавающей точкой ("целые числа" - это стиль ...)

Таким образом, даты - это особый случай чисел с плавающей запятой, к которым применяется стиль («ShortDate», «mmm dd yyyy» или любой другой).

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

Способ применения стилей в EPPlusдля ячейки очень похоже на то, как вы делаете это в VBA:

'' 'пример VBA с использованием встроенных стилей' 'If Worksheets ("Sheet1"). Range ("B4").Style = "Normal", затем Worksheets ("Sheet1"). Range ("B4"). Style = "Percent" End If

Где-то в MSDN есть список всех перечислений / имен / определенийвстроенные стили Excel для программистов на C # / VBA.Эти стили также настраиваются в словаре стилей EPPlus.

Вы также можете добавить свои собственные определения стилей в словарь стилей в своем коде EPPlus.Любые пользовательские стили, ранее определенные в файле .XLSX, будут доступны при открытии файла .XLSX в EPPlus.

0 голосов
/ 21 февраля 2019

Excel хранит даты как количество дней с 1 января 1900 года (или, возможно, 1904 года на Mac). Используя какую-то библиотеку времени на вашем языке программирования, создайте дату 1 января 1900 года и добавьте любое значение, которое вы имеете в каждой ячейке.- в вашем примере - 42874,6666666667 дней.Теоретически это должно дать вам дату в ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...