ASP.NET导出excel的问题

问题描述

Microsoft.Office.Interop.Excel.dll我调用这个类库privatevoidExcelDataTable(DataTabledt){if(dt==null||dt.Rows.Count==0)return;//*****此时使用Application,而不是ApplicationClassMicrosoft.Office.Interop.Excel.ApplicationxlApp=newMicrosoft.Office.Interop.Excel.Application();if(xlApp==null)return;Microsoft.Office.Interop.Excel.Workbooksworkbooks=xlApp.Workbooks;//Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheetMicrosoft.Office.Interop.Excel.Workbookworkbook=workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);Microsoft.Office.Interop.Excel.Worksheetworksheet=(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];Microsoft.Office.Interop.Excel.Rangerange1;for(inti=0;i<dt.Columns.Count;i++){worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName;range1=(Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1,i+1];//range.Interior.ColorIndex=15;range1.Columns.AutoFit();range1.Font.Bold=true;}for(intr=0;r<dt.Rows.Count;r++)for(inti=0;i<dt.Columns.Count;i++){worksheet.Cells[r+2,i+1]=dt.Rows[r][i].ToString();}Microsoft.Office.Interop.Excel.Rangerange2=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[dt.Rows.Count+1,dt.Columns.Count]);range2.Columns.AutoFit();//服务器端直接打开文件//xlApp.Visible=true;//workbook.Saved=true;workbook.SaveAs("C:\Users\wyl\Desktop\table.xlsx");//workbook.SaveCopyAs("C:\Users\wyl\Desktop\table.xlsx");//释放excel资源workbook.Close(true,Type.Missing,Type.Missing);workbook=null;xlApp.Quit();xlApp=null;}在页面后台,把datatable的数据放入到新的workbook里后然后保存到指定路径,我就做到这里,也没什么问题现在的问题是页面前台查询完成后,显示表结果,然后点导出Excel在客户端导出excel(也就是下载查询结果生成的excel),是不是必须先保存到服务器端,再下载??如果是这样的话,那么下载一万次,服务器端就有1w个文件了。。我是希望在后台DataTable生成excel后,直接输出到客户端下载

解决方案

解决方案二:
stringfileName=HttpUtility.UrlEncode("Excel文件名为中文哦.xls");Response.Clear();Response.Buffer=true;Response.AppendHeader("Content-Disposition","attachment;filename="+fileName);Response.ContentEncoding=System.Text.Encoding.UTF8;Response.ContentType="application/vnd.ms-excel";this.EnableViewState=false;

解决方案三:
引用1楼guwei4037的回复:

stringfileName=HttpUtility.UrlEncode("Excel文件名为中文哦.xls");Response.Clear();Response.Buffer=true;Response.AppendHeader("Content-Disposition","attachment;filename="+fileName);Response.ContentEncoding=System.Text.Encoding.UTF8;Response.ContentType="application/vnd.ms-excel";this.EnableViewState=false;

怎么获取后台的workbook呢
解决方案四:
LZ用的技术属于com范畴;一般b/s结构的程序,不使用这样的技术,微软后来出现了openxml这样的技术,并且提供相应的类库。codeproject、github一般都有源码;在msdn官方文档是有相关资料:https://msdn.microsoft.com/en-us/library/office/bb448854.aspx
解决方案五:
我现在就用这种方法,貌似就差一步
解决方案六:
可以这样做,每次导出都生成一个文件,下载完成以后删除
解决方案七:
引用5楼ymq_2012的回复:

可以这样做,每次导出都生成一个文件,下载完成以后删除

下载完是客户端,服务器端怎么判断
解决方案八:
privatevoidExcelDataTable(DataTabledt){if(dt==null||dt.Rows.Count==0)return;//*****此时使用Application,而不是ApplicationClassMicrosoft.Office.Interop.Excel.ApplicationxlApp=newMicrosoft.Office.Interop.Excel.Application();if(xlApp==null)return;Microsoft.Office.Interop.Excel.Workbooksworkbooks=xlApp.Workbooks;//Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheetMicrosoft.Office.Interop.Excel.Workbookworkbook=workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);Microsoft.Office.Interop.Excel.Worksheetworksheet=(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];Microsoft.Office.Interop.Excel.Rangerange1;for(inti=0;i<dt.Columns.Count;i++){worksheet.Cells[1,i+1]=dt.Columns[i].ColumnName;range1=(Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1,i+1];//range.Interior.ColorIndex=15;range1.Columns.AutoFit();range1.Font.Bold=true;}for(intr=0;r<dt.Rows.Count;r++)for(inti=0;i<dt.Columns.Count;i++){worksheet.Cells[r+2,i+1]=dt.Rows[r][i].ToString();}Microsoft.Office.Interop.Excel.Rangerange2=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[dt.Rows.Count+1,dt.Columns.Count]);range2.Columns.AutoFit();//服务器端直接打开文件//xlApp.Visible=true;//workbook.Saved=true;workbook.SaveAs("C:\Users\wyl\Desktop\table.xlsx");//workbook.SaveCopyAs("C:\Users\wyl\Desktop\table.xlsx");//释放excel资源workbook.Close(true,Type.Missing,Type.Missing);workbook=null;xlApp.Quit();xlApp=null;}

解决方案九:
https://github.com/jmaister/excellentexport用这个js就解决问题了.没必要那么麻烦,还的服务器在查询一次,在保存,在删除的,js是读取的网页上面的table,table是什么样的,保持下来就是什么样的.

时间: 2024-09-17 11:21:33

ASP.NET导出excel的问题的相关文章

Asp.net导出Excel续:自定义合并单元格,非Office组件

结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置的麻烦,这次就不使用Office组件来生成Excel了. 上篇文章:Asp.net导出Excel(HTML输出)

asp.net导出excel的简单方法

 这篇文章主要介绍了asp.net导出excel的简单方法实例,需要的朋友可以参考下 excel的操作,最常用的就是导出和导入,废话不多说上代码.   本例使用NPOI实现的,不喜勿喷哈....    代码如下: /// <summary>         /// 导出Excel         /// </summary>         /// <param name="stime"></param>         /// <

asp.net导出Excel类库代码分享

 这篇文章主要介绍了asp.net导出Excel类库代码,有需要的朋友可以参考一下    代码如下: using System; using System.Collections.Generic; using System.Reflection; using System.Web; using Excel = Microsoft.Office.Interop.Excel;   /// <summary> ///ExcelClass 的摘要说明 /// </summary> publ

asp.net-关于ASP.NET导出Excel的问题

问题描述 关于ASP.NET导出Excel的问题 我们这边有一个ASP.NET导出Excel的功能,但是在导出的时候,有些情况下是正常的,有些情况就直接导出了整个页面,请问各位大神大概是什么原因导致的?代码如下: //Excel2007的连接字符串 string strCon = ""Provider=Microsoft.ACE.OLEDB.12.0;Data Source="" + filePath + "";Extended Properti

【译】Asp.Net 导出 Excel 数据的9种方案

原文 http://www.cnblogs.com/garydot/archive/2012/06/04/excel-export.html 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如:如果你在Excel 单元格中输入数字 "123456789012" 会自动转化为"1.23457E+11". 背景介绍 正因为E

asp.net导出excel 手动输入文件名怎么做

问题描述 asp.net导出excel手动输入文件名怎么做如题 解决方案 解决方案二:publicstaticvoidExportToExcel(stringfileName,DataGridViewdataGridView1){stringsaveFileName="";//boolfileSaved=false;SaveFileDialogsaveDialog=newSaveFileDialog();saveDialog.DefaultExt="xls";sav

ASP.net 导出excel,无法kill进程。(在线等待...)

问题描述 遇到一个问题,在win7下开发的,asp.net导出excel(2007),在正常情况下,能够顺利导出,且进程正常结束,但是当创建excel进程之后,出现异常了,启动publicstaticvoidKillExcelProcess(){System.Diagnostics.Process[]excelProcesses=System.Diagnostics.Process.GetProcessesByName("EXCEL");DateTimestartTime=newDat

asp.net导出excel文件的程序调试没问题但布置时出现问题

asp.net布置导出excel文件的程序,报80070005 8000401A的错误解决方法 .NET导出Excel遇到的80070005错误的解决方法: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005基本上.net导出excel文件,都需要如此配置一下,不配置有的时候没错,而配置后基本应该不会出错. 具体配置方法如下:  1:在服务器上安装office的Excel软件. 

asp.net导出EXCEL的功能代码_实用技巧

复制代码 代码如下: //由gridviw导出为Excel public static void ToExcel(System.Web.UI.Control ctl) { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls"); HttpContext.Current.Response.Charset = "UTF-8

asp.net 导出excel与单元格中图片的方法:

asp教程.net 导出excel与单元格中图片的方法: 在asp.net教程中导出excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在response输出时,t分隔的数据,导出excel时,等价于分列,n等价于换行. 1.将整个html全部输出excel 此法将html中所有的内容,如按钮,表格,图片等全部输出到excel中.    response.clear();        response.buf