c# – 从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly)

c# – 从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly),第1张

概述我正在尝试使用Microsoft Office EXCEL INTEROP将C#DataTable动态导出到EXCEL文件(不创建物理文件),并通过asp.net网页通过Response对象下载.我能够使用库生成内存流但不知何故该文件没有通过内存流保存.参考代码如下.您将需要参考DocumentFormat.OpenXml.dll& WindowsBase.DLL(可以从microsoft站点下载 我正在尝试使用Microsoft Office EXCEL INTEROP将C#Datatable动态导出到EXCEL文件(不创建物理文件),并通过asp.net网页通过Response对象下载.我能够使用库生成内存流但不知何故该文件没有通过内存流保存.参考代码如下.您将需要参考documentFormat.OpenXml.dll& WindowsBase.DLL(可以从microsoft站点下载).

任何想法如何解决问题? ? ?

Private voID Downloadfile(){                DataSet objtable = ReadtableFromVIEwstate();            if (objtable != null && objtable.Rows.Count > 0)            {                string strDownloadablefilename = "TestExcelfilename.xls";                MemoryStream fs1 = new MemoryStream();                if (CreateExcelfile.CreateExceldocument(objtable,fs1))                {                    Response.Clear();                        byte[] data1 = new byte[fs1.Length];                        fs1.Read(data1,data1.Length);                        fs1.Close();                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";                    response.addheader("Content-disposition",string.Format("attachment; filename={0}",strDownloadablefilename));                    Response.BinaryWrite(data1); ;                   Response.End();                }                else                {                    LblErrorMessage.Text = "Error Exporting file.";                }            }        }

..

public static bool CreateExceldocument(DataSet ds,System.IO.Stream excelfileStream)    {        try        {            using (Spreadsheetdocument document = Spreadsheetdocument.Create(excelfileStream,SpreadsheetdocumentType.Workbook))            {                CreateParts(ds,document);            }            Trace.Writeline("Successfully created: " + excelfileStream);            return true;        }        catch (Exception ex)        {            Trace.Writeline("Failed,exception thrown: " + ex.Message);            return false;        }    }..private static voID CreateParts(DataSet ds,Spreadsheetdocument document)        {            WorkbookPart workbookPart = document.AdDWorkbookPart();            Workbook workbook = new Workbook();            workbookPart.Workbook = workbook;            //  If we don't add a "WorkbookStylesPart",olEDB will refuse to connect to this .xlsx file !                WorkbookStylesPart workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>("rIDStyles");            Stylesheet stylesheet = new Stylesheet();            workbookStylesPart.Stylesheet = stylesheet;            Sheets sheets = new Sheets();            //  Loop through each of the Datatables in our DataSet,and create a new Excel Worksheet for each.        uint worksheetNumber = 1;        foreach (Datatable dt in ds.tables)        {            //  For each worksheet you want to create            string workSheetID = "rID" + worksheetNumber.ToString();            string worksheetname = dt.tablename;            WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(workSheetID);            WriteDatatableToExcelWorksheet(dt,worksheetPart);            Sheet sheet = new Sheet() { name = worksheetname,SheetID = (UInt32Value)worksheetNumber,ID = workSheetID };            sheets.Append(sheet);            worksheetNumber++;        }        workbook.Append(sheets);    }
解决方法 感谢All,最后我解决了我的问题.我刚刚更换了以下代码行:
byte[] data1 = new byte[fs1.Length];                    fs1.Read(data1,data1.Length);                    fs1.Close();

用这条线

byte[] data1 = fs1.ToArray();

我的问题得到了解决.

总结

以上是内存溢出为你收集整理的c# – 从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly)全部内容,希望文章能够帮你解决c# – 从ASP.NET页面下载EXCEL文件而不在服务器上生成物理文件(On The Fly)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1243036.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存