不确定,但可以尝试为 Excel 创建自定义渲染扩展。更改文章中的 Render 方法,因为它是由这条评论提出的,唯一的区别是 - 使用 excel 格式:
public bool Render(Report report,
NameValueCollection reportServerParameters,
NameValueCollection deviceInfo, NameValueCollection clientCapabilities,
EvaluateHeaderFooterExpressions evaluateHeaderFooterExpressions,
CreateAndRegisterStream createAndRegisterStream)
{
string strUri = string.Empty;
strUri +=
"http://localhost/Reports/Reserved.ReportViewerWebControl.axd";
strUri += "?ReportSession=" + reportServerParameters["SessionID"];
// Here you can check the name of report provided to viewer for export.
// If it's incorrect, you may extend method to set the right name.
strUri += "&FileName=" + report.Name;
strUri += "&ControlId=" + Guid.Empty;
strUri += "&Culture=" +
CultureInfo.CurrentCulture.LCID.ToString(
CultureInfo.InvariantCulture);
strUri += "&UICulture=" +
CultureInfo.CurrentUICulture.LCID.ToString(
CultureInfo.InvariantCulture);
strUri += "&ReportStack=1";
strUri += "&OpType=Export";
strUri += "&ContentDisposition=OnlyHtmlInline";
strUri += "&Format=MHTML";
Stream outputStream = null;
StreamWriter streamWriter = null;
try
{
//Output to Excel
outputStream = createAndRegisterStream(report.Name, "xls",
System.Text.Encoding.UTF8,
"application/vnd.ms-excel", true, StreamOper.CreateAndRegister);
streamWriter = new StreamWriter(outputStream);
//Input
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUri);
//Credentials
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
//Output
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Input
Stream inputStream = response.GetResponseStream();
StreamReader streamReader =
new StreamReader(response.GetResponseStream());
//Read/Write
streamWriter.Write(streamReader.ReadToEnd());
}
finally
{
if (streamWriter != null)
{
streamWriter.Flush();
}
}
return false;
}
您可以将此渲染器添加为新的自定义扩展(然后您必须更改订阅格式)或替换现有的 excel 扩展 - 请参阅在配置文件中指定渲染扩展参数