首页
学习
活动
专区
工具
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.8K20

    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。你可以从GitHub的EPPlus页面下载最新的版本。...在Unity中创建一个C#脚本,用于处理Excel文件的读取和写入操作。在脚本中引入EPPlus的命名空间。...使用EPPlus时,请确保目标Excel文件的格式正确,并且库版本与Unity兼容。以上是使用EPPlus库在Unity中读取和写入Excel文件的基本方法。...读取XML文件中的数据可以使用XmlDocument对象的方法来打开XML文件,并读取其中的数据。

    1.3K82

    手把手教你使用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.7K50

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

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

    4.2K10

    最好的.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 导出表格详解(

    12510

    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.8K70
    领券