首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用EPPLUS生成多个Excel文件并使用C#中的ActionResult中的DotNetZip压缩后,excel文件被损坏

EPPLUS是一个用于操作Excel文件的开源库,它提供了丰富的功能和灵活的API,可以方便地生成、读取和修改Excel文件。在C#中使用EPPLUS生成多个Excel文件后,可以使用ActionResult中的DotNetZip库对这些文件进行压缩。

DotNetZip是一个开源的压缩库,它可以在C#中方便地进行文件和文件夹的压缩和解压缩操作。通过将生成的多个Excel文件添加到DotNetZip的压缩流中,可以将这些文件压缩成一个ZIP文件。

然而,有时候在使用EPPLUS生成的Excel文件被添加到DotNetZip的压缩流中后,可能会导致Excel文件损坏的问题。这个问题通常是由于文件流没有正确关闭导致的。

为了解决这个问题,可以在生成Excel文件后,使用using语句来确保文件流被正确关闭。同时,在将Excel文件添加到压缩流之前,可以先将生成的Excel文件保存到临时文件夹中,然后再读取该文件进行压缩操作。这样可以避免在文件流未关闭时进行操作导致的损坏问题。

以下是一个示例代码,演示了如何使用EPPLUS生成多个Excel文件并使用DotNetZip进行压缩:

代码语言:txt
复制
using OfficeOpenXml;
using System.IO;
using System.Web.Mvc;
using Ionic.Zip;

public class ExcelController : Controller
{
    public ActionResult GenerateAndCompressExcelFiles()
    {
        // 生成多个Excel文件
        for (int i = 1; i <= 3; i++)
        {
            using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
                worksheet.Cells["A1"].Value = "Hello World " + i;

                // 保存Excel文件到临时文件夹
                string filePath = Path.Combine(Server.MapPath("~/Temp"), "ExcelFile" + i + ".xlsx");
                package.SaveAs(new FileInfo(filePath));
            }
        }

        // 压缩Excel文件
        using (ZipFile zip = new ZipFile())
        {
            string[] excelFiles = Directory.GetFiles(Server.MapPath("~/Temp"), "ExcelFile*.xlsx");

            foreach (string excelFile in excelFiles)
            {
                // 读取Excel文件进行压缩
                zip.AddFile(excelFile, "");
            }

            // 设置压缩文件保存路径
            string zipFilePath = Path.Combine(Server.MapPath("~/Temp"), "CompressedFiles.zip");

            // 保存压缩文件
            zip.Save(zipFilePath);

            // 返回压缩文件
            return File(zipFilePath, "application/zip", "CompressedFiles.zip");
        }
    }
}

在上述示例代码中,首先使用EPPLUS生成了3个Excel文件,并将它们保存到临时文件夹中。然后使用DotNetZip创建了一个压缩流,并将生成的Excel文件添加到压缩流中。最后,将压缩文件返回给客户端。

这样,通过使用using语句确保文件流被正确关闭,以及将生成的Excel文件保存到临时文件夹中进行压缩操作,可以避免Excel文件被损坏的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用SharpZipLib压缩打包多个内存文件

SharpZipLib是C#开源压缩压缩组件,最近项目上遇到一个需求:根据用户选择项目生成CSV文件下载,后来改为同时生成2个CSV文件下载下来。...SharpZipLib可以通过很简单代码就将多个文件打包成一个zip包,形如: using (ZipFile zip = ZipFile.Create(@"E:\test.zip")) {...byte[],但是我们做是WebApplication,不希望是在Web服务器上把两个CSV文件生成保存到硬盘上,然后调用上面的方法压缩硬盘上文件。...我们文件应该都是在内存中生成,在内存打包,然后直接把生成zip文件二进制流返回给用户,让用户下载。...同样方式,如果是在内存中生成了二进制文件,也可以使用实现IStaticDataSource接口方式来打包。

2.3K10

测试驱动之excel文件在自动化使用(十二)

一般性,数据存储在excel,也是一种选择,但是必须安装对应库,要不python是无法操作excel文件,安装第三方库为为xlrd,安装命令为: pipinstall xlrd 安装过程见截图...Excel文件后缀格式为.xlsx,实例excel数据为: ? 所以,我们需要读取excel数据,首先需要import xlrd,然后才可以读取excel文件数据。...在excel文件,cell是单元格,sheet是工作表,一个工作表由N个单元格来组成。...如果读取excel一个sheet对象所有数据,修改代码为: defgetExcels(file_name='d:\\test.xlsx'): rows=[] book=...文件在自动化引用,测试点分别为: 1、输入百度账号,未输入百度密码,点击登陆,验证返回错误信息; 2、输入错误百度账号密码,点击登录,验证返回错误信息; 我们读excel文件函数,登录百度函数写在

1.9K30
  • 使用Python批量筛选上千个Excel文件某一行数据另存为新Excel文件(上篇)

    二、需求澄清 粉丝问题来源于实际需求,她现在想要使用Python批量筛选上千个Excel文件某一行数据另存为新Excel文件,如果是正常操作的话,肯定是挨个点击进去Excel文件,然后CTRL...+F找到满足筛选条件数据,之后复制对应那一行,然后放到新建Excel文件中去。...这样做肯定是可以,但是当有上百个文件夹需要复制呢?上千个文件呢?肯定就需要消耗大量时间和精力了。估计一天都不一定完成了。 这里使用Python进行批量实现,流程下来,1分钟不到搞定!.../res/' + name_list[0][i]) 三、实现过程 这里给大家提供两个可行代码,思路也很简单,直接遍历文件夹,然后加条件筛选,之后符合条件,直接使用concat进行合并,代码如下:...("target.xlsx") 代码运行之后,就可以把某一文件夹下所有Excel满足筛选条件Excel行,存到一个单独Excel中去。

    2.4K30

    使用Python批量筛选上千个Excel文件某一行数据另存为新Excel文件(下篇)

    昨天给大家分享了使用Python批量筛选上千个Excel文件某一行数据另存为新Excel文件(上篇),今天继续给大家分享下篇。 二、需求澄清 需求澄清这里不再赘述了,感兴趣小伙伴请看上篇。...手把手教你4种方法用Python批量实现多Excel多Sheet合并、盘点4种使用Python批量合并同一文件夹内所有子文件夹下Excel文件内所有Sheet数据、补充篇:盘点6种使用Python批量合并同一文件夹内所有子文件夹下...Excel文件内所有Sheet数据、手把手教你用Python批量实现文件夹下所有Excel文件第二张表合并。...result.append(df) df = pd.concat(result) df.to_excel("hebing.xlsx", index=False) 之后可以看到合并数据如下图所示:...现在就可以针对合并数据进行筛选了,代码和上篇一样,如下所示: # import os import pandas as pd df = pd.read_excel("hebing.xlsx"

    1.7K20

    Python操控Excel使用Python在主文件添加其他工作簿数据

    标签:Python与Excel,合并工作簿 本文介绍使用Python向Excel文件添加新数据最佳方法。该方法可以保存主数据格式和文件所有内容。...安装库 本文使用xlwings库,一个操控Excel文件最好Python库。...使用文件 可以使用xlwings打开Excel文件。执行下面的代码(如下图1),将打开Excel文件。 图1 主文件内容如下图2所示。...图4 打开读取新数据文件 打开新数据文件,从中获取所有非空行和列数据。使用.expand()方法扩展单元格区域选择。注意,从单元格A2开始扩展,因为第1列为标题行。...图6 将数据转到主文件 下面的代码将新数据工作簿数据转移到主文件工作簿: 图7 上述代码运行,主文件如下图8所示。 图8 可以看到,添加了新数据,但格式不一致。

    7.9K20

    Unity数据持久化,使用excel文件、yaml、xml、json等方式

    Unity数据持久化,可以使用excel文件、yaml、xml、json等方式。在Unity读取和写入Excel文件可以通过使用一些第三方库来实现。...以下是一个常见方法:首先,下载导入一个支持Excel文件操作第三方库,比如EPPlus。你可以从GitHubEPPlus页面下载最新版本。...在Unity创建一个C#脚本,用于处理Excel文件读取和写入操作。在脚本引入EPPlus命名空间。...使用EPPlus时,请确保目标Excel文件格式正确,并且库版本与Unity兼容。以上是使用EPPlus库在Unity读取和写入Excel文件基本方法。...读取XML文件数据可以使用XmlDocument对象方法来打开XML文件读取其中数据。

    1.2K82

    手把手教你使用openpyxl库从Excel文件中提取指定数据生成文件(附源码)

    前言 前几天有个叫【Lcc】粉丝在Python交流群里问了一道关于从Excel文件中提取指定数据生成文件问题,初步一看确实有点难,不过还是有思路。...她目标就是想提取文件A列单元格数据为10所有行,看到A列表头是时间,10就代表着上午10小时,也就是说她需要提取每一天上午10点钟数据。...这个数据在做研究时候还是挺有用,之后结合作图,就可以挖掘出部分潜在规律了,这个在此不做深究。 一、思路 这个问题看似简单,直接用Excel筛选就可以了。...诚然,数据筛选,之后扩展行确实可以做到,针对一个或者两个或者10位数以下Excel文件,我们尚且可以游刃有余,但是面对成百上千个这样数据文件,怕就力不从心了,如果还是挨个进行处理,那就难受了,所以用...本文基于粉丝提问如何从Excel文件中提取指定数据生成文件问题,给出了两种解决方案。

    3.9K10

    手把手教你使用Pandas从Excel文件中提取满足条件数据生成文件(附源码)

    文件 df.to_excel('数据筛选结果2.xlsx') 方法二:把日期中分秒替换为0 import pandas as pd excel_filename = '数据.xlsx' df =...文件 df.to_excel('数据筛选结果2.xlsx') 方法五:对日期时间进行重新格式,并按照新日期时间删除 import pandas as pd excel_filename = '数据...【月神】使用了floor向下取整,也就是抹去零头。...本来【瑜亮老师】还想用ceil向上取整试试,结果发现不对,整点会因为向上取整而导致数据缺失,比如8:15,向上取整就是9点,如果同一天刚好9:00也有一条数据,那么这个9点数据就会作为重复数据而删除...这篇文章主要分享了使用Pandas从Excel文件中提取满足条件数据生成文件干货内容,文中提供了5个方法,行之有效。

    3.6K50

    最好.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)

    在项目开发,除了对数据展示更多就是对文件相关操作,例如文件创建和删除,以及文件压缩和解压。...DotNetZip是一个FAST,免费类库和用于操纵zip文件工具集。 使用VB,C#或任何.NET语言轻松创建,解压缩或更新zip文件。...在VB,C#或任何.NET语言或任何脚本环境创建和读取zip文件。   DotNetZip组件使用环境,毕竟软件使用环境是每一个开发者都需要考虑,这个世界没有绝对好事,当然也没有绝对坏事。...8.WCF服务,接收作为附件zip文件动态地将zip解压缩到流以进行分析。   9.一个老式ASP(VBScript)应用程序,通过COM接口为DotNetZIp生成一个ZIP文件。   ...无论使用什么环境,DotNetZip生成zip文件可与Windows资源管理器以及Java应用程序,在Linux上运行应用程序完全互操作。     该组件设计简单,易于使用

    3.2K70

    Laravel 使用Excel导出文件,指定列数据格式为日期,方便后期数据筛选操作

    背景 最近,后台运维要求导出 Excel文件,对于时间筛选,能满足年份、月份选择 通过了解,发现: 先前导出文件,默认列数据都是字符串(文本)格式 同时,因为用是 Laravel-excel...控件版本问题,要实现方式也不同 在此,根据版本不同,进行步骤整理,以便能帮助到有需要小伙伴 … 所要达成目标 框架 Laravel 版本: Laravel5.8 Excel...- Column formatting 参考文章:laravel-excel导出时候写入日期格式数据怎么在excel中正确显示成可以筛选日期格式数据 提示 1....文件方法、get_days_since1900() /** * @notes:保存Excel文件 * @param string $title 标题 * @...,参考截图如下: 附录 参考文章 laravel-excel导出时候写入日期格式数据怎么在excel中正确显示成可以筛选日期格式数据 Laravel Excel 3.1 导出表格详解(

    10510

    Excel文档暗藏危机?黑客利用.NET库生成恶意文件可绕过安全检测

    近期,NVISO Labs安全研究人员发现一个新型恶意软件团伙利用一个新技术生成Excel文件,无需使用Microsoft Office即可创建包含大量宏Excel工作簿,这些恶意Excel文件比较难被检测到...恶意表格文件EPPlus编译 这些恶意Excel文件也是“出身不凡”,它们并不是在常规Microsoft Office软件编译,而是在带有EPPlus.NET库编译。...开发人员会使用该库来添加“导出为Excel”或“另存为电子表格”功能,简单来说,可用来生成多种电子表格格式文件,甚至支持Excel 2019。...安全研究团队在报告写到。 Epic Manchego利用该库EPPlus生成Office Open XML(OOXML)格式电子表格文件。...尽管生成恶意Excel文件方式不同,但是由EPPlus生成电子表格仍然可以像正常Excel文档那样工作。这让用户很难辨别和发现Excel表格异样了。

    2.9K20

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出

    这个比现流行NPOI与EPPlus更加优秀组件,以Open XML SDK为基础,所以只支持xlsx,不支持xls格式(现阶段谁没有个office2007以上版本) 他导出Excel根据官方描述,...兼容性远超同行对手 如果你不是使用本架构只看2,3,4点,使用BLL层代码,这同样适用你MVC程序 知识点: LinqToExcel组件读取Excel文件 ClosedXML组件输出Excel...准备: 一张演示数据库表 安装LinqToExcel NuGet包 文件上传样例 CloseXML导出Excel 开始: 1.数据表 CREATE TABLE [dbo]....按照之前做法,更新到EF。利用T4生成DAL,BLL,MODEL。再用代码生成生成界面复制进解决方案,一步到位 配置好访问地址和权限,直接运行 ?  ...3.文件上传 (这一点简单带过,可以到网上下载上传代码植入到自己系统) 或者下载第32节源码 或者下载本节示例代码都可以 我这里使用普通form上传功能 添加导入前端代码 <div id="uploadExcel

    1.2K01

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出

    这个比现流行NPOI与EPPlus更加优秀组件,以Open XML SDK为基础,所以只支持xlsx,不支持xls格式(现阶段谁没有个office2007以上版本) 他导出Excel根据官方描述,...兼容性远超同行对手 如果你不是使用本架构只看2,3,4点,使用BLL层代码,这同样适用你MVC程序 知识点: LinqToExcel组件读取Excel文件 ClosedXML组件输出Excel 准备...: 一张演示数据库表 安装LinqToExcel NuGet包 文件上传样例 CloseXML导出Excel 开始: 1.数据表 CREATE TABLE [dbo]....按照之前做法,更新到EF。利用T4生成DAL,BLL,MODEL。再用代码生成生成界面复制进解决方案,一步到位 配置好访问地址和权限,直接运行 ?  ...3.文件上传 (这一点简单带过,可以到网上下载上传代码植入到自己系统) 或者下载第32节源码 或者下载本节示例代码都可以 我这里使用普通form上传功能 添加导入前端代码 <div id="uploadExcel

    1.6K90

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出

    这个比现流行NPOI与EPPlus更加优秀组件,以Open XML SDK为基础,所以只支持xlsx,不支持xls格式(现阶段谁没有个office2007以上版本) 他导出Excel根据官方描述,...兼容性远超同行对手 如果你不是使用本架构只看2,3,4点,使用BLL层代码,这同样适用你MVC程序 知识点: LinqToExcel组件读取Excel文件 ClosedXML组件输出Excel 准备...: 一张演示数据库表 安装LinqToExcel NuGet包 文件上传样例 CloseXML导出Excel 开始: 1.数据表 CREATE TABLE [dbo]....按照之前做法,更新到EF。利用T4生成DAL,BLL,MODEL。再用代码生成生成界面复制进解决方案,一步到位 配置好访问地址和权限,直接运行 ?  ...3.文件上传 (这一点简单带过,可以到网上下载上传代码植入到自己系统) 或者下载第32节源码 或者下载本节示例代码都可以 我这里使用普通form上传功能 添加导入前端代码 <div id="uploadExcel

    1.7K70
    领券