У меня есть 2 блока кода, если кто-то может помочь мне собрать их вместе, я получу функциональность, которую я ищу. Первый блок кода загружает gridview для Excel с помощью диалогового окна загрузки, которое я ищу:
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
' Verifies that the control is rendered
End Sub
Private Sub ExportToExcel(ByVal filename As String, ByVal gv As GridView, ByVal numOfCol As Integer)
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", filename))
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Dim sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
gv.AllowPaging = False
gv.DataBind()
'Change the Header Row back to white color
gv.HeaderRow.Style.Add("background-color", "#FFFFFF")
For i As Integer = 0 To numOfCol - 1
gv.HeaderRow.Cells(i).Style.Add("background-color", "blue")
gv.HeaderRow.Cells(i).Style.Add("color", "#FFFFFF")
Next
For i As Integer = 0 To gv.Rows.Count - 1
Dim row As GridViewRow = gv.Rows(i)
'Change Color back to white
row.BackColor = System.Drawing.Color.White
For j As Integer = 0 To numOfCol - 1
row.Cells(j).Style.Add("text-align", "center")
Next
'Apply text style to each Row
row.Attributes.Add("class", "textmode")
'Apply style to Individual Cells of Alternating Row
If i Mod 2 <> 0 Then
For j As Integer = 0 To numOfCol - 1
row.Cells(j).Style.Add("background-color", "#CCFFFF")
row.Cells(j).Style.Add("text-align", "center")
'#C2D69B
'row.Cells(j).Style.Add("font-size", "12pt")
Next
End If
Next
gv.RenderControl(hw)
'style to format numbers to string
Dim style As String = "<style> .textmode { mso-number-format:\@; } </style>"
Response.Write(style)
Response.Output.Write(sw.ToString())
Response.Flush()
Response.End()
End Sub
Второй блок кода - это образец отчета, который я хочу загрузить. Поэтому вместо загрузки gridview я хочу, чтобы эта функция принимала объект рабочей таблицы.
Комментарий к предложениям Фрэнка... Фрэнк благодарит за твою помощь, это почти работает для меня. Проблема заключается в сбое кода, если у меня нет фиктивного файла с именем test.xls в корневой папке. И когда я помещаю его туда, он загружает 2 книги test.xls [1] и книгу 2, где test.xls - это пустая книга, а книга 2 - правильный отчет, созданный с помощью динамически созданного. Я не хочу сохранять этот файл в папке eroot, если у меня тоже нет этого, я хочу, чтобы пользователи просто открывали его для своего клиента. Созданный код после использования woorkbook создан... Dim fn As String = "RptCrd_" и "BUNDLE" и ".xls" Dim eio As String = "~/ContentDisposition/" и fn
Dim exData As Byte() = File.ReadAllBytes(Server.MapPath(eio))
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", fn))
Response.ContentType = "application/x-msexcel"
Response.BinaryWrite(exData)
Response.Flush()
Response.End()
releaseObject(xlApp)
releaseObject(xlWorkBook)
Возможно, вам нужно добавить правильный тип контента и заголовок в ответ, чтобы браузер знал, что вы хотите обработать загрузку с помощью Excel. Вероятно, вы положите это после Response.Write(style); звоните.
Попробуйте использовать Google для MIM-типа MS Excel, а также как добавить правильно отформатированный заголовок и тип контента в ответ.
Я просто добавил несколько кодов, чтобы вытащить загрузку в браузер, чтобы он мог обрабатывать ее как электронную таблицу Excel. Это должно дать вам пример форматирования заголовков ответов.
Это просто читается в существующей электронной таблице, а затем передает ее в поток ответов. Это просто демонстрирует, как сформулировать заголовок ответа.
byte[] excelData = File.ReadAllBytes(Server.MapPath("test.xls"));
Response.AddHeader("Content-Disposition", "attachment; filename=test.xls");
Response.ContentType = "application/x-msexcel";
Response.BinaryWrite(excelData);