产生在ASP.Net CSV文件 [英] Generate CSV file in ASP.Net

查看:153
本文介绍了产生在ASP.Net CSV文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是code低于aspx页面上按钮的单击事件生成CSV文件。这工作时,我不姓我的文件,但是当我尝试使用:
    Response.AddHeader(内容处置,附件;文件名= myfilename.csv);

命名该文件作为myfilename.csv,产生的excel表是网页,而不是在里面有文字的屏幕截图。有人可以帮我解决这个问题。结果
谢谢!

  DataGrid的DG =新的DataGrid();
dg.DataSource =的GetData();
htmlTextWriter.WriteLine(< B>详情< / B>中);//获取该控件的HTML
dg.HeaderStyle.Font.Bold = TRUE;
dg.HeaderStyle.BackColor = System.Drawing.Color.Gray;
dg.DataBind();
dg.RenderControl(HtmlTextWriter的);//写HTML返回给浏览器。
Response.Clear();
Response.ContentType =应用程序/ vnd.ms-EXCEL;
//Response.AddHeader(\"Content-Disposition,附件;文件名= myfilename.csv);
this.EnableViewState = FALSE;
的Response.Write(textWriter.ToString());
到Response.End();私人System.Data.DataTable的GetData()
{
    System.Data.DataTable DT =新System.Data.DataTable(TestTable的);
    dt.Columns.Add(SSN);
    dt.Columns.Add(员工ID);
    dt.Columns.Add(会员姓);
    dt.Columns.Add(会员名);
    dt.Columns.Add(病人姓);
    dt.Columns.Add(病人第一名称);
    dt.Columns.Add(索赔号);
    dt.Columns.Add(服务号线);
    dt.Columns.Add(错误code);
    dt.Columns.Add(错误消息);
    dt.Rows.Add(123456789,4455,自卫队,自卫队,sdfg,xzcv,dsfgdfg123,1234,135004,某些错误);
    dt.Rows.Add(123456788,3344,RTH,ojoij,poip,WER,aadf124,1233,135005,一些错误);
    dt.Rows.Add(123456787,2233,东风,sdfg,vcxb,cxvb,UHCAL125,1223,135006,另一个错误);
    返回DT;
}


解决方案

我不完全相信你的目标是什么,在这里,所以我假设你是想创建一个按钮单击事件CSV文件并发送回给用户。你现在有出现该控件的HTML写入XLS文件。

试试这个:

 保护无效的button1_Click(对象发件人,EventArgs的发送)
{
    VAR的dataTable =的GetData();
    StringBuilder的建设者=新的StringBuilder();
    清单<串GT; COLUMNNAMES =新的List<串GT;();
    清单<串GT;行=新的List<串GT;();    的foreach(在dataTable.Columns的DataColumn列)
    {
        columnNames.Add(column.ColumnName);
    }    builder.Append(的string.join(,,columnNames.ToArray()))追加(\\ n);    的foreach(在dataTable.Rows的DataRow行)
    {
        清单<串GT; currentRow =新的List<串GT;();        的foreach(在dataTable.Columns的DataColumn列)
        {
            对象项目=行[专栏];            currentRow.Add(item.ToString());
        }        rows.Add(的string.join(,,currentRow.ToArray()));
    }    builder.Append(的string.join(\\ n,rows.ToArray()));    Response.Clear();
    Response.ContentType =TEXT / CSV;
    Response.AddHeader(内容处置,附件;文件名= myfilename.csv);
    的Response.Write(builder.ToString());
    到Response.End();
}

当我运行此我被浏览器提示保存CSV文件。

编辑:

如果您想维持目前的做法(这是生产HTML,不CSV),那么试试这个:

  Response.AddHeader(内容处置,附件;文件名= myfilename.xls);

请注意,我只是改变文件扩展名从CSV为XLS。当使用CSV扩展,文本在Excel中出现的HTML。使用XLS,看起来就像当上述行注释掉它。

I am using the code below on an aspx page on button click event to generate csv file. This works when I do not name my file but when I try to use: Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

to name the file as myfilename.csv, the excel sheet generated is the screen shot of the web page instead of having text in it. Can someone help me with this problem.
Thanks!

DataGrid dg = new DataGrid();
dg.DataSource = GetData();
htmlTextWriter.WriteLine("<b>Details</b>");

//Get the html for the control
dg.HeaderStyle.Font.Bold = true;
dg.HeaderStyle.BackColor = System.Drawing.Color.Gray;
dg.DataBind();
dg.RenderControl(htmlTextWriter);

//Write the HTML back to the browser.
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
//Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
this.EnableViewState = false;
Response.Write(textWriter.ToString());
Response.End();

private System.Data.DataTable GetData()
{
    System.Data.DataTable dt = new System.Data.DataTable("TestTable");
    dt.Columns.Add("SSN");
    dt.Columns.Add("Employee ID");
    dt.Columns.Add("Member Last Name");
    dt.Columns.Add("Member First Name");
    dt.Columns.Add("Patient Last Name");
    dt.Columns.Add("Patient First Name");
    dt.Columns.Add("Claim No.");
    dt.Columns.Add("Service Line No.");
    dt.Columns.Add("Error Code");
    dt.Columns.Add("Error Message");                
    dt.Rows.Add(123456789,4455,"asdf","asdf","sdfg","xzcv","dsfgdfg123",1234,135004,"some error");            
    dt.Rows.Add(123456788,3344,"rth","ojoij","poip","wer","aadf124",1233,135005,"Some Error");
    dt.Rows.Add(123456787,2233,"dfg","sdfg","vcxb","cxvb","UHCAL125",1223,135006,"another error");
    return dt;
}

解决方案

I am not exactly sure what you are aiming for here, so I have assumed that you are wanting to create a CSV file in a button click event and send that back to the user. What you currently have appears to write the HTML of the control into an XLS file.

Try this:

protected void Button1_Click(object sender, EventArgs e)
{
    var dataTable = GetData();
    StringBuilder builder = new StringBuilder();
    List<string> columnNames = new List<string>();
    List<string> rows = new List<string>();

    foreach (DataColumn column in dataTable.Columns)
    {
        columnNames.Add(column.ColumnName); 
    }

    builder.Append(string.Join(",", columnNames.ToArray())).Append("\n");

    foreach (DataRow row in dataTable.Rows)
    {
        List<string> currentRow = new List<string>();

        foreach (DataColumn column in dataTable.Columns)
        {
            object item = row[column];

            currentRow.Add(item.ToString());
        }

        rows.Add(string.Join(",", currentRow.ToArray()));
    }

    builder.Append(string.Join("\n", rows.ToArray()));

    Response.Clear();
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
    Response.Write(builder.ToString());
    Response.End();
}

When I run this I am prompted by the browser to save the CSV file.

Edit:

If you would like to maintain your current approach (which is producing HTML, not CSV) then try this:

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.xls");

Note that I have simply changed the file extension from CSV to XLS. When using the CSV extension, the text appeared in Excel as HTML. Using XLS, it appears just as it does when the above line is commented out.

这篇关于产生在ASP.Net CSV文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆