用automation做报表操作权限

当我们导出的Excel文件要求严格的格式时,就需要把Excle做成模板,在导出时首先复制原来做好的模板,然后在模板上操作Excel就会保留原来的格式,但是在C#操作文件时会遇到一些权限上的问题,我们这里以操作Excel为例说明一下:

首先配置DCOM:解决操作权限问题,具体步骤如下:

1:在服务器上安装office的Excel软件.

2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

5:点击"标识"标签,选择"交互式用户"

6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

注:在XP系统中还要添"加机器名/ASPNET"用户的上述权限。

其次要解决部署在Window Server 2003 上Excel.exe进程问题

在操作完Excel以后,每次就会留下一个Execl.exe进程,无论如何也关闭不了,包括用垃圾回收等,原因我也不知道,但是在其他服务器操作系统和xp操作系统上不存在这种问题。

解决此类问题,有一个方法可以借鉴,就是杀死进程的方法,但是有一定的风险,要注意,具体方法如下:

操作进程有一定的风险,所有首先要有此类权限,添加权限方法,在web.Config里面添加权限<identity  impersonate="true"   userName="登录名"   password="密码 "/>

杀死进程方法

public static void KillProcess(string processName)

        {

            System.Diagnostics.Process myproc = new System.Diagnostics.Process();

            //得到所有打开的进程

            try

            {
               foreach (Process thisproc in Process.GetProcessesByName(processName))

                {
                    if (!thisproc.CloseMainWindow())

                    {

                        if(thisproc!=null)

                        thisproc.Kill();

                    }               


                }

           }
            catch (Exception Exc)

            {
                throw Exc;
            }

        }  

在操作完Excel后,调用杀死进程方法就可以了,下一次就会正常调用。

原文地址:https://www.cnblogs.com/arraylist/p/1501320.html