LinqToExcel - чтение десятичного числа из файла * .xlsx - PullRequest
0 голосов
/ 03 мая 2018

Я возился с этим пару часов, и я хожу по кругу. Я что-то упускаю.

Я пытаюсь прочитать лист Excel с Linq to Excel. Все работает по порядку, кроме десятичных знаков в листе. Я пробовал несколько разных подходов, ни один из которых не работает.

Столбец, который я пытаюсь прочитать, является столбцом валюты. Моя модель десятичная. Когда я покидаю столбец в формате Excel в формате Currency, я получаю 0 из запроса linq.

Когда я устанавливаю столбец в число, я получаю значения без десятичного разделителя.

Созданный мной тестовый файл имеет лист DecimalSheet. Столбец называется DecimalTest и содержит число; 4587,61

У меня есть такая тестовая модель;

public class DecimalModel
{
    [ExcelColumn("DecimalTest")]
    public decimal DecimalTest { get; set; }
}

Запрос файла реализован так:

var testFile = new ExcelQueryFactory(fileLocation)
{
    DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace,
    TrimSpaces = LinqToExcel.Query.TrimSpacesType.Both,
    UsePersistentConnection = false, 
    ReadOnly = true
};

var decimalTestModel = from tb in testFile.Worksheet<DecimalModel>("DecimalSheet")
                       select tb;

var lines = decimalTestModel.ToList();

Показание выглядит следующим образом: 45876100000000000M

РЕДАКТИРОВАТЬ 1

Тем временем я пробовал:

  1. Чтение значений как string. Это подарило мне научное обозначение значения в ячейке, независимо от того, какого рода формат я использовал Он читает «458761e + 016» вместо 4587,61.
  2. Установка полного листа в текстовом формате и обработка его как string как указано выше. Он читает «458761e + 016» вместо «4587,61»
  3. Чтение значений как `Float. Это не имеет значения.
  4. Я пытался работать с настройками культуры, как при настройке культа на nl-NL жестко закодировано в потоке непосредственно перед созданием фабрики и возвращение к первоначальной культуре после того, как я закончу. Это сделано не разница.

Я заметил:

  1. Когда документ Excel остается открытым, показания с указанным выше Код идеален. Я не хочу, чтобы Excel оставался открытым из-за партии обработка документов Excel (на сервере, без взаимодействия с пользователем).
  2. Когда я запускаю вышеуказанный тест-код на другом сервере (голландская Windows, Dutch Excel, Dutch Locale nl-NL) работает нормально. Это на Английский сервер 'en-US', который не работает. Заставляет меня думать это как-то связано с локализацией или культурой?

Может ли кто-нибудь указать мне правильное направление, как я могу настроить Excel / изменить код так, чтобы он читал правильное десятичное число?

1 Ответ

0 голосов
/ 07 мая 2018

Попробовав пару других опций, я также перешел на страницу проекта github для этого пакета nuGet и также разместил там вопрос (https://github.com/paulyoder/LinqToExcel/issues/143).

Решение было довольно простым; изменить мой язык в настройках даты Windows. Это имеет смысл для меня, так как все документы на голландском языке. Только окна на английском языке.

Это делается через Панель управления -> Регион

Setting the format to Dutch

Setting the system locale to Dutch

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