Мы пытаемся использовать MS Interop Excel на Windows Server и использовать его через WCF (я не могу объяснить это более подробно, потому что я действительно не понимаю его полностью, извините). ,Microsoft Encop Excel SaveCopyAs с версией xlsx
Мы используем метод SaveCopyAs
для сохранения сгенерированных файлов excel в каталоге temp, затем читаем его в байтовый массив и отправляем его как ответ.
Однако в клиентском приложении после сохранения его в файл с расширением xlsx
и попробуйте открыть его. Excel дает нам предупреждение о том, что файл поврежден, но после того, как мы вручную изменили имя файла на xls
, он работает отлично.
После краткого исследования кажется, что офис просто сохраняет его как своего рода более старую версию файла (?). Таким образом, одним из решений является использование метода SaveAs
с действительными параметрами, но это вызывает у нас массу проблем, поэтому мы предпочитаем придерживаться SaveCopyAs
.
Есть ли какие-либо решения для сохранения такого файла в более новом формате без метода SaveAs
?
(И вы, наверное, уже поняли это сейчас, это System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC
исключение.)
Я вижу три возможности: 1. Создайте исходный файл Excel в новом формате. 2. Попросите клиента сохранить файл с расширением xls. 3. Используйте SaveAs() и устраните проблемы, которые у вас есть. – NineBerry
Ошибка выполнения 1004 имеет много причин, близкое совпадение - http://stackoverflow.com/questions/9751622/run-time-error-1004-for-saving-excel-file-vba-required –
Более новые версии Office/Excel требуется, чтобы формат файла соответствовал расширению файла. Это мера безопасности. Поэтому, если вы добавите расширение xlsx в файл в старом формате (xls), вы получите предупреждение - это по дизайну. Другой вариант - не автоматизировать приложение Excel в серверной среде (которая в любом случае не поддерживается) и работать напрямую с форматом файлов Office Open XML. –