EPPlus Загрузить CSV и отформатировать все ячейки как текст - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь импортировать CSV, и все ячейки показывают, как именно они были отправлены через CSV. На самом деле все прекрасно работает с преобразованием файла CSV в файл Excel, и я отправляю вложение по электронной почте только для того, чтобы убедиться, что данные в некоторых столбцах испорчены. Например, у меня есть дата в ячейке в формате мм / дд / гггг, и она показывает, когда я загружаю файл в Excel в виде целого числа. Есть другие клетки, которые также имеют эту проблему. Я не могу отформатировать каждую ячейку по отдельности, потому что я загружаю кучу ячеек разных типов, поэтому я надеялся, что смогу просто сказать файлу Excel просто взять то, что отправлено, и отобразить именно это.

Насколько я понимаю, изменение формата на «@» должно делать то, что я ищу, однако это не то, что я вижу.

При тестировании с известной мне ячейкой является датой, я попробовал следующее и не увидел никаких изменений.

worksheet.Cells["B1"].Style.Numberformat.Format = "@";

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

worksheet.Cells["B1"].Style.Numberformat.Format = "mm/dd/yyyy";

Я также попробовал что-то подобное, и этоне сработало:

worksheet.Cells["A:XFD"].Style.Numberformat.Format = "@";

Вот мой полный текстовый пример:

    MemoryStream outputStream = new MemoryStream();
    using (var p = new ExcelPackage(outputStream))
    {
        var format = new OfficeOpenXml.ExcelTextFormat();
        format.Delimiter = '|';
        format.DataTypes = new[] { eDataTypes.String };

        foreach (var page in fileContent)
        {
            ExcelWorksheet worksheet = p.Workbook.Worksheets.Add(page.Key);

            worksheet.Cells.LoadFromText(page.Value, format);

            worksheet.Cells["A:XFD"].Style.Numberformat.Format = "@";
            worksheet.Cells[1, 2].Style.Numberformat.Format = "mm/dd/yyyy";
            worksheet.Cells["B1"].Style.Numberformat.Format = "mm/dd/yyyy"; //this works but not when I change it to "@"
            worksheet.Cells["MR11"].Style.Numberformat.Format = "@";
            worksheet.Cells["MS11"].Style.Numberformat.Format = "@";
            //worksheet.Cells["A:XFD"].Style.Numberformat.Format = "@";
            //worksheet.Column(1).Style.Numberformat.Format = "@";
            //worksheet.Column(2).Style.Numberformat.Format = "@";
        }
        p.Save();
    }

Итак, насколько я понимаю, как символ "@" должен работать некорректно? Я не думаю, что тип данных должен быть проблемой, так как я использую CSV, который представляет собой одну большую строку.

1 Ответ

0 голосов
/ 28 октября 2019

Я нашел хак, чтобы сделать это хотя бы функциональным в моем коде. Я в основном считаю столбцы и должен создать массив DataTypes в цикле for. Поэтому, если у меня есть 600 столбцов, мне нужно добавить eDataTypes.String 600 раз в форматтер. Это не красиво, но по какой-то причине «@» не сработает, если я отформатирую текст как текст.

            var format = new OfficeOpenXml.ExcelTextFormat();
            format.Delimiter = '|';

            List<eDataTypes> allTypes = new List<eDataTypes>();
            for(int i = 0;i < columnCount; i++)
            {
                allTypes.Add(eDataTypes.String);
            }

            format.DataTypes = allTypes.ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...