Я нашел этот вопрос несколько раз, но окончательных ответов пока нет.Похоже, что приличное решение может помочь довольно многим людям.
Итак, мы создаем файл Excel (.xlsx) на сервере и загружаем его клиенту, используя «вложение» для размещения контента.Откроется диалоговое окно «Открыть», и все работает нормально, если вы выберете «Сохранить» или «Открыть», а затем «Сохранить как» ... Однако, если вы выберете «Открыть», а затем нажмите кнопку «Сохранить», Excel на мгновение зависнет, а затем отобразит сообщение:изменения не могут быть сохранены в 'Export [5] .xlsx' из-за нарушения общего доступа.Попробуйте сохранить в другой файл.затем: файл, который вы пытаетесь открыть 'F8CAC020.IE5 \ HM2NBE5C \ F8CAC020', находится в другом формате, чем указано в расширении файла.Перед открытием файла убедитесь, что файл не поврежден и поступил из надежного источника.Вы хотите открыть файл сейчас?затем: вы наконец получаете диалоговое окно Сохранить как: (при условии, что вы нажали 'Да').
Код для создания файла:
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AppendHeader("content-disposition", "attachment;filename=Export.xlsx")
Response.AddHeader("Content-Length", New System.IO.FileInfo(NewFile).Length)
Response.TransmitFile(NewFile)
Response.Flush()
Если вы удалите заголовок размещения содержимого, выполучить правильное поведение в Excel, но с неправильным именем и без гарантии того, что документ Excel не будет отображаться в браузере (в зависимости от настроек клиента).Если вы нажмете «Открыть», а затем «Сохранить», вы получите сообщение: «default.aspx» только для чтения.Чтобы сохранить копию, нажмите кнопку «ОК», затем присвойте книге новое имя в диалоговом окне «Сохранить как».
Поэтому вопрос заключается в том, как объединить два поведения в разумное: получите красивое сообщение об ошибке, приведенное выше., когда вы пытаетесь открыть и затем сохранить загруженный файл, но также указать, что документ должен быть загружен с заданным по умолчанию именем файла.
Cheers,
Джеймс