解决方案 »

  1.   

    看不到你怎么使用的Excel,从下面的讨论看,你应该使用了一个excel的GUI,这个Network service账户是没有权限的
    Error with Excel and C# when logged off the server
    http://stackoverflow.com/questions/9075291/error-with-excel-and-c-sharp-when-logged-off-the-server
      

  2.   

    权限问题吧,iis的进程没权限操作excel,把iis的用户加入到管理员组,或者再配置文件中添加个模拟用户
      

  3.   


    谢谢,看了你给的链接,问题描述的和我的是一样的,以下是我实现导出EXCEL的代码,请帮忙看一下,要怎么修改。
    Imports Microsoft.VisualBasic
    Imports System.Data
    Imports Microsoft.Office.Interop.Excel
    Imports excel = Microsoft.Office.Interop.ExcelPublic Class ExportExcel    Private mDs As DataSet = New DataSet()
        Private mFilePath As String = ""    Public Sub New(ByRef ds As DataSet, ByVal FilePath As String)        mDs = ds
            mFilePath = FilePath
        End Sub    Public Function GetFilepath() As String        Return mFilePath    End Function    Public Function DsToSheet(ByRef Msg As String) As Boolean        Dim excel As excel.Application = New excel.Application()
            excel.Visible = False
            Dim ms As Object = Type.Missing
            Dim wk As excel.Workbook = excel.Workbooks.Add(ms)
            Dim ws As excel.Worksheet = DirectCast(wk.Worksheets(1), excel.Worksheet)        Try            For i = 0 To mDs.Tables(0).Columns.Count - 1                ws.Cells(1, i + 1) = mDs.Tables(0).Columns(i).ColumnName            Next            For i = 0 To mDs.Tables(0).Rows.Count - 1                For j = 0 To mDs.Tables(0).Columns.Count - 1                    ws.Cells(i + 2, j + 1) = mDs.Tables(0).Rows(i)(j).ToString()
                    Next
                Next            wk.SaveAs(mFilePath)
                wk.Close()            Return True        Catch ex As Exception            Msg = "导出Excel文件失败," + ex.Message.ToString()            Return False        End Try        excel.Quit()    End FunctionEnd Class
      

  4.   

    GridVidw控件数据导出到Excel进行格式化
    //输出文件格式和文件名
    protected void Button1_Click(object sender, EventArgs e)
        {
            Export("application/ms-excel", "商品信息表.xls");
        }
        private void Export(string FileType, string FileName)
        {
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF7;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
            Response.ContentType = FileType;
            this.EnableViewState = false;
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            GridView1.RenderControl(hw);
            Response.Write(tw.ToString());
            Response.End();
    }
    //字符串处理
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");
            }
        }
      

  5.   

    没有设置权限造成的  
    http://blog.163.com/ysh_good/blog/static/3731475020110135235766/
      

  6.   

    谢谢六楼,感觉和我之前的代码没有太大的区别。很奇怪,同样的代码放在另外一个以datatable作为数据源的页面中,是不会有网页内容的,但是在问题页面中我把Dataset换成datatable,问题还是一样,尝试对Gridview进行字符格式化,还是不能解决Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound        If e.Row.RowType = DataControlRowType.DataRow Then            For i = 0 To e.Row.Cells.Count - 1                e.Row.Cells(i).Attributes.Add("style", "vnd.ms-excel.numberformat:@")            Next
            End If    End Sub以下是绑定GridView代码:Protected Function DataBindGrideView() As DataSet        Dim Conn As SqlConnection = New SqlConnection(Application("ConnStr"))
            Dim FieldsStr As String = "CaseID, CaseName, AppName, PhoneNumber, WorkPlace, ProgressRate, TreatingMethod, TreatEndTime, TreatStarTime, ResponsiblePerson, AppTime, Note, Comment, Assistant"
            Dim Sqlstr As String = "select " + FieldsStr + " from CaseReport "        Select Case DropDownList_Cause.SelectedValue            Case "ResponsiblePerson"
                    Sqlstr = Sqlstr + " where ResponsiblePerson = '" + Txt_Query.Text + "'"            Case "CaseID"                Sqlstr = Sqlstr + " where CaseID = " + Txt_Query.Text
                Case "AppTime"                Dim DateReg As Regex = New Regex("^([1-2]\d{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1]))$|([1-2]\d{3}/(0?[1-9]|1[0-2])/(0?[1-9]|[1-2]\d|3[0-1]))$")                If DateReg.IsMatch(Txt_Query.Text.ToString()) Then                    Sqlstr = Sqlstr + " where DateDiff(dd,AppTime,'" + Txt_Query.Text + "') = 0"                Else                    Response.Write("<script>alert('请输入正确的日期格式,如 2014/06/30 或 2014-06-30 !')</script>")                    Txt_Query.Text = ""                    Return Nothing                    Exit Function                End If
            End Select        Sqlstr = Sqlstr + " Order by CaseID"        Try            Conn.Open()            Dim da As SqlDataAdapter = New SqlDataAdapter(Sqlstr, Conn)
                Dim ds As DataSet = New DataSet()            da.Fill(ds, "CaseReport")            Return ds            Conn.Close()
                Conn.Dispose()        Catch ex As Exception            Response.Write("<script language=JavaScript> alert('数据邦定失败," + ex.Message + "!');</script>")            Return Nothing
            End Try    End Function
      

  7.   


    谢谢。在没有配置DCOM组件的时候,确实是因为权限的问题,但是后来我给NetwrokService开通启动和访问权限后,就不再报这个错误了,但是现在问题是有用户登录的时候不报错,一旦用户注销后,就开始报错,可能还真是是如3楼所说,需要启用GUI。