none
将GridView中的数据添加到Excel,调试成功,但网页运行失败 RRS feed

  • 问题

  •     下列代码是将GridView中的数据直接添加到Excel中的代码,我添加了对Office的一些引用,在VS2008调试的情况下可以运行,直接用网页访问时,就会出现如图1所示错误!
        按照错误提示,我尝试给Excel添加了ASPNET用户,图2,错误依旧,不知道是我添加用户方式错误还是别的地方错了!请大家帮忙看下,谢谢!

    protected void Button_SQLToExcel_Click(object sender, EventArgs e)
        {
            if (GridView_Search.Rows.Count == 0)
                return;
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Application.Workbooks.Add(true);
            excel.Visible = true;
            for (int i = 0; i < GridView_Search.Columns.Count; i++)
            {
                excel.Cells[1, i + 1] = GridView_Search.Columns[i].HeaderText;
            }
            for (int i = 0; i < GridView_Search.Rows.Count; i++)
            {
                for (int j = 0; j < GridView_Search.Columns.Count; j++)
                {
                    excel.Cells[i + 2, j + 1] = GridView_Search.Rows[i].Cells[j].Text;
                }
            }
        }

    ----------------------------图1----------------------------

    ---------------------------图2(添加aspnet的过程图)---------------------------

    # 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!


    2012年7月19日 3:52

答案

  • Aspose是一款收费的控件具体使用方法可以看www.aspose.com

    上面的错误可以通过下面的步骤解决

    1:在服务器上安装office的Excel软件.
    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"  
    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
    4:在"DCOM配置"中找到"Microsoft  Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel
    应用程序属性"对话框  
    5:点击"标识"标签,选择"交互式用户"  
    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK  SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.  
    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK  SERVICE"用户,然后赋予"本地访问"权限.  
    8.如果交互式用户设置后出现错误8000401a,可取消交互式用户,指定为administratr,可暂时解决此问题。进一步的解决方式还有待探讨。  
    9.采用第8点的设置后,打开Excel可能会出现“无法使用对象引用或链接”,并且不能进行单元格粘贴。原因不明,取消设置后即可消失。  

    另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的操作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 5.0的话,要加的是asp.net用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。

    以上为基本出路方法,但是我也遇到过应用以上方法还是报错的情况,我的环境是windows2003 +
    office2003+office2007,在测试服务器上都可以导出无任何问题!但是更新了正式环境就是报错,权限都设置了还是报错,因为我的测试服务器是默认office启动的,所以我怀疑是office版本环境问题!于是我卸载了office2007,马上测试ok了,但是重启服务器后就产生了have not been Pre-compiled错误,导出页面都无法打开了,于是我又重新安装了office2007,页面可以打开了,但是导出excel时又开始报错!我又把所有的权限重新设置一遍,问题依旧!后来发现两个服务器默认打开excel的程序不一样,测试环境是默认office2003打开,正式环境是office2007打开,于是我在正式环境重新注册office2003,使其同样也是默认office2003打开程序,问题终于解决了!!!

    注册方法 执行    开始----运行----输入excel2003的安装路径,例如 "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver   
    注意/符号前面有一个空格,其中"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!运行后,会启动Office 2003的安装程序,进行修复,重新注册。excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:\Program
    Files\Microsoft Office\Office12\excel.exe" /regserver
              
    综上所述,再遇到Excel导出、导入问题时,先考虑权限问题,再考虑office的版本环境!如此基本能够解决这些问题了

    2012年7月21日 7:16
    版主

全部回复

  • 你是不是服务器上面没安装excel  你用的那个是需要服务器安装excel的

    建议用Aspose.Cells 可以不安装excel导出  也可以按模板导出!

    2012年7月19日 10:09
    版主
  •     谢谢您的答复,我就是在本机上测试的!

    首先,我在本机的VS2008上调试,没有任何问题!然后我在本机上用网页打开,就出现了如上图的错误!

        目前我还只知道上面代码写的导出到Excel的方法,其他方法还不会!能否具体给个例子让我学习呢?


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!


    2012年7月19日 13:41
  • Aspose是一款收费的控件具体使用方法可以看www.aspose.com

    上面的错误可以通过下面的步骤解决

    1:在服务器上安装office的Excel软件.
    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"  
    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
    4:在"DCOM配置"中找到"Microsoft  Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel
    应用程序属性"对话框  
    5:点击"标识"标签,选择"交互式用户"  
    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK  SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.  
    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK  SERVICE"用户,然后赋予"本地访问"权限.  
    8.如果交互式用户设置后出现错误8000401a,可取消交互式用户,指定为administratr,可暂时解决此问题。进一步的解决方式还有待探讨。  
    9.采用第8点的设置后,打开Excel可能会出现“无法使用对象引用或链接”,并且不能进行单元格粘贴。原因不明,取消设置后即可消失。  

    另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的操作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 5.0的话,要加的是asp.net用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。

    以上为基本出路方法,但是我也遇到过应用以上方法还是报错的情况,我的环境是windows2003 +
    office2003+office2007,在测试服务器上都可以导出无任何问题!但是更新了正式环境就是报错,权限都设置了还是报错,因为我的测试服务器是默认office启动的,所以我怀疑是office版本环境问题!于是我卸载了office2007,马上测试ok了,但是重启服务器后就产生了have not been Pre-compiled错误,导出页面都无法打开了,于是我又重新安装了office2007,页面可以打开了,但是导出excel时又开始报错!我又把所有的权限重新设置一遍,问题依旧!后来发现两个服务器默认打开excel的程序不一样,测试环境是默认office2003打开,正式环境是office2007打开,于是我在正式环境重新注册office2003,使其同样也是默认office2003打开程序,问题终于解决了!!!

    注册方法 执行    开始----运行----输入excel2003的安装路径,例如 "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver   
    注意/符号前面有一个空格,其中"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!运行后,会启动Office 2003的安装程序,进行修复,重新注册。excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:\Program
    Files\Microsoft Office\Office12\excel.exe" /regserver
              
    综上所述,再遇到Excel导出、导入问题时,先考虑权限问题,再考虑office的版本环境!如此基本能够解决这些问题了

    2012年7月21日 7:16
    版主
  • 我刚刚写的一篇导出Word的..如果你有用到导出Word的话..你可以参考下

    Asp.net开发经验-利用Aspose.Words按模板导出Word

    2012年7月21日 11:07
    版主