在某些客户的电脑上导出EXCEL文件,导出来的不是EXCEL文件,却是.aspx格式的文件,请问谁知道为什么???有什么解决方法,在网上也没找到同类问题求解决方案!!!!!!以下是导出EXCEL代码
/// <summary>
/// 动态创建Grid
/// </summary>
/// <returns></returns>
private GridView CreateGrid()
{
GridView gdvGrid = new GridView();
gdvGrid.AutoGenerateColumns = false;
BoundField bf1 = new BoundField();
bf1 .HeaderText = "采购员名称";
bf1 .DataField = "采购员名称";
gdvGrid.Columns.Add(bf1 );
return gdvGrid;
}
/// <summary>
/// 导出Excel方法
/// </summary>
/// <param name="ctl"></param>
private void ToExcel(System.Web.UI.Control ctl)
{
Response.Charset = "UTF-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel"; ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw); Response.Write(tw.ToString());
Response.End();
} /// <summary>
/// 绑定动态表格及调用ToExcel方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnToExcel_Click(object sender, EventArgs e)
{
GridView gdvGrid = CreateGrid();
divshow.Controls.Add(gdvGrid);
DataSet ds = new DataSet();
ds = GetListFromProc();
gdvGrid.DataSource = ds.Tables["NoticeInvoiceDetail_DS1"];
gdvGrid.DataBind(); Control table = gdvGrid.Controls[gdvGrid.Controls.Count - 1];
ToExcel(table); divshow.Controls.Clear();
}
/// <summary>
/// 动态创建Grid
/// </summary>
/// <returns></returns>
private GridView CreateGrid()
{
GridView gdvGrid = new GridView();
gdvGrid.AutoGenerateColumns = false;
BoundField bf1 = new BoundField();
bf1 .HeaderText = "采购员名称";
bf1 .DataField = "采购员名称";
gdvGrid.Columns.Add(bf1 );
return gdvGrid;
}
/// <summary>
/// 导出Excel方法
/// </summary>
/// <param name="ctl"></param>
private void ToExcel(System.Web.UI.Control ctl)
{
Response.Charset = "UTF-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel"; ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw); Response.Write(tw.ToString());
Response.End();
} /// <summary>
/// 绑定动态表格及调用ToExcel方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnToExcel_Click(object sender, EventArgs e)
{
GridView gdvGrid = CreateGrid();
divshow.Controls.Add(gdvGrid);
DataSet ds = new DataSet();
ds = GetListFromProc();
gdvGrid.DataSource = ds.Tables["NoticeInvoiceDetail_DS1"];
gdvGrid.DataBind(); Control table = gdvGrid.Controls[gdvGrid.Controls.Count - 1];
ToExcel(table); divshow.Controls.Clear();
}
/// <summary>
/// 导出Excel方法
/// </summary>
/// <param name="ctl"></param>
private void ToExcel(System.Web.UI.Control ctl)
{
Response.Charset = "UTF-8";
Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = "application/ms-excel"; ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw); Response.Write(tw.ToString());
Response.End();
}
改成[code=C#]
public static void gSendGridInfoToExcel(Gridview GridX)
{
Excel.Application excel= new Excel.ApplicationClass();
Excel._Workbook xBk = excel.Workbooks.Add(true);
Excel._Worksheet xSt = (Excel._Worksheet)xBk.ActiveSheet;
Excel.Range excelCell=null;
try
{
//赋值对象
object[] objarr;
DataTable dtTest=new DataTable();;
int i,j;
int iRows,iCows;
int iVisable;
iVisable=0;
iCows=0;
ArrayList list=new ArrayList();
//如果绑定数据源是DataTable和DataSet,取得行数
if (GridX.DataSource is System.Data.DataSet || GridX.DataSource is System.Data.DataTable)
{
dtTest=(DataTable)GridX.DataSource;
iRows=dtTest.Rows.Count;
}
else if (GridX.DataSource is System.Data.DataView)
{
DataView dvTest=(DataView)GridX.DataSource;
iRows=dvTest.Count;
dtTest=dvTest.Table;
}
//如果是集合取得行数
else
{
System.Collections.CollectionBase ColTest;
ColTest=(System.Collections.CollectionBase)GridX.DataSource;
iRows=ColTest.Count;
}
//如果有TableStyles则根据TableStyles取得(标题行)
if (GridX.TableStyles.Count>0)
{
iCows=GridX.TableStyles[0].GridColumnStyles.Count;
for(i=0;i<iCows;i++)
{
if(GridX.TableStyles[0].GridColumnStyles[i].Width>0)
{
iVisable++;
list.Add(GridX.TableStyles[0].GridColumnStyles[i].HeaderText);
}
}
objarr = new object[iVisable];
objarr=list.ToArray();
excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iVisable]);
excelCell.Value2 = objarr;
//数据行
for(i=0;i<iRows;i++)
{
objarr = new object[iVisable];
list.Clear();
for(j=0;j<iCows;j++)
{
if(GridX.TableStyles[0].GridColumnStyles[j].Width>0)
{
list.Add("'"+GridX[i,j].ToString().Replace("\n",""));
}
}
if (list.Equals(System.DBNull.Value))
{
break;
}
objarr=list.ToArray();
excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iVisable]);
excelCell.Value2 = objarr;
}
}
else
{
iCows=dtTest.Columns.Count;
for(i=0;i<iCows;i++)
{
list.Add(dtTest.Columns[i].Caption);
}
objarr = new object[iCows];
objarr=list.ToArray();
excelCell = xSt.get_Range(excel.Cells[1,1],excel.Cells[1,iCows]);
excelCell.Value2 = objarr; //数据行
for(i=0;i<iRows;i++)
{
objarr = new object[iCows];
list.Clear();
for(j=0;j<iCows;j++)
{
list.Add("'"+GridX[i,j].ToString().Replace("\n",""));
}
if (list.Equals(System.DBNull.Value))
{
break;
}
objarr=list.ToArray();
excelCell = xSt.get_Range(excel.Cells[i+2,1],excel.Cells[i+2,iCows]);
excelCell.Value2 = objarr;
} }
dtTest.Dispose();
excel.Visible=true;
}
catch (System.Exception e)
{
throw e;
}
finally
{
excelCell=null;
xBk=null;
xSt=null;
excel=null;
GC.Collect();
}
}[code]或者找一个方法替换一下
传入Gridview 就行了。