Как создать CSV, чтобы число отображалось в виде строки в электронной таблице?

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

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 ответов


вы можете форматировать данные как ="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 дает вам лучший контроль над форматированием.


попробуйте процитировать 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);

}

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

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

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

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


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

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


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

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

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

для:

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