VS2008 C#开发的软件,调用Office读取Excel时发生如下错误:System.Runtime.InteropServices.COMException (0x80040154): 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80040154。软件是WinForm程序,  C# + MySql
开发环境是XP sp1 32位的,Office 2007
运行环境是Win7 64位,运行环境没有安装Office。软件打包的时候已经包含了
Microsoft.Office.Interop.Excel.dll
Microsoft.Vbe.Interop.dll
Interop.Shell32.dll是否是因为运行环境没有安装Office?BTW, 一个问题,.NET开发的程序,引用的外部DLL,如上面的Microsoft.Office.Interop.Excel.dll
等等,在开发时,或者制作安装包时是否可以改名? 这名字实在太长了。
excelwinformwin7.net64位

解决方案 »

  1.   


    应该是没有安装Office的原因
    在网上看到给的解决方法,
    本机的组件服务里,找不到Microsoft Excel Application那么如何不安装Office而能注册Excel组件,可以对Excel操作呢?
    (不想用OLE,因为Excel格式会影响读入的数据)
      

  2.   

    还有一个第三方的库,NPOI,从Java的POI转过来的。
    refer:http://www.cnblogs.com/linzheng/archive/2010/12/20/1912137.html
    http://blog.csdn.net/chinajiyong/article/details/9187485
      

  3.   

    即使装了office, xp系统下开发的winform读取excel的程序,在win7下也可能有问题。所以,尽可能在win7下开发win7下用。即使xp下开发的,也要在win7稍稍修改一下,可能就几行代码的事。
      

  4.   

    #region 操作EXCEL的一个类(需要Excel.dll支持)        private int titleColorindex = 15;
            /// <summary>
            /// 标题背景色
            /// </summary>
            public int TitleColorIndex
            {
                set { titleColorindex = value; }
                get { return titleColorindex; }
            }        private DateTime beforeTime; //Excel启动之前时间
            private DateTime afterTime; //Excel启动之后时间        #region 创建一个Excel示例
            /// <summary>
            /// 创建一个Excel示例
            /// </summary>
            public void CreateExcel()
            {
                Excel.Application excel = new Excel.Application();
                excel.Application.Workbooks.Add(true);
                excel.Cells[1, 1] = "第1行第1列";
                excel.Cells[1, 2] = "第1行第2列";
                excel.Cells[2, 1] = "第2行第1列";
                excel.Cells[2, 2] = "第2行第2列";
                excel.Cells[3, 1] = "第3行第1列";
                excel.Cells[3, 2] = "第3行第2列";            //保存
                excel.ActiveWorkbook.SaveAs("./tt.xls", XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
                //打开显示
                excel.Visible = true;
                // excel.Quit();
                // excel=null;            
                // GC.Collect();//垃圾回收
            }
            #endregion
      

  5.   

    JAVA用POI,NET用NPOI,都很成熟的一直有更新
      

  6.   

    我的也曾出现过此类问题,开发环境是Win7 64位的,Office 2007
    运行环境是XP sp3 32位,运行环境没有安装Office2003,都出问题了,安装了2007问题立刻解除!
      

  7.   

    安装OFFICE试试看可以解决嘛。