none
有关dcomcnfg配置的问题 RRS feed

  • 问题

  • 各位大虾好,我现在遇到一个非常棘手的问题,在VB里面用到Excel导出功能,大家都是知道这时用到Office中的一些Com组件,这时就需要给.net这个用户配置com组件的一些权限,不然就是无法使用的,我现在遇到的就是这个问题,我的代码如下:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            '在此处放置初始化页的用户代码
            '==========================
            '  变量定义
            '==========================
            Dim rtnString As String = "0"      '没有权限时返回1,导出正常时返回员工号,导出失败返回0
            Dim empId As String
            Dim strsql As String
            Dim datatb As DataTable
            Dim xlApp                          'Excel应用
            Dim ws As Excel.Worksheet          '工作表
            Dim docName As String

            Try
                Try
                    bodnum = MyGlobal.EnCodeStr(Request.Item("xml"), 0)
                Catch ex As Exception
                    bodnum = MyGlobal.EnCodeStr(Request.Item("xml"), 0)
                End Try
                '==============================================
                '  check该用户有没有权限使用导出功能
                '==============================================
                empId = CType(Session("SqlStatement"), SqlStatement).EMP_ID
                strsql = "select count(*) rec_count " _
                      & " from role_function a inner join user_role b on a.role_id = b.roleid " _
                      & " where b.emp_id ='" & empId & "' and a.prog_id = 420 "
                datatb = MyGlobal.gc.getTable(strsql)
                If datatb.Rows(0)("rec_count") = 0 Then
                    rtnString = 1
                    Response.Write(rtnString)
                    Response.End()
                    Exit Sub
                End If

                Try
                    xlApp = GetObject("Excel.Application")    '如果当前系统中有excel在运行,就不必新建
                Catch ex As Exception
                    xlApp = New Excel.Application
                    Err.Clear()
                End Try

                '打开Excel模板
                xlApp.Visible = False          'Excel不可见 
                xlBook = xlApp.Workbooks.Open(Server.MapPath("") + "\..\Template.xls")

                '另存模板文件,确定保存名
                Dim path As String
                Dim FileName As String
                path = Server.MapPath("") + "\..\xls\"

                FileName = RdmFileName(path, empId.Replace(" ", "").Replace(" ", ""))
                docName = path & FileName & ".xls"

                xlBook.SaveAs(docName)      '保存
                 
            ..................................  ’这里是做一些填写数据到Sheet中的操作   

                '=========================
                '  退出Excel操作
                '=========================
                xlBook.Save()
                xlBook.Close()          '关闭
                xlws = Nothing
                xlBook = Nothing        '释放
                xlApp.Visible = True
                'System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)

                xlApp.Quit()            '退出
                xlApp = Nothing
                GC.Collect()
                '==============================================
                '  返回Excel导出是否成功的状态值
                '==============================================
                'rtnString = empId '导出正常
                rtnString = FileName
                Response.Write(rtnString)
                Response.End()
            Catch ex As Exception
                    xlws = Nothing
                    xlBook.Close(SaveChanges:=False)        '不保存退出 
                    xlBook = Nothing            '释放
                    'System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
                    xlApp.Quit()                '退出应用
                    xlApp = Nothing
                    'GC.Collect()
                    rtnString = 0              '导出失败
                    Response.Write(rtnString)
                    Response.End()
                End Try
        End Sub

    我现在是给asp.net这个用户配置了权限,并且也给了它所有的权限,而且我在Web.config中也配置了模拟帐号,但还是在执行:xlApp = New Excel.Application这一句时出错,不过我们访问服务器时是用域帐户访问的,还请各位大虾帮忙指点,在下在此先谢了,谢了谢了!!!!!!
    2009年6月18日 1:56

答案

  • Excel不是为了服务器环境使用的,所以楼主的做法就算成功,那么很多人操作的时候也会对服务器造成一定压力。如果楼主使用的是Office 2003以上版本的文档格式,建议使用Office的XML格式的文档,把Excel文档当作XML文档来操作比较容易,Excel的XML文档格式相对来说,常用功能并不复杂,稍加研究就会明白。楼主可以创建一个Excel文档,然后另存为XML格式,再用编辑器打开一看就明白了。

    理解的越多,需要记忆的就越少
    2009年6月18日 2:20
    版主
  • 你好,

    在Server端使用Office applications是不被支持的,这里有很多问题:

    Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.


    建议你使用其他一些方法在这里,参考下这篇KB去使用其他的方法。
    http://support.microsoft.com/kb/257757
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年6月22日 1:39
    版主

全部回复

  • >我们访问服务器时是用域帐户访问的


    看起来是  com对象使用了域账户实例话   您试验着给域用户组增加相应的权限看看?


    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年6月18日 2:18
    版主
  • Excel不是为了服务器环境使用的,所以楼主的做法就算成功,那么很多人操作的时候也会对服务器造成一定压力。如果楼主使用的是Office 2003以上版本的文档格式,建议使用Office的XML格式的文档,把Excel文档当作XML文档来操作比较容易,Excel的XML文档格式相对来说,常用功能并不复杂,稍加研究就会明白。楼主可以创建一个Excel文档,然后另存为XML格式,再用编辑器打开一看就明白了。

    理解的越多,需要记忆的就越少
    2009年6月18日 2:20
    版主
  • 谢谢二位的回答,现在有个问题就是本来我原来是有一个旧的版本已在服务器上,是可以使用的,但是我在修改了一个地方,这个地方的修改只是涉及到一个数据源的读取,然后再更新上去就不行了,换回旧的版本也还是不行,这种情况是什么原因呢???

    2009年6月18日 2:32
  • 你好,

    在Server端使用Office applications是不被支持的,这里有很多问题:

    Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.


    建议你使用其他一些方法在这里,参考下这篇KB去使用其他的方法。
    http://support.microsoft.com/kb/257757
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2009年6月22日 1:39
    版主
  • 谢谢大虾的建议,学习了

    2009年6月22日 3:41