Как защитить паролем Excel, созданный из байта []? - PullRequest
0 голосов
/ 08 марта 2019

У меня есть данные, которые должны быть загружены в файл Excel в байтовом массиве, и мне нужно применить защиту паролем к этому. Я попытался преобразовать byte [] в datatable / list и попытался применить защиту паролем с помощью Excelpackage, но я не могу правильно преобразовать данные в массиве byte [] в любую форму. Мой файл загружается, но с некоторыми изношенными данными. Может ли кто-нибудь поделиться своими знаниями?

            response.Clear();
            response.Buffer = true;
            response.ContentEncoding = System.Text.Encoding.UTF8;
            response.ContentType = mimeType; 
            response.AddHeader("content-disposition", "attachment;filename=" 
            + Uri.EscapeDataString(fileName));
            response.Charset = "";
            response.Cache.SetCacheability(HttpCacheability.NoCache);
            DataTable dt;
            MemoryStream stream;
            using (stream = new MemoryStream(fileBytes))
            {

               BinaryFormatter bin = new BinaryFormatter();
               stream.Seek(0, SeekOrigin.Begin);
               dt = (DataTable)formatter.Deserialize(stream);
               stream.Close();
            }
            using (ExcelPackage pack = new ExcelPackage())
            {

                ExcelWorksheet ws = pack.Workbook.Worksheets.Add("heelo");
                ws.Cells["A1"].LoadFromDataTable(dt, true);
                pack.Save("123");
                var ms = new System.IO.MemoryStream();
                pack.SaveAs(ms);
                ms.WriteTo(HttpContext.Current.Response.OutputStream);
                ms.Close();

            }
            response.Flush();
            response.End();

1 Ответ

0 голосов
/ 09 марта 2019

Возникла небольшая проблема с отслеживанием вашего кода. Почему response MIME-тип PDF? Я думаю, вы бы хотели, чтобы это было

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Имеет ли response какое-либо отношение к MemoryStream с, так как я не вижу ссылок от одного к другому?

В любом случае, если у вас есть ExcelPackage в наличии и вы хотите записать Stream с паролем, вы можете просто вызвать перегрузку:

pack.SaveAs(ms, "MyPassword")

Вот еще немного информации: Защищенный паролем Excel Загрузить с помощью EPPLUS

...