关于导出EXCEL出现的问题

zym7511 2011-02-23 04:56:11
在某些客户的电脑上导出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();
}
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zym7511 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net5354 的回复:]
此方法导出不支持下载软件下载
要关闭下载软件与浏览器的关联,用系统自带的文件下载
[/Quote]

谢谢~~ 知道为什么了~。。
zym7511 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxr0323 的回复:]
C# code

/// <summary>
/// 导出Excel方法
/// </summary>
/// <param name="ctl"></param>
private void ToExcel(System.Web.UI.Control ctl)
{
Response.Charset = "UTF-8";
Response.AppendH……
[/Quote]

谢谢~~ 知道为什么了~。。
net5354 2011-02-23
  • 打赏
  • 举报
回复
此方法导出不支持下载软件下载
要关闭下载软件与浏览器的关联,用系统自带的文件下载
子夜__ 2011-02-23
  • 打赏
  • 举报
回复

/// <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 就行了。
子夜__ 2011-02-23
  • 打赏
  • 举报
回复
http://apps.hi.baidu.com/share/detail/14881779
zym7511 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhangyunhebei 的回复:]
去吧
[/Quote]


?????什么
  • 打赏
  • 举报
回复

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧