写入CSV然后保存或编辑

问题描述 投票:2回答:3

我有个问题。我在运行时创建一个CSV,然后让用户保存或打开它,但它对我没有任何作用,我做错了什么?有人能帮我吗?

public void WriteToCSV(List<mifid2_vpc_monitored_detail_view> list, string filename)
    {
        string attachment = "attachment; filename=" + filename;

        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.ContentType = "text/csv";
        HttpContext.Current.Response.AddHeader("Pragma", "public");
        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;


        WriteHeader();
        StringBuilder csv = new StringBuilder();

        string _uti, _counterparty;
        DateTime _maturity, _date;
        decimal _volume;

        var newLine = "";

        for (int i = 0; i < list.Count; i++)
        {
            if (list[i].uti_cd == null) _uti = "-"; else _uti = list[i].uti_cd;
            if (list[i].namecounterparty == null) _counterparty = "-"; else _counterparty = list[i].namecounterparty;
            if (list[i].maturity == null) _maturity = DateTime.MinValue.Date; else _maturity = list[i].maturity;
            if (list[i].contract_volume == 0) _volume = 0; else _volume = list[i].contract_volume;
            if (list[i].evaluation_date == null) _date = DateTime.MinValue.Date; else _date = list[i].evaluation_date;

            newLine = string.Format("{0},{1},{2},{3},{4}", _uti, _counterparty, _maturity, _volume, _date);
            csv.AppendLine(newLine);
        }

        HttpContext.Current.Response.Write(csv.ToString());
        HttpContext.Current.Response.End();
    }

    private void WriteHeader()
    {
        string columnNames = "UTI code, Counterparty, Maturity, Volume, Evaluation Date";
        HttpContext.Current.Response.Write(columnNames);
        HttpContext.Current.Response.Write(Environment.NewLine);
    }
c# csv
3个回答
0
投票

代码对我来说很好。但浏览器下载文件没有扩展名。

filename是否包含文件扩展名?

如果没有,试试这个

string attachment = "attachment; filename=" + filename + ".csv";

0
投票

我仍然不明白问题出在哪里,我尝试了不同的解决方案,然后我在网上找到了一个通过演示工作的例子,但是一旦我实现它,它就不起作用,可能是我使用sharepoint 2013年,引用导出的按钮是否在webpart中?

码:

HttpResponse Response = HttpContext.Current.Response;

string csv = string.Empty;
csv += "UTI code, Counterparty, Maturity, Volume, Evaluation Date";
csv += "\r\n";

string _uti, _counterparty;
DateTime _maturity, _date;
decimal _volume;

for (int i = 0; i < list.Count; i++)
        {
            if (list[i].uti_cd == null) _uti = "-"; else _uti = list[i].uti_cd;
            if (list[i].namecounterparty == null) _counterparty = "-"; else _counterparty = list[i].namecounterparty;
            if (list[i].maturity == null) _maturity = DateTime.MinValue.Date; else _maturity = list[i].maturity;
            if (list[i].contract_volume == 0) _volume = 0; else _volume = list[i].contract_volume;
            if (list[i].evaluation_date == null) _date = DateTime.MinValue.Date; else _date = list[i].evaluation_date;
            csv += _uti + ",";
            csv += _counterparty + ",";
            csv += _maturity + ",";
            csv += _volume + ",";
            csv += _date;
            csv += "\r\n";
        }

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=SqlExport.csv");
        Response.Charset = "";
        Response.ContentType = "application/text";
        Response.Output.Write(csv);
        Response.Flush();
        Response.End();

-2
投票

这应该有所帮助:

public void WriteToCSV(List<mifid2_vpc_monitored_detail_view> list, string filename)
    {
    string attachment = "attachment; filename=" + filename;

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "text/csv";
    HttpContext.Current.Response.AddHeader("Pragma", "public");
    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;


    WriteHeader();
    StringBuilder csv = new StringBuilder();

    string _uti, _counterparty;
    DateTime _maturity, _date;
    decimal _volume;

    var newLine = "";

    for (int i = 0; i < list.Count; i++)
    {
        if (list[i].uti_cd == null) _uti = "-"; else _uti = list[i].uti_cd;
        if (list[i].namecounterparty == null) _counterparty = "-"; else _counterparty = list[i].namecounterparty;
        if (list[i].maturity == null) _maturity = DateTime.MinValue.Date; else _maturity = list[i].maturity;
        if (list[i].contract_volume == 0) _volume = 0; else _volume = list[i].contract_volume;
        if (list[i].evaluation_date == null) _date = DateTime.MinValue.Date; else _date = list[i].evaluation_date;

        newLine = string.Format("{0},{1},{2},{3},{4}", _uti, _counterparty, _maturity, _volume, _date);
        csv.AppendLine(newLine);
    }


    MemoryStream mstream = new MemoryStream();
    StreamWriter sw = new StreamWriter(mstream);
    sw.Write(csv);
    sw.Flush();
    sw.Close();
    byte[] byteArray = mstream.ToArray();
    mstream.Flush();
    mstream.Close();
    HttpContext.Current.Response.BinaryWrite(byteArray);
    HttpContext.Current.Response.End();
}
© www.soinside.com 2019 - 2024. All rights reserved.