Как создать CSV, чтобы числовое значение отображалось в виде строки в электронной таблице? - PullRequest
7 голосов
/ 23 марта 2011

Я пытаюсь создать приложение, которое извлекает некоторые данные из базы данных, а затем использует некоторые данные для создания CSV-файла, который будет загружен в Excel.Код:

foreach (xOFDocInfo cm in docs)
{
    string s = bi.Agency
        + "," + cm.BatNbr.Trim()
        + "," + cm.RefNbr
        + "," + cm.DocType
        + "," + cm.OrigDocAmt.ToString()
        + "," + cm.CreateDate.ToShortDateString();

    writer.WriteLine(s);

}

«cm.BatNbr» - это 6-значный символ, заполненный нулями, например «001234».Я хочу, чтобы Excel отформатировал этот столбец как текст, чтобы не терять нули заранее.Я пробовал некоторые приемы, такие как префикс числа с одинарной кавычкой (апостроф), но все, что я получаю, это апострофный префикс.Если я устанавливаю ячейки для форматирования текста, а затем удаляю апострофы, я также теряю нули в начале.

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

Ответы [ 5 ]

11 голосов
/ 23 марта 2011

Вы можете отформатировать данные как ="001234". Это приведет к тому, что Excel отобразит его как 001234.

foreach (xOFDocInfo cm in docs)
{
    string s = bi.Agency
        + ",=\"" + cm.BatNbr.Trim()
        + "\"," + cm.RefNbr
        + "," + cm.DocType
        + "," + cm.OrigDocAmt.ToString()
        + "," + cm.CreateDate.ToShortDateString();

    writer.WriteLine(s);

}

Вы также можете попробовать использовать SYLK формат вместо CSV. SYLK дает вам лучший контроль над форматированием.

0 голосов
/ 31 августа 2017

Это сработало для меня:

Изменить строку:

    + "," + cm.BatNbr.Trim()

для:

    + ",\t" + cm.BatNbr.Trim()
0 голосов
/ 26 марта 2011

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

Кроме того, как заметил Ричард, вы можете добавить ключевое слово перед цифрами, а затем проанализировать столбец, используяФункция преобразования текста в столбцы в Excel.

0 голосов
/ 23 марта 2011

Окружение каждого значения кавычками должно решить вашу проблему (РЕДАКТИРОВАТЬ: я вижу, что это не будет работать сейчас, но я оставлю этот ответ здесь, так как остальная информация может все еще быть полезной).

Технически нет способа указать тип в CSV, и это относится как к создателям CSV, так и к читателям CSV. Некоторые программы пытаются вывести типы данных из CSV, но это не очень хорошая практика и не поддерживается CSV.

Вам разрешено заключать каждое значение в кавычки, на самом деле, я бы порекомендовал его, хотя это и необязательно.

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

0 голосов
/ 23 марта 2011

Попробуйте процитировать BatNbr

foreach (xOFDocInfo cm in docs)
{
    string s = bi.Agency
        + ", \"" + cm.BatNbr.Trim() + "\""
        + "," + cm.RefNbr
        + "," + cm.DocType
        + "," + cm.OrigDocAmt.ToString()
        + "," + cm.CreateDate.ToShortDateString();

    writer.WriteLine(s);

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