using
System;
using
System.Data;
using
System.Configuration;
using
System.IO;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
namespace
Unit
{
public
class
GridViewExportUtil
{
///
<summary>
///
把 GridView 呈现的内容导出到 Excel
///
</summary>
///
<param name="fileName"></param>
///
<param name="gv"></param>
public
static
void
Export(
string
fileName, GridView gv,HttpResponse pageResponse,
string
filepath)
{
pageResponse.Clear();
pageResponse.Charset
=
"
UTF-8
"
;
pageResponse.Buffer
=
false
;
pageResponse.ClearHeaders();
pageResponse.ContentEncoding
=
System.Text.Encoding.UTF8;
pageResponse.HeaderEncoding
=
System.Text.Encoding.UTF8;
pageResponse.AddHeader(
"
content-disposition
"
,
string
.Format(
"
attachment; filename={0}
"
, fileName));
//
pageResponse.ContentType = "application/ms-excel";
pageResponse.ContentType
=
"
application/octet-stream
"
;
using
(StringWriter sw
=
new
StringWriter())
{
using
(HtmlTextWriter htw
=
new
HtmlTextWriter(sw))
{
//
Create a form to contain the grid
Table table
=
new
Table();
table.Style.Add(
"
border-top
"
,
"
solid 1px #cdcdcd
"
);
table.Style.Add(
"
border-left
"
,
"
solid 1px #cdcdcd
"
);
//
add the header row to the table
if
(gv.HeaderRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
//
add each of the data rows to the table
foreach
(GridViewRow row
in
gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
//
add the footer row to the table
if
(gv.FooterRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
//
render the table into the htmlwriter
table.RenderControl(htw);
string
date
=
System.DateTime.Now.ToString(
"
MMddyyyy
"
);
string
outFileName
=
"
ExportExcel_
"
+
date
+
fileName;
string
comPath
=
"
Export/
"
+
outFileName;
string
path
=
filepath
+
"
\\Export
"
;
if
(Directory.Exists(path)
==
false
)
{
System.IO.Directory.CreateDirectory(path);
}
path
=
path
+
"
\\
"
+
outFileName;
System.Text.Encoding encode
=
System.Text.Encoding.Unicode;
StreamWriter stream
=
new
StreamWriter(path,
false
, encode);
stream.Write(sw.ToString());
stream.Close();
//
stream.Write(sw);
///
/ render the htmlwriter into the response
pageResponse.Write(sw.ToString());
pageResponse.End();
pageResponse.Flush();
pageResponse.Close();
}
}
}
///
<summary>
///
把 GridView 呈现的内容导出到 Excel
///
</summary>
///
<param name="fileName"></param>
///
<param name="gv"></param>
public
static
void
Export(
string
fileName, GridView gv)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"
content-disposition
"
,
string
.Format(
"
attachment; filename={0}
"
, fileName));
HttpContext.Current.Response.ContentType
=
"
application/ms-excel
"
;
using
(StringWriter sw
=
new
StringWriter())
{
using
(HtmlTextWriter htw
=
new
HtmlTextWriter(sw))
{
//
Create a form to contain the grid
Table table
=
new
Table();
table.Style.Add(
"
border-top
"
,
"
solid 1px #cdcdcd
"
);
table.Style.Add(
"
border-left
"
,
"
solid 1px #cdcdcd
"
);
//
add the header row to the table
if
(gv.HeaderRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
//
add each of the data rows to the table
foreach
(GridViewRow row
in
gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
//
add the footer row to the table
if
(gv.FooterRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
//
render the table into the htmlwriter
table.RenderControl(htw);
//
render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
}
///
<summary>
///
把 GridView 呈现的内容导出到 Excel
///
</summary>
///
<param name="fileName"></param>
///
<param name="gv"></param>
public
static
string
GetExportFileName(
string
fileName, GridView gv,
string
filepath)
{
try
{
using
(StringWriter sw
=
new
StringWriter())
{
using
(HtmlTextWriter htw
=
new
HtmlTextWriter(sw))
{
//
Create a form to contain the grid
Table table
=
new
Table();
table.Style.Add(
"
border-top
"
,
"
solid 1px #cdcdcd
"
);
table.Style.Add(
"
border-left
"
,
"
solid 1px #cdcdcd
"
);
//
add the header row to the table
if
(gv.HeaderRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}
//
add each of the data rows to the table
foreach
(GridViewRow row
in
gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}
//
add the footer row to the table
if
(gv.FooterRow
!=
null
)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}
//
render the table into the htmlwriter
table.RenderControl(htw);
string
date
=
System.DateTime.Now.ToString(
"
MMddyyyy
"
);
string
outFileName
=
"
ExportExcel_
"
+
date
+
"
_
"
+
DateTime.Now.Ticks.ToString()
+
"
_
"
+
fileName;
string
comPath
=
"
Export/
"
+
outFileName;
string
path
=
filepath
+
"
\\Export
"
;
if
(Directory.Exists(path)
==
false
)
{
System.IO.Directory.CreateDirectory(path);
}
path
=
path
+
"
\\
"
+
outFileName;
System.Text.Encoding encode
=
System.Text.Encoding.Unicode;
StreamWriter stream
=
new
StreamWriter(path,
false
, encode);
stream.Write(sw.ToString());
stream.Close();
return
comPath;
}
}
}
catch
(Exception e)
{
throw
;
}
}
///
<summary>
///
Replace any of the contained controls with literals
///
</summary>
///
<param name="control"></param>
private
static
void
PrepareControlForExport(Control control)
{
for
(
int
i
=
0
; i
<
control.Controls.Count; i
++
)
{
Control current
=
control.Controls[i];
if
(current
is
LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i,
new
LiteralControl((current
as
LinkButton).Text));
}
else
if
(current
is
ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i,
new
LiteralControl((current
as
ImageButton).AlternateText));
}
else
if
(current
is
HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i,
new
LiteralControl((current
as
HyperLink).Text));
}
else
if
(current
is
DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i,
new
LiteralControl((current
as
DropDownList).SelectedItem.Text));
}
else
if
(current
is
CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i,
new
LiteralControl((current
as
CheckBox).Checked
?
"
True
"
:
"
False
"
));
}
else
if
(current
is
System.Web.UI.WebControls.DataControlFieldHeaderCell)
{
((DataControlFieldHeaderCell)current).Style.Add(
"
border-right
"
,
"
solid 1px #cdcdcd
"
);
((DataControlFieldHeaderCell)current).Style.Add(
"
border-bottom
"
,
"
solid 1px #cdcdcd
"
);
((DataControlFieldHeaderCell)current).Style.Add(
"
font-family
"
,
"
arial
"
);
((DataControlFieldHeaderCell)current).Style.Add(
"
color
"
,
"
#3D3D3D
"
);
((DataControlFieldHeaderCell)current).Style.Add(
"
font-size
"
,
"
10pt
"
);
((DataControlFieldHeaderCell)current).Style.Add(
"
background-color
"
,
"
#F1FBFF
"
);
}
else
if
(current
is
System.Web.UI.WebControls.DataControlFieldCell)
{
((DataControlFieldCell)current).Style.Add(
"
border-right
"
,
"
solid 1px #cdcdcd
"
);
((DataControlFieldCell)current).Style.Add(
"
border-bottom
"
,
"
solid 1px #cdcdcd
"
);
((DataControlFieldCell)current).Style.Add(
"
font-family
"
,
"
arial
"
);
((DataControlFieldCell)current).Style.Add(
"
color
"
,
"
#3D3D3D
"
);
((DataControlFieldCell)current).Style.Add(
"
font-size
"
,
"
10pt
"
);
}
if
(current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}
}