如何在Excel文件下载之前使用Open XML压缩

本文关键字:Open XML 压缩 Excel 文件下载 | 更新日期: 2023-09-27 18:08:38

我使用下面的代码来创建,它将显示用户提示用户是否可以保存或打开或取消excel文件.....

我能够成功地下载文件,但我需要在它显示用户提示之前进行压缩,稍后zip文件将显示给用户,如选项打开或保存或取消.....

我怎么能做到不使用任何其他第三方库和使用微软自己的Gzip DLL?

下面的代码是用于导出到excel的功能:

public ActionResult ExportToExcel()
{
    byte[] file;
    string targetFilename = string.Format("{0}-{1}.xlsx", "Generated", "excel");
    DataTable dt = common.CreateExcelFile.ListToDataTable(GetSearchDraftPRResults());
    common.CreateExcelFile excelFileForExport = new CreateExcelFile();
    file = excelFileForExport.CreateExcelDocumentAsStream(dt, targetFilename);
    Response.Buffer = true;
    return File(file, "application/vnd.ms-excel", targetFilename);          
}

有没有人请帮助这如何压缩文件之前显示给用户?

Many thanks advance.....

修改代码:

    public ActionResult ExportToExcel()
    {
        byte[] file;
        string targetFilename = string.Format("{0}-{1}.xlsx", "Generated", "excel");
        DataTable dt = common.CreateExcelFile.ListToDataTable(GetSearchDraftPRResults());
        common.CreateExcelFile excelFileForExport = new CreateExcelFile();
        file = excelFileForExport.CreateExcelDocumentAsStream(dt, targetFilename);
        Response.Buffer = true;
        byte[] zipFile = Compress(file);
        return File(file, "application/vnd.ms-excel", targetFilename);          
    }

    public byte[] Compress(FileInfo fileToCompress)
    {
        using (FileStream originalFileStream = fileToCompress.OpenRead())
        {
            if ((System.IO.File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
            {
                using (FileStream compressedFileStream = System.IO.File.Create(fileToCompress.FullName + ".gz"))
                {
                    using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
                    {
                        originalFileStream.CopyTo(compressionStream);
                    }
                }
            }
            MemoryStream mem = new MemoryStream();
            CopyStream(originalFileStream, mem);
            return mem.ToArray();
        }
    }

    public static void CopyStream(Stream input, Stream output)
    {
        byte[] b = new byte[32768];
        int r;
        while ((r = input.Read(b, 0, b.Length)) > 0)
            output.Write(b, 0, r);
    }

如何在Excel文件下载之前使用Open XML压缩

查看SharpZipLib库。它工作得非常好,即使在商业应用程序中也可以免费使用。

您可以使用JCraft中的JZlib。非常容易使用,压缩声明可以是这样的,里面的代码取决于你在做什么但是你可以在JZlib示例中找到工作的例子:

public byte[] compress(byte[] buf, int start, int[] len) {
...
}