objResponse.ClearContent();
objResponse.ClearHeaders();
objResponse.ContentType = "application/vnd.msexcel";
objResponse.AddHeader("content-disposition", "attachment; filename=SearchResults.xls");
objResponse.AppendHeader("Content-Length", result.Length.ToString());
objResponse.Charset = "euc-kr";
objResponse.ContentEncoding = Encoding.GetEncoding(949);
objResponse.Write(result);
objResponse.Flush();
objResponse.Close();
objResponse.End();
예제는 엑셀 데이터를 다운로드 하는 경우이다. result string 에는 탭으로 분리된 텍스트를 넣어주면 xls파일로 다운로드 된다. 정식 엑셀 파일은 아니고 csv를 xls 확장자로 다운로드 하면 나머지는 엑셀이 알아서 한다. 푸른색으로 된 부분은 한글 코드 문제로 넣어 준것이다. 그냥 Unicode로 보내면 엑셀이 제대로 처리하지 못한다. 이유는 모르겠다.
출처 : http://www.code99.net/Default.aspx?tabid=794&EntryID=186
Exporting DataGrid to Excel
Exporting DataGrid
to Excel might sound complex but it's pretty simple. Let's see how this can be done.
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
The code given above is the complete code to export a DataGrid
to an Excel file:
Response.AddHeader
is letting ASP.NET know that we are exporting to a file which is named FileName.xls.Response.ContentType
denotes the type of the file being exported.myDataGrid.RenderControl(htmlWrite)
writes the data to theHtmlTextWriter
.Response.Write(stringWrite.ToString());
sends the request to the response stream.
As you can see, exporting a DataGrid
to an Excel file is pretty simple.
Exporting the DataGrid to a Word file
You can also export a DataGrid
to a Word file. You might ask a question that why would anyone like to do that. If you have a Word document which needs a table, then you can simply export the table from the DataGrid
to the Word document. The code is similar to the above with minor changes.
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.word";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
Exporting a DataGrid to a Text File
Sometimes you need to export a DataGrid
to a Text file. In this case you need to iterate through the DataSet
and concatenate the text to a string or more precisely a StringBuilder
object. Let's see how this can be done:
![](http://www.codeproject.com/images/minus.gif)
Database db = DatabaseFactory.CreateDatabase();
DBCommandWrapper selectCommandWrapper =
db.GetStoredProcCommandWrapper("sp_GetLatestArticles");
DataSet ds = db.ExecuteDataSet(selectCommandWrapper);
StringBuilder str = new StringBuilder();
for(int i=0;i<=ds.Tables[0].Rows.Count - 1; i++)
{
for(int j=0;j<=ds.Tables[0].Columns.Count - 1; j++)
{
str.Append(ds.Tables[0].Rows[i][j].ToString());
}
str.Append("<BR>");
}
Response.Clear();
Response.AddHeader("content-disposition",
"attachment;filename=FileName.txt");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.text";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);
Response.Write(str.ToString());
Response.End();
The important thing to note is the two for
loops that iterate through the DataSet
and append the rows into the StringBuilder
object.
Format Issue when Exporting DataGrid to Excel
I would like to thank Sonu Kapoor for helping me with the Format issue in exporting a DataGrid
to Excel and Juss for providing the code.
When you export a DataGrid
to Excel it loses its format. This means that maybe your DataGrid
has a string field which consisted of numbers, say '002345'. But when you export the grid and see it in an Excel file you will find that the number changed to '2345'.
You can solve this problem using Cascading Style Sheets.
Code provided by Juss:
Dim strFileName, strFilePath AsString
Dim oStringWriter AsNew System.IO.StringWriter
Dim oHtmlTextWriter AsNew System.Web.UI.HtmlTextWriter(oStringWriter)
Dim objStreamWriter As StreamWriter
Dim strStyle AsString = "<style>.text { mso-number-format:\@; } </style>"
objStreamWriter = File.AppendText(strFilePath)
DataGrid1.RenderControl(oHtmlTextWriter)
objStreamWriter.WriteLine(strStyle)
objStreamWriter.WriteLine(oStringWriter.ToString())
objStreamWriter.Close()
Most of you might be thinking about that "mso-number-format" stuff in between the code. This is the style in which the column will be exported. For this reason, you need to inject the attribute into the DataGrid
column for which you want to change the display format.
DataGrid1.DataBind()
Dim strStyle AsString = "<style>.text { mso-number-format:\@; } </style>"
For intTemp AsInteger = 1 To ds.Tables(0).Rows.Count - 1
DataGrid1.Items(intTemp).Cells(0).Attributes.Add("class", "text")
Next
You can export in many formats. All you need to know is the mso-number-format:\@;. You can easily find the format by opening an Excel file and typing a number in one of the cells. Now if you want to save this number as a Social Security Pattern (xxx-xx-xxxx), right click on the cell and select a pattern that saves it as a Social Security Number. Next save the Excel file to XML format. Open the XML file in Notepad and see what style the column SSN uses. The SSN style is something like this: mso-number-format:000\-00\-0000.
Simply substitute the new style in the strStyle
variable and that's it.
For a complete discussion on this issue, please visit this link.
I hope you liked the article, happy coding!
출처 : http://blog.naver.com/jjigye/30012879332