2016-07-19 3 views
6

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

Мой код выгружается из 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.

ответ

8

Решение 1

1) Откройте Excel Выберите Файл Параметры

2) Щелкните Центр -> Trust Center Settings

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

Решение 2

об удалении этих обновлений Windows:

  • обновления Windows KB3115262 (Excel 2013)
  • Обновление KB3115130 для Windows (Excel 2010)
+1

Это может быть применен только пользователем на другом конце трубы, и не все будут готовы принять этот подход. Для меня это одно решение, а не решение. – Paul

+0

@Paul Честно говоря, единственное истинное решение, которое я нашел, - это не использовать этот блок кода больше. Если кто-то может изменить этот код и заставить его работать, я приму этот ответ. –

+0

@paul Я представил это как стиль Q/A, чтобы ответить на мой собственный вопрос, чтобы поделиться своими знаниями. Я отредактировал этот вопрос, пытаясь лучше описать, какова моя ситуация и какие типы доступа у меня есть над моими пользователями и код в среде интрасети, в которой это работает. Это послужило для меня решением, учитывая мою ситуацию. –

3

Solution 3

  • Перейти в свойства файла (R клик - свойства)
  • Нажмите кнопку 'Разблокировать'
  • Нажмите кнопку 'Применить'
+0

Как и в случае с принятым решением, это может быть применено пользователем только на конце запроса. На самом деле я не рассматриваю это как решение. – Paul

3

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

Мы в классический ASP, поэтому мы изменяем страницу экспортировать формат HTML таблицы в CSV и изменили наш заголовок и CONTENTTYPE к этому:

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

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

+1

Код в вопросе применим некоторое форматирование (установка backcolor), но для ваших требований и, возможно, многих других, это отличное решение. Я уверен, что у меня есть несколько мест, где я могу применить это (компании за пределами нашей интрасети, где мы не можем просто удалить обновления окон и т. Д.) Спасибо! –

+1

Как вы изменили свою страницу на вывод в .csv? В качестве теста я взял .xls, который был выведен на моем веб-сайте, скопировал его и переименовал расширение в .csv. Открытие его показало все теги HTML, и это было грязно. Я смотрю, возможно, используя этот формат .csv в качестве решения этой пустой проблемы окна Excel при открытии документа во время экспорта в Internet Explorer, но я не уверен, как изменить существующий экспорт Excel в CSV, а не это выглядит ужасно. – clamum

+0

@clamum Я думаю, что вы правы, просто изменение вывода типа контента не служит решением. Я думаю, что в этом ответе отсутствует недостаток кода. Поправьте меня, если я ошибаюсь. –

1

Просто подумал, что я упомянул, что есть третье решение:

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

+1

Ничего не реализует конечный пользователь, устанавливается в домене через групповую политику – Raniel66

+0

Извините - да, вы правы. Комментарий удален. – Paul

-1

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

+0

Я попробовал, и я получаю «Невозможно прочитать файл». от excel и того же чистого превосходства. –

+0

На самом деле это не так, как предложение, и кажется, что кто-то пробовал это предложение и говорит, что он не работает. –

2

Попробуйте сделать следующее:

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

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

с "инлайн"

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

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

Content-Disposition:What are the differences between "inline" and "attachment"?

+0

ты спас мой день приятель :) –

 Смежные вопросы

  • Нет связанных вопросов^_^