在Asp.Net C#

时间:2017-09-20 04:56:44

标签: c# asp.net .net excel iis

我开发了一个asp.net,c#应用程序。在那个应用程序中,我有一个像open excel文件这样的任务,我在开发visual studio时完成了任务,在本地工作正常

但是当我将我的应用程序托管到IIS服务器时,单击“读取”按钮时它没有响应。

我的IIS版本 - 7.5.7600

enter image description here

Asp.Net代码:

<asp:TemplateField HeaderText="Read">
 <ItemTemplate>
   <asp:LinkButton runat="server" ID="lnkKpiName" Text='✉ Read' CommandName="View" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CssClass="label" ForeColor="Green"></asp:LinkButton>
 </ItemTemplate>
</asp:TemplateField> 

C#代码:

if (e.CommandName == "View")
{
   LinkButton lnkBtn = new LinkButton();
   lnkBtn.Attributes.Add("target", "_blank");
   int index = Convert.ToInt32(e.CommandArgument);
   string FileName = ((Label)gvwUserManual.Rows[index].FindControl("lblFileName")).Text;
   ProcessStartInfo sInf = new ProcessStartInfo();
   sInf.FileName = "EXCEL.EXE";
   string XlsPath = Server.MapPath(@"~/SupportDocuments/" + Request.Cookies["BCookies"]["SessionUserName"].Trim().ToString() +"/" + FileName);
   sInf.Arguments = XlsPath;
   Process.Start(sInf);
}

我是否已授予通过IIS打开Excel文件的任何权限?

2 个答案:

答案 0 :(得分:2)

您不希望Excel在您的网络服务器上启动。而是使用Response.WriteFile()例如

将文件发送给用户
if (e.CommandName == "View")
{
    int index = Convert.ToInt32(e.CommandArgument);
    string FileName = ((Label)gvwUserManual.Rows[index].FindControl("lblFileName")).Text;
    string XlsPath = Server.MapPath(@"~/SupportDocuments/" + Request.Cookies["BCookies"]["SessionUserName"].Trim().ToString() +"/" + FileName);

    // send file to user
    Response.Clear();
    Response.AppendHeader("content-disposition", "attachment; filename=" + FileName);
    Response.ContentType = "application/octet-stream";
    Response.WriteFile(XlsPath);
    Response.Flush();
    Response.End();
}

您可以做的其他事情是在下载链接中使用Office URI scheme,如果您确定用户已安装Excel,那么您可以构建如下的超链接:

<a href="ms-excel:ofv|u|https://www.example.com/SupportDocuments/foo.xls">Open XLSX</a>

ms-excel:ofv|u|前缀应由Excel处理(如果已安装)。

下载链接的模板可能如下所示:

<asp:HyperLink runat="server" 
    NavigateUrl='<%# "ms-excel:ofv|u|" + new Uri(Request.Uri, "/SupportDocuments/" + your_filename_variable ).AbsoluteUri %>'
    Text="Read" />  

答案 1 :(得分:1)

我不知道为什么你需要这样做,但无论如何:运行你的web应用程序的iis用户,没有那么多权限来运行excel应用程序,你可以更改你的应用程序池标识(IIS管理器) - &gt; ApplicationPools - &gt;“YourApplicationPool”高级设置 - &gt;标识),从bb