今天记录下通过微软官方开源技术open-xml-sdk操作excel写入内存流,并将该内存流返回给Web客户端,该方法服务器端不用保存本地Excel文件,没有和磁盘的IO开销,效率更高,也不存在服务器excel文件太多需要删除的情况。废话不多说,直接上代码:

public static IActionResult ExportTest(string fileName){MemoryStream stream = new MemoryStream();//第一步,从输入输出流创建Excel文档包SpreadsheetDocument,这里使用内存流SpreadsheetDocument document = SpreadsheetDocument.Create(stream, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook);//第二步,添加WorkbookPart,并创建Workbook对象WorkbookPart workbookPart = document.AddWorkbookPart();workbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();//第三步,添加WorksheetPart,并创建Worksheet对象WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(new SheetData());//第四步,给Workbook添加WorksheetsSheets sheets = document.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());//第五步,创建Sheet对象实例,并绑定到给Workbook中,并将此sheet加入SheetsSheet sheet = new Sheet() { Id=document.WorkbookPart.GetIdOfPart(worksheetPart),SheetId=1,Name="mySheet"};sheets.Append(sheet);//第六步,保存workbookworkbookPart.Workbook.Save();//第七步,关闭Excel文档包SpreadsheetDocumentdocument.Close();//必须将流的当前位置置0,否则将引发异常//如果不设置为0,则流的当前位置在流的末端1629,然后读流就会从索引1629开始读取,实际上流的最大索引是1628,就会引发无效操作异常System.InvalidOperationException//System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628)stream.Position = 0;string fileExt = Path.GetExtension(fileName);var provider = new FileExtensionContentTypeProvider();var memi = provider.Mappings[fileExt];FileStreamResult fileStreamResult = new FileStreamResult(stream, memi) { FileDownloadName = fileName };return fileStreamResult;}

需要添加的引用:

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;

此过程中比较容易出错的点就是很多人容易忘记“stream.Position = 0;”这行代码,所以我记录下来,供大家参考。

System.InvalidOperationException: Response Content-Length mismatch: too few bytes written (0 of 1628相关推荐

  1. Neo4j企业版报错:py2neo.errors.ProtocolError: Cannot decode response content as JSON

    py2neo.errors.ProtocolError: Cannot decode response content as JSON 环境为neo4j-enterprise-5.1.0.py2neo ...

  2. The maximum string content length quota (8192) has been exceeded while reading XML data

    原文: The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们 ...

  3. C#——实现IComparableT 接口,ArrayLIst调用ArrayLIst.Sort()抛出System.InvalidOperationException异常解决方案

    问题描述 未经处理的异常: System.InvalidOperationException: 未能比较数组中的两个元素. ---> System.ArgumentException: 必须至少 ...

  4. System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”

    当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现错误:"System.InvalidOperationException:"寄宿 HWND 必须是子窗口.& ...

  5. 关于System.InvalidOperationException异常

    关于System.InvalidOperationException异常 参考文章: (1)关于System.InvalidOperationException异常 (2)https://www.cn ...

  6. asp.net 访问 access出现 ole_connection.ServerVersion引发了System.InvalidOperationException的解决

    今天在一台电脑上使用asp.net访问access,出现了 ole_connection.ServerVersion引发了System.InvalidOperationException: 下面是解决 ...

  7. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”...

    "System.InvalidOperationException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: ...

  8. System.InvalidOperationException: The stream does not support reading

    We are using EMS(.Net DLL, TIBCO.EMS.dll, version 4.3.0) as the middleware to communicate between .N ...

  9. [SoapUI] 在Test Step 下加Script Assertion,用 messageExchange 获取当前步骤的response content...

    //Get response content of the current request def response = messageExchange.getResponseContent()//C ...

最新文章

  1. 【组队学习】【24期】Docker教程
  2. 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
  3. Java 常见的OOM类型总结
  4. 2014蓝桥杯-B-省赛-五-圆周率
  5. uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)
  6. java第二部分项目_Java_第二次作业:项目构思与实现
  7. 2014/4/4做题感悟
  8. Zabbix如何通过ODBC对接Oracle获取相关数据
  9. HDU-3664 Permutation Counting(DP)
  10. windows下3389端口开启和连接
  11. 解构OPPO IoT:“开放生态”+“用户思维”,“智美生活”雏形已显
  12. C++ 高仿easyX图形库
  13. 设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类来继承图形类,并实现上述两个方法。并创建实例验证。
  14. 两轮差速机器人ROS下速度解算
  15. android学习资源大整合(持续更新ing)
  16. 使用sws_scale转换视频、使用swr_convert转换音频
  17. 怎么调大计算机浏览器内字体,浏览器字体大小怎么设置,教你浏览器字体大小怎么设置-win7旗舰版...
  18. replicate vs duplicate
  19. 【Java】检查二叉树是否平衡。
  20. SSD固态硬盘的闪存芯片颗粒介绍

热门文章

  1. 小程序源码:登录接口已修复梦想贩卖机V2 2.0.4 修复版
  2. 5G 与 MEC 边缘计算
  3. vue 实现元素可拖曳
  4. 易语言GIF屏幕录制
  5. 数据可视化:地图使用案例
  6. Excel模板导出并插入图片
  7. python求两数最大公因数_Python求两个数的最大公约数
  8. 刺激战场春节版年兽全网最详细位置,另附刺激战场更新内容
  9. [全]win7成功干掉win8--一个小U盘引发的血案(U盘在win8下装win7的方法)Lenovo V580c
  10. android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作