C # ExcelWorksheet значение ячейки читается неправильно - PullRequest
0 голосов
/ 06 ноября 2019

Я анализирую CSV-файл, используя C # и ExcelWorksheet. У меня есть ячейка, которая содержит целое число. 3020191002155959391100

Когда я анализирую ячейку, используя

var value = sheet.Cells[rowNumber, columnNumber.Column].Value;, значение равно 3.0201910021559592E+21

, когда я анализирую ячейку с использованием sheet.Cells [rowNumber, columnNumber.Column].Текст;значение 3020191002155960000000

как предотвратить округление?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Мне нужно было установить конкретные типы столбцов в строку перед обработкой каждой ячейки.

columnDataTypes.Add(eDataTypes.String);
0 голосов
/ 06 ноября 2019

Максимальное значение int в C # равно

int.MaxValue: 2 147 483 647

Источник: https://www.dotnetperls.com/int-maxvalue

Поэтому вашчисло слишком велико, чтобы его можно было прочитать как int.

Однако после прочтения ваших комментариев выясняется, что вы используете программу чтения Excel для чтения файла CSV, который не подходит дляработа. Используйте синтаксический анализатор CSV, такой как CSVHelper (https://joshclose.github.io/CsvHelper/), который облегчит вашу жизнь.

Вот пример того, как читать такие длинные числа в виде строки, используя CSVHelper.

Сначала я создам класс, соответствующий вашему CSV-файлу. Я создал фиктивный CSV-файл, который выглядит следующим образом. Просто три длинных числа подряд.

3020191002155959391100,3020191002155959391101, 3020191002155959391102

Теперь я создаю класс примерно так:

class CSVRecord
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }
    public string Data3 { get; set; }
}

Затем вы можете читать все записи за один раз. Обратите внимание на настройки csv.Configuration, в зависимости от сложностифайла, который вы прочитали, вам придется их изменить. Я советую вам прочитать документацию и примеры по приведенной ссылке.

var file = @"data.csv";
var records = new List<CSVRecord>();

using (var reader = new StreamReader(file))
{
    using (var csv = new CsvReader(reader))
    {
        csv.Configuration.HasHeaderRecord = false;
        records = csv.GetRecords<CSVRecord>().ToList();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...