Экспорт файла Unicode .csv (через запятую) в Excel 2003 или Excel 2007 приводит к тому, что все столбцы заканчиваются в первом столбце в Excel - PullRequest
1 голос
/ 14 ноября 2008

Можно ли что-либо сделать в коде (ASP / JavaScript) или в Excel, чтобы значения, разделенные запятыми, заканчивались в отдельных столбцах в Excel?

Ответы [ 9 ]

2 голосов
/ 15 ноября 2008

после импорта вы можете перейти в меню «Инструменты» -> «Текст в столбцы ...» и указать символ-разделитель.

1 голос
/ 14 апреля 2011

Я только что попытался использовать символы табуляции для разделителей полей вместо запятых, и это сработало в Excel 2007

(по крайней мере, я думаю, что это 2007, не могу найти Справку / О программе на тупой ленте)

1 голос
/ 14 ноября 2008

Как отметил Чей, локализация или изменения в параметрах Excel (символ разделителя списка) могут вызвать неправильное поведение.

Я рекомендую вам использовать Open XML для более безопасного вывода.

Извлечение Создание файла Excel в ASP.NET

0 голосов
/ 25 августа 2009

Похоже, что Excel запутался в метках порядка следования байтов UTF-16 / UTF-8, поэтому попробуйте избавиться от них.

В CSV содержимое ячеек может быть символами Юникода, но символы разделителя, кавычки и перевода строки всегда должны быть ASCII. Вы можете думать о CSV как о всегда ASCII, но каждая ячейка как двоичный двоичный объект и может представлять собой какой-то текст в кодировке Unicode.

Кроме того, посмотрите на: http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm для получения дополнительной информации.

0 голосов
/ 21 мая 2009

Если вы используете "," Excel 2007 будет читать его, но не 2003. А если вы используете ";", это наоборот.

Итак, лучший способ - создать HTML-таблицу и вывести ее в формате .xls. Excel 2007 спросит, не из ли это доверенного источника.

Вот пример кода, как это сделать:

private void ExportToXLSFromDataTable(DataTable dtExport, string filename)
{
    StringBuilder dataToExport = new StringBuilder();

    dataToExport.Append("<table>");
    dataToExport.Append("<tr>");

    foreach (DataColumn dCol in dtExport.Columns)
    {
        dataToExport.Append("<td>");
        dataToExport.Append(Server.HtmlEncode(dCol.ColumnName));
        dataToExport.Append("</td>");
    }

    dataToExport.Append("</tr>");

    foreach (DataRow dRow in dtExport.Rows)
    {
        dataToExport.Append("<tr>");
        foreach (object obj in dRow.ItemArray)
        {
            dataToExport.Append("<td>");
            dataToExport.Append(Server.HtmlEncode(obj.ToString()));
            dataToExport.Append("</td>");
        }
        dataToExport.Append("</tr>");
    }

    dataToExport.Append("</table>");

    if (!string.IsNullOrEmpty(dataToExport.ToString()))
    {
        Response.Clear();

        HttpContext.Current.Response.ContentType = "application/ms-excel";
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);

        HttpContext.Current.Response.Write(dataToExport.ToString());
        HttpContext.Current.Response.End();
    }
}
0 голосов
/ 18 декабря 2008

Вы можете попробовать сохранить файл как .txt, а не .csv, это заставит Excel анализировать текстовые строки в столбцы

0 голосов
/ 17 ноября 2008

Знаете ли вы, если файл CSV имеет заголовок метки порядка байтов? Возможно, у него нет спецификации или неправильная спецификация для локали.

0 голосов
/ 14 ноября 2008

В разных локализациях Excel могут использоваться разные символы для разделения столбцов. Попробуйте использовать ";" вместо ",", чтобы увидеть, помогает ли это.

0 голосов
/ 14 ноября 2008

Если вы откроете файл через меню «Файл -> Открыть» в Excel, то он разделит значения в ячейках.

...