Создание и сжатие файла Excel на лету

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

Я использую sharpZip .Net Library для архивирования файла Excel, и приглашение пользователя не отображается, когда вы нажимаете ссылку на Export to excel.

Код ниже. В этом методе я получаю сообщение SingleGZip(file);, в котором говорится, что у метода есть недопустимые аргументы.

    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;

       SingleGZip(file);
        //Stream memStream = new MemoryStream(file);

        //using (ZipFile zipFile = new ZipFile())
        //{
        //    zipFile.AddEntry("Generated-Excel.xlsx", "", memStream);
        //    Response.ClearContent();
        //    Response.ClearHeaders();
        //    Response.AppendHeader("content-disposition", "attachment; filename=Report.zip");

        //    zipFile.Save(Response.OutputStream);
        //}
        //return 

        //byte[] zipFile = Compress(file);
        return File(file, "application/vnd.ms-excel", targetFilename);          
    }

    private byte[] SingleGZip(string source)
    {
        string target = source + ".gz";

        using (Stream s = new GZipOutputStream(System.IO.File.Create(target)))
        {
            using (FileStream fs = System.IO.File.OpenRead(source))
            {
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, (int)fs.Length);
                s.Write(buffer, 0, buffer.Length);
            }

        }

    }

person Enigma State    schedule 13.06.2014    source источник
comment
Итак, file — это byte[], а ваш метод SingleGZip принимает string. Это именно то, что говорит вам компилятор. Что непонятно?   -  person Daniel Kelley    schedule 13.06.2014


Ответы (1)


private byte[] SingleGZip(string source) <-- give me a string

Ожидаемая строка в качестве параметра, и вы в своем контроллере передаете массив битов методу SigleZip.

byte[] file; <-- array of bytes
        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;

       SingleGZip(file); <-- array of bytes
person sylwester    schedule 13.06.2014
comment
привет, это правильный способ архивирования файлов excel с использованием библиотеки shapzip, и мне также нужно показать приглашение пользователя .... - person Enigma State; 13.06.2014
comment
Я думаю, вы должны создать zip-файл на своем сервере, используя SharpZip, и вернуться к пользовательскому файлу или просто «путь» для просмотра, а в представлении создать ссылку для загрузки, используя «путь». - person sylwester; 13.06.2014