Как сжать файл Excel перед загрузкой с использованием Open XML?

1

Я использую ниже код для создания, и он будет показывать пользователю запрос пользователю, может ли пользователь сохранить или открыть или отменить файл excel.....

Я успешно загружаю файл, но мне нужно застегнуть молнию, пока не появится приглашение пользователя. Более поздний zip файл будет показан пользователю, например, с открытыми или сохраняющими или отмененными параметрами.....

Как я могу это сделать, не используя какую-либо другую стороннюю библиотеку и используя собственную Gzip- библиотеку Microsoft?

Ниже приведен код для экспорта в 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);          
}

Будет ли кто-нибудь помогать в этом, как застегнуть файл перед тем, как он покажет пользователю?

Спасибо заранее.....

Измененный код:

    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);
    }
  • 0
    Microsoft владеет Gzip.dll ? Какой из них, вы имеете в виду встроенные классы сжатия ?
  • 0
    @PatrickHofman да ты прав ....
Теги:
excel
file
asp.net-mvc

2 ответа

1

Проверьте библиотеку SharpZipLib. Он работает очень хорошо и может использоваться даже в коммерческих приложениях.

  • 0
    ОП попросил встроенную библиотеку Microsoft, а не любую другую.
  • 2
    GZIP - это не библиотека для создания ZIP-файлов. это файл GZIP. Это может вызвать проблемы, особенно если кто-то использует winzip или встроенные инструменты Windows. en.wikipedia.org/wiki/Gzip SharpZip - лучший выбор, поскольку он может создавать ZIP-файлы. В качестве примечания: есть ли преимущество в архивировании файлов Excel? xlsx это почтовый индекс в конце концов.
Показать ещё 9 комментариев
0

Вы можете использовать JZlib от JCraft. Очень проста в использовании, объявление сжатия может выглядеть так: внутри код зависит от того, что вы делаете, но вы можете найти рабочий пример в примерах JZlib:

public byte[] compress(byte[] buf, int start, int[] len) {
...
}
  • 0
    ОП попросил встроенную библиотеку Microsoft, а не любую другую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню