当前位置:网站首页>epplus复制模板后打印区域变小的问题
epplus复制模板后打印区域变小的问题
2022-06-25 04:02:00 【firechun】
在ASP.NET MVC Core中,用户需要打印时,从事先做的Excel模板中把Sheet复制过来,然后填充数据,最后返回文件流,用epplus实现,关键代码如下:
using var template = new ExcelPackage(new FileInfo(templateFile));
using var stream = new MemoryStream();
using var package = new ExcelPackage(stream);
var sheet = package.Workbook.Worksheets.Add("报告", template.Workbook.Worksheets[0]);
//填充数据,略
package.Save();
return File(stream.GetBuffer(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{fileName}.xlsx");
代码本身没有问题,生成的文件中的数据和格式也没有问题。但是打印时发现,在模板文件设置好的打印区域,在新文件中“变大了”,也就是模板文件中一张A4纸刚好打印完的内容,在新文件中,一张A4纸打印不下了。
对照模板文件和新文件,打印设置完全一样。因为对Excel并不熟悉,epplus也没有完整文档,所以不清楚复制一个Sheet到另一个文件中,要想保持所有内容一模一样,是不是还有其它相关设置要处理。
即然只复制一个Sheet会有问题,那么复制整个文件应该不会有问题吧?于是按照这个思路修改代码:
using var template = new ExcelPackage(new FileInfo(templateFile));
using var stream = new MemoryStream();
//复制整个文件到内存流中
template.SaveAs(stream);
using var package = new ExcelPackage(stream);
//填充数据,略
package.Save();
return File(stream.GetBuffer(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{fileName}.xlsx");
打印没有问题了,另一个问题又出现:填充的数据以及其它修改都没有被保存!简单地说,就是package.Save()这行代码仿佛没有调用一样。
最终解决方案如下:
using var template = new ExcelPackage(new FileInfo(templateFile));
using var stream = new MemoryStream();
//复制整个文件到内存流中
template.SaveAs(stream);
using var package = new ExcelPackage(stream);
//填充数据,略
//必须创建一个新的内存流,并且用SaveAs把内容保存到这个内存流中才可以,很奇怪。
using var outputStream = new MemoryStream();
package.SaveAs(outputStream);
return File(outputStream.GetBuffer(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{fileName}.xlsx");
因为缺少文档,问题虽然解决了,但原因还是没有搞清楚。
边栏推荐
- Construction scheme of distributed websocket
- Code scanning payment flow chart of Alipay payment function developed by PHP
- [esp32 learning path 6 - Flash encryption]
- 初识 Flutter 的绘图组件 — CustomPaint
- Leader: who can use redis expired monitoring to close orders and get out of here!
- Multithreading structure of gbase 8s
- Successfully solved: selenium common. exceptions. TimeoutException: Message: timeout: Timed out receiving message from
- js的arguments
- 我的IC之旅——资深芯片设计验证工程师成长——“胡”说IC工程师完美进阶
- Simple text analysis of malicious samples - Introduction
猜你喜欢

How do the defi protocols perform under this round of stress test?

LabVIEW development gas regulator

Mongodb cluster

成功解决:selenium.common.exceptions.TimeoutException: Message: timeout: Timed out receiving message from

js的sort()函数

冰冰学习笔记:循环队列的实现

本轮压力测试下,DeFi协议们表现如何?

Upgrade PHP to php7 The impact of X (2), the obsolescence of mcrypt decryption

Efficient NoSQL database service Amazon dynamodb experience sharing

执行SQL响应比较慢,你有哪些排查思路?
随机推荐
【FLink】access closed classloader classloader.check-leaked-classloader
冰冰学习笔记:循环队列的实现
Unity Quad culls shaders with back faces and transparent parts
Data import and export for gbase 8s
以太网是什么要怎么连接电脑
php封装curl发送get、post请求方法,并使用
CTF_ Web: Advanced questions of attack and defense world expert zone WP (19-21)
Record of the 25th week
DMA double buffer mode of stm32
GBASE 8s存储过程流程控制
Gbase 8s memory management
ROS2/DDS/QoS/主题的记录
Solution of gbase 8s livelock and deadlock
Upgrade PHP to php7 The impact of X (I). The problem of session retention. Keep login
Method of opening data recovery of solid state disk
为什么SQL语句命中索引比不命中索引要快?
Successfully solved: selenium common. exceptions. TimeoutException: Message: timeout: Timed out receiving message from
At the age of 30, I began to learn programming by myself. Is it still time for me to have difficulties at home?
Php7.2 add JPEG extension
《牛客刷verilog》Part I Verilog快速入门