转 https://www.cnblogs.com/zxs-onestar/p/9698762.html
//新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public NpoiMemoryStream() { AllowClose = true ; } public bool AllowClose { get ; set ; } public override void Close() { if (AllowClose) base .Close(); } } |
1
2
3
4
5
6
7
8
9
10
11
|
using ( var ms = new NpoiMemoryStream()) { ms.AllowClose = false ; xssfWorkBook.Write(ms); ms.Flush(); ms.Position = 0; ms.AllowClose = true ; byte [] msbytes = ms.GetBuffer(); //new byte[0]; return File(msbytes, excelType, "商品二维码打印数据" + DateTime.Now.ToString( "YYMMddhhmmss" ) + filetype); } |
使用 xssf 导出excel 会出现无法访问流的报错。 需要重写下数据流;
dx1 dy1 起始单元格中的x,y坐标.
dx2 dy2 结束单元格中的x,y坐标
col1,row1 指定起始的单元格,下标从0开始
col2,row2 指定结束的单元格 ,下标从0开始
dx1:图片左边相对excel格的位置(x偏移) 范围值为:0~1023;即输100 偏移的位置大概是相对于整个单元格的宽度的100除以1023大概是10分之一
dy1:图片上方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。
dx2:图片右边相对excel格的位置(x偏移) 范围值为:0~1023; 原理同上。
dy2:图片下方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。