Открыть книгу в Interop.Excel из байтового массива - PullRequest
0 голосов
/ 23 апреля 2019

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

Office имеет «ограниченный доступ», и я хочу открыть свой файл с этой защитой, но без сохранения расшифрованного содержимого в файле.

myApp.Workbooks.Open поддерживает только путь.

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

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

Я думаю, что вам нужно использовать openxml, созданный Microsoft, для работы с Excel Word и Power Point..

DocumentFormat.OpenXml

Тогда вы можете использовать:

ExcelPackage excelPackage = new ExcelPackage(stream)

или

var pck = new OfficeOpenXml.ExcelPackage();
pck.Load(File.OpenRead(path));

pck.Load(Stream) банкаиспользуйте любой поток в качестве входных данных не только из файла.

Зависит от ваших потребностей.

0 голосов
/ 23 апреля 2019

В качестве альтернативы OpenXml есть также ExcelDataReader , который, по моему опыту, намного быстрее обрабатывает данные по сравнению с Interop.Excel (примерно в 3 раза +).

Он также может открывать зашифрованные файлы Excel напрямую ( stackoverflow ) Страница github для ExcelDataReader содержит несколько замечательных примеров того, как ее использовать. Единственное, что вам нужно сделать, это:

Это:

using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))

Получается так:

using (var stream = new MemoryStream(yourByte[])

И если вы просто хотите открыть защищенный паролем файл Excel, вы должны сделать это:

var conf = new ExcelReaderConfiguration { Password = "yourPassword" }; //Add this

excelReader = ExcelReaderFactory.CreateReader(stream, conf); //change the excel Reader to this

Обязательно проверьте страницу Github для получения дополнительной информации!

...