ASP.Net에서 CSV 파일 생성
나는 아래 코드를 aspx page on 버튼 클릭 이벤트에 사용하여 csv 파일을 생성하고 있습니다.이 기능은 파일 이름을 지정하지 않고 다음을 사용하려고 할 수 있습니다.대답.머리글 추가("내용-처분", "평가;csv=myfilename.csv");
파일 이름을 myfilename.csv로 지정하려면 생성된 엑셀 시트가 텍스트가 있는 대신 웹 페이지의 스크린샷입니다.누가 이 문제를 해결하는 것을 도와줄 수 있습니까?
감사합니다!
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;
}
저는 당신이 여기서 무엇을 목표로 하는지 정확히 모르기 때문에 버튼 클릭 이벤트에서 CSV 파일을 생성하여 사용자에게 다시 보내고 싶어하는 것으로 추측합니다.현재 가지고 있는 것은 컨트롤의 HTML을 XLS 파일에 쓰는 것처럼 보입니다.
사용해 보십시오.
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();
}
이를 실행하면 브라우저에서 CSV 파일을 저장하라는 메시지가 나타납니다.
편집:
CSV가 아닌 HTML을 생성하는 현재 접근 방식을 유지하려면 다음을 시도하십시오.
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.xls");
파일 확장자를 CSV에서 XLS로 간단히 변경했습니다.CSV 확장자를 사용할 경우 텍스트가 HTML로 Excel에 표시되었으며, XLS를 사용하면 위의 행을 주석 처리할 때와 동일하게 표시됩니다.
NickW의 솔루션과 동일하지만 LINQ를 보다 간결하게 사용합니다.
//Append column names
builder.Append(String.Join(",",
from DataColumn c in dataTable.Columns
select c.ColumnName
)).Append("\n");
//Append data from datatable
builder.Append(string.Join("\n",
from DataRow row in dataTable.Rows
select String.Join("\n",
String.Join(",", row.ItemArray)
)
));
Response.Clear();
Response.ContentType = "text/csv";
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");
Response.Write(builder.ToString());
Response.End();
마침내 이해한 것 같습니다. asp.net 페이지에서 엑셀 파일을 생성하려면 http 핸들러를 작성해야 합니다. 이제 button_click이 TestHandler.ashx 페이지로 리디렉션되고 엑셀 파일이 렌더링됩니다.:)
여러분 정말 감사합니다.
public class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
StringWriter textWriter = new StringWriter();
Html32TextWriter htmlTextWriter = new Html32TextWriter(textWriter);
DataGrid dg = new DataGrid();
dg.DataSource = GetData();
//Get the html for the control
dg.EnableViewState = false;
dg.DataBind();
dg.RenderControl(htmlTextWriter);
//Write the HTML back to the browser.
context.Response.Clear();
//context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=test.csv"));
//context.Response.ContentType = "text/csv";
context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=abc.xls"));
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.Write(textWriter.ToString());
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
변경해 보십시오.
Response.ContentType = "application/text";
또는
Response.ContentType = "text/csv";
언급URL : https://stackoverflow.com/questions/13244875/generate-csv-file-in-asp-net
'programing' 카테고리의 다른 글
PL/SQL의 null 연관 배열에 대한 이 검사가 실패하는 이유는 무엇입니까? (0) | 2023.08.09 |
---|---|
mysql group by hour - 잘못된 결과를 피하는 방법 (0) | 2023.08.09 |
봄에 프로필별 @예약된 작업을 활성화하는 방법은 무엇입니까? (0) | 2023.08.09 |
Windows에 Python 패키지를 설치하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
NSString: IsEqual 대 IsEqualToString (0) | 2023.08.09 |