Открытие файлов Excel из Интернета открывает пустое окно Excel

Метод выгрузки GridView в файл Excel для загрузки / открытия из Интернета недавно был поврежден новыми обновлениями Windows.

Мой код дамп из GridView в файл XLS, используя StringWriter, HTMLTextWriter и RenderControl. Общий подход с использованием следующего кода изhttp://www.aspsnippets.com/Articles/Export-GridView-to-Excel-in-ASPNet-with-Formatting-using-C-and-VBNet.aspx

Protected Sub ExportToExcel(sender As Object, e As EventArgs)
    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls")
    Response.Charset = ""
    Response.ContentType = "application/vnd.ms-excel"
    Using sw As New StringWriter()
        Dim hw As New HtmlTextWriter(sw)

        'To Export all pages
        GridView1.AllowPaging = False
        Me.BindGrid()

        GridView1.HeaderRow.BackColor = Color.White
        For Each cell As TableCell In GridView1.HeaderRow.Cells
            cell.BackColor = GridView1.HeaderStyle.BackColor
        Next
        For Each row As GridViewRow In GridView1.Rows
            row.BackColor = Color.White
            For Each cell As TableCell In row.Cells
                If row.RowIndex Mod 2 = 0 Then
                    cell.BackColor = GridView1.AlternatingRowStyle.BackColor
                Else
                    cell.BackColor = GridView1.RowStyle.BackColor
                End If
                cell.CssClass = "textmode"
            Next
        Next

        GridView1.RenderControl(hw)
        'style to format numbers to string
        Dim style As String = "<style> .textmode { } </style>"
        Response.Write(style)
        Response.Output.Write(sw.ToString())
        Response.Flush()
        Response.[End]()
    End Using
End Sub

Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    ' Verifies that the control is rendered
End Sub

Excel (2013) откроется в пустом окне без предупреждения или сообщения о том, почему что-либо было заблокировано, и без возможности принять файл для открытия.

Мой код выполняется на сайте интрасети, и у меня есть доступ к групповым политикам / настройкам / пользовательским конфигурациям в Windows.

Ответы на вопрос(7)

Предложение Раниэль66, если Excel открыается пустым даже после добаления сайта ашДоеренные сайты список, ы можете попробоать / предложить ниже обойти.

Откройте книгу Excel, даже если она неактина / пуста, затем нажмите ‘Посмотреть’Вкладку Excel, а затем нажмите« значок полного экрана / разернуть экран », как показано на снимке экрана ниже. Это то, что сработало для меня.

Решение Вопроса

Решение 1

1) Откройте Excel. Выберите «Параметры файла».

2) Нажмите Центр управления безопасностью -> Настройки центра управления безопасностью.

3) Перейдите в защищенный вид. Есть 3 варианта, которые показывают, что все были нажаты. Снимите флажок с первой опции, которая гласит: «Включить защищенный просмотр для файлов, исходящих из Интернета». В некоторых случаях, как указано в комментариях ниже, необходимо отключить как первый, так и второй варианты (спасибо @mosheb)

Решение 2

Удалите эти обновления Windows:

Центр обновления Windows KB3115262 (Excel 2013)Центр обновления Windows KB3115130 (Excel 2010)
 Paul27 июл. 2016 г., 09:48
Это может быть применено только пользователем на другом конце канала, и не каждый захочет принять такой подход. Для меня это единственный обходной путь, а не решение.
 mosheb01 авг. 2016 г., 16:19
Нам пришлось снять первый и второй, чтобы это работало в нашей интрасети
 Taylor Brown27 июл. 2016 г., 21:52
@Paul Честно говоря, единственное верное решение, которое я нашел, - не использовать этот блок кода больше. Если кто-то может изменить этот код и заставить его работать, я приму этот ответ.
 Denver04 окт. 2016 г., 18:06
Спасибо тебе за это. для остальных это сэкономит их время.
 Taylor Brown27 июл. 2016 г., 21:59
@paul Я отправил это как стиль Q / A, чтобы ответить на мой собственный вопрос, чтобы поделиться своими знаниями. Я отредактировал вопрос, пытаясь лучше описать мою ситуацию и типы доступа к моим пользователям и к коду в среде интрасети, в которой он работает. Это послужило для меня решением, учитывая мою ситуацию.

к сожалению, не было вариантом, но оказывается, что если вы экспортируете в CSV вместо XLS, то файл откроется в Excel, игнорируя данные центра доверия.

Мы находимся в Классическом ASP, поэтому мы изменили страницу с экспорта формата таблицы HTML в CSV и изменили наш заголовок и тип содержимого следующим образом:

Response.AddHeader "content-disposition", "attachment; filename=search_results.csv"
Response.ContentType = "text/csv"

и сделал разрывы строк с:Response.Write (chr(10))

 Taylor Brown01 авг. 2016 г., 20:11
@clamum Я думаю, что вы правы, просто изменение типа контента не является решением. Я думаю, что в этом ответе не хватает изменений кода. Поправь меня, если я ошибаюсь.
 Taylor Brown21 июл. 2016 г., 22:36
Код в вопросе действительно применяет некоторое форматирование (настройка backcolor), но для ваших требований и, возможно, для многих других, это также отличное решение. Я уверен, что у меня есть несколько мест, где я могу применить это (компании за пределами нашей интрасети, где мы не можем просто удалить обновления Windows и т. Д.) Спасибо!
 clamum02 авг. 2016 г., 17:32
@taybriz Это был мой вывод после выполнения моего маленького теста copy-paste-rename прежде. Может быть, ОП может надеяться обновить нас. Я дал своему менеджеру несколько вариантов обновления нашего веб-сайта, чтобы исправить эту проблему, и посоветовал ему переписать экспорт в Excel с использованием библиотеки с открытым исходным кодом EPPlus. По моим оценкам, это займет несколько дней, но я думаю, это все исправит.
 clamum29 июл. 2016 г., 22:20
Как вы изменили свою страницу для вывода на .csv? В качестве теста я взял .xls, который был выведен моим веб-сайтом, скопировал его и переименовал расширение в «.csv». При его открытии были показаны все теги HTML, и это выглядело грязно. Я смотрю на возможное использование этого формата .csv в качестве решения этой проблемы с пустым окном Excel при открытии документа во время экспорта в Internet Explorer, но я не уверен, как изменить существующий экспорт Excel в .csv и не иметь его выглядеть ужасно

сти Excel, и не у всех моих пользователей по всему миру есть разрешения на разблокировку. Это влияет на 2010 и 2013 годы .xls. Я думал, что это для решения типа контента. Вы пытались переключить тип контента с application / vnd.ms-excel на application / vnd.openxmlformats-officedocument.spreadsheetml.sheet и использовать вместо этого xlsx?

 Mohammed Dawood Ansari25 авг. 2016 г., 11:43
Я попробовал это, и я получаю «Невозможно прочитать файл». из Excel и тот же бланк Excel приходит.
 Taylor Brown07 нояб. 2016 г., 20:35
на самом деле это не столько ответ, сколько предложение, и кажется, что кто-то попробовал это предложение и сказал, что оно не работает.

Заменить «вложение» из

Response.AddHeader("content-disposition","attachment;filename=GridViewExport.xls")

с "встроенным"

Response.AddHeader("content-disposition","inline;filename=GridViewExport.xls")

Это может помочь!

Контент-расположение. В чем разница между «встроенным» и «вложением»?

 Mohammed Dawood Ansari24 авг. 2016 г., 12:55
ты спас мой день, приятель :)

Решение 3

ажмите «Применить»
 Paul27 июл. 2016 г., 09:47
Как и в случае принятого решения, оно может быть применено только пользователем в конце запроса. Я не вижу в этом решения.

Добавьте сайт, генерирующий .xls, в свой список доверенных сайтов. Мне пришлось добавить около десятка сайтов через GPO, потому что наш ИТ-директор отказывается откатывать КБ ... = (

 Raniel6601 авг. 2016 г., 02:13
Конечным пользователем ничего не внедряется, он устанавливается для всего домена через групповую политику
 Paul01 авг. 2016 г., 10:39
Извините - да, вы правы. Комментарий удален.

Ваш ответ на вопрос