1

我有一些用于将数据结果作为 CSV 发送给用户的代码。这适用于 Excel 2013,但在 Excel 2007 中,它不会拆分为列,而是作为仅插入一列的数据。

有没有办法告诉 Excel 如何拆分文本(由 ; 分隔)?这是我的代码:

    public async Task ExcelResultList(int id)
    {
        var asString = await Resolver.Resolve<IHandoutManager>().GetResultListAsStringAsync(id);
        var handout = await Resolver.Resolve<IHandoutManager>().GetHandout(id);

        var filename = string.Format("{0} registrations - {1:yyyy-MM-dd}.csv", handout.Name, DateTime.Now);
        var contenttype = "application/csv";
        Response.Clear();
        Response.ContentType = contenttype;
        Response.AddHeader("content-disposition", "attachment;filename=" + filename);            
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentEncoding = Encoding.Unicode; 
        Response.Write(asString);
        Response.End();
    }
4

1 回答 1

2

要确保您使用的是正确的 ListSeparator(“,”或“;”),请使用此

System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator

但是由于您只能访问服务器端,因此您可以在任何页面中包含此 javascript,

function getListSeparator() {
    var list = ['a', 'b'], str;
    if (list.toLocaleString) {
        str = list.toLocaleString();
        if (str.indexOf(';') > 0 && str.indexOf(',') == -1) {
            return ';';
        }
    }
    return ',';
}

关键在使用客户端系统列表分隔符的toLocaleString方法中

您可以使用 JavaScript 获取列表分隔符并将其设置在 cookie 中,然后您可以从服务器中检测到该 cookie 以根据需要生成文件

并且您是否尝试将内容类型更改

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

或者

application/vnd.ms-excel
于 2013-09-05T11:45:43.473 回答