我的导出代码如下:
public bool OutPutToExcel(String fname)
{
bool Result = true;
String filename = "";
Excel._Application oExcel= new Excel.Application();
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook =oBooks.Add(Missing.Value);
Excel._Worksheet oSheet=(Excel._Worksheet)oBook.ActiveSheet;
try
{
try
{
filename =MapPath("\\");
filename+="data_excel\\"+fname + ".xls";
for (int i = 0 ;i<= (Session["GridContent"]as DataTable).Columns.Count - 1;i++)
oSheet.Cells[1, i + 1]= (Session["GridContent"]as DataTable).Columns[i].ColumnName; int num = (Session["GridContent"]as DataTable).Rows.Count;
int num2 = 0;
for (int i = 0;i<=num-1;i++)
{
if((Session["GridContent"]as DataTable).Rows[i].RowState.ToString() =="Deleted")
continue;
for (int j = 0 ; j<= (Session["GridContent"]as DataTable).Columns.Count-1;j++)
oSheet.Cells[num2 + 2, j + 1] = (Session["GridContent"]as DataTable).Rows[i].ItemArray[j];
num2++;
}
if (File.Exists(filename)) {
File.Delete(filename);
} }
catch
{
Result = false;
}
}
finally
{
oBook.Close(true ,filename,null);
//oBooks.Close();
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel); oSheet = null;
oBook = null;
oExcel = null;
System.GC.Collect(); //实现下载功能
string strFile = MapPath("\\")+"data_excel\\"+fname + ".xls";
FileStream fs = new FileStream(strFile, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strFile)) ;
Response.BinaryWrite(bytes);
Response.End();
fs.Close();
}
return Result;
}数据可以导出。我是把数据导出到服务器的某一路径下,提供客户端下载,跳出下载对话框时,如果选择保存,则保存完后。在点到页面上的web控件(autopostback为true)时就会跳出“未指明的错误”字样的脚本错误。定位到的脚本是asp.net本身产生的__doPostBack函数。如果下载对话框点“打开”则没有任何问题。这个问题比较奇怪,哪位高人能指点一下,万分感激!
public bool OutPutToExcel(String fname)
{
bool Result = true;
String filename = "";
Excel._Application oExcel= new Excel.Application();
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook =oBooks.Add(Missing.Value);
Excel._Worksheet oSheet=(Excel._Worksheet)oBook.ActiveSheet;
try
{
try
{
filename =MapPath("\\");
filename+="data_excel\\"+fname + ".xls";
for (int i = 0 ;i<= (Session["GridContent"]as DataTable).Columns.Count - 1;i++)
oSheet.Cells[1, i + 1]= (Session["GridContent"]as DataTable).Columns[i].ColumnName; int num = (Session["GridContent"]as DataTable).Rows.Count;
int num2 = 0;
for (int i = 0;i<=num-1;i++)
{
if((Session["GridContent"]as DataTable).Rows[i].RowState.ToString() =="Deleted")
continue;
for (int j = 0 ; j<= (Session["GridContent"]as DataTable).Columns.Count-1;j++)
oSheet.Cells[num2 + 2, j + 1] = (Session["GridContent"]as DataTable).Rows[i].ItemArray[j];
num2++;
}
if (File.Exists(filename)) {
File.Delete(filename);
} }
catch
{
Result = false;
}
}
finally
{
oBook.Close(true ,filename,null);
//oBooks.Close();
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel); oSheet = null;
oBook = null;
oExcel = null;
System.GC.Collect(); //实现下载功能
string strFile = MapPath("\\")+"data_excel\\"+fname + ".xls";
FileStream fs = new FileStream(strFile, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strFile)) ;
Response.BinaryWrite(bytes);
Response.End();
fs.Close();
}
return Result;
}数据可以导出。我是把数据导出到服务器的某一路径下,提供客户端下载,跳出下载对话框时,如果选择保存,则保存完后。在点到页面上的web控件(autopostback为true)时就会跳出“未指明的错误”字样的脚本错误。定位到的脚本是asp.net本身产生的__doPostBack函数。如果下载对话框点“打开”则没有任何问题。这个问题比较奇怪,哪位高人能指点一下,万分感激!
解决方案 »
- iis应用池
- 小问题(关于DropDownList)
- DataTable临时表保存数据问题,怎么可以叠加保存数据 急!!!!!
- asp.net的问题
- 到底是怎么回事呀??????我这3年在csdn上的问题怎么一下子给我删了!!!!!!!!!!!!!!!!!!!!!!111
- 急急急急求asp.net中如何用程序将数据库中的数据以一定的格式导出到一个记事本中
- 如何动态添加imagebutton列;如何更改绑定列的列名
- 能不能在web页中打印Datagrid???
- asp.net mvc添加控制器时选择列表中不能看到我的模型类
- Message.InnerHtml如何调用
- ASP.Net如何打開Doc,Xls文件??
- 编译出错的问题[请问]
请尝试使用regsvr32重新注册一下actxprxy.dll和shdocvw.dll
FileStream fs = new FileStream(strFile, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(strFile)) ;
Response.BinaryWrite(bytes);
Response.End();
fs.Close();
--出现保存页面,再设定几秒之后关掉该页面
这个是导datagrid数据的
我试着好用 你试试private void Button1_Click(object sender, System.EventArgs e)
{
if (this.dgrdMain.Items.Count > 0)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="UTF-8";
Response.AppendHeader("Content-Disposition","attachment;filename=2005-12-12.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw); this.dgrdMain.RenderControl(hw); Response.Write(tw.ToString());
Response.End();
}
}
因为我把这个页面放在Frame中的话就会出现这个错误
但是单独拿出来运行的话就不会出现了.而且, 导出完Excel以后, 如果是直接打开, 也不会报错, 但是如果是先保存再打开的话就同样会报错了暂时也找不到原因, 只有新开一个窗口来做Excel的生成, 就不会出错了
但是这样的话如果保存Excel文件以后这个新开的窗口不会自动被关闭, 不爽.