我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll.而客户那边装的是office2003,可想而知,问题出现了,见图
1.那么,有没有什么好的解决方案来解决这个问题啊?
2.再往后延伸,为了防止以后在其它项目中也出现类似问题,就是说不管客户那边装的是什么版本的office,都可以正常运行?
求迷津...C#Excel

解决方案 »

  1.   

    典型的安装文件问题。sharedaddin
    可以换个思路部署(sharedaddin),在03版本的基础上,兼容07+版本,这样做好处多多 目前已经在所有Office版本中测试通过,包括office 2010 64位
      

  2.   

    兄弟你找到你差的这个DLL加进去就可以了!Interop.Excel 这个加进去引用-------添加引用-----.NET 找到这个Micsoft....Interop.Excel  加进去就可以了
      

  3.   

    建议使用 npoihttp://npoi.codeplex.com/
      

  4.   


    ======================================================================================
    我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll
    与客户版本不一样啊
      

  5.   


    ======================================================================================
    我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll
    与客户版本不一样啊说实话,在对比使用微软自带的dll以及NPOI后,除非你需要用到vba或者更细致化,又或者excel 2010版本的要求,否则我直接推荐使用NPOI。
      

  6.   

    除了NOPI之后,在Office2003之后的版本还可以使用Open XML 来进行操作,Open xml也不需要客户端安装Office
      

  7.   

    也可以参考下这个帖子中我的回复:http://social.msdn.microsoft.com/Forums/zh-CN/ecd2f502-cb0b-420e-978a-0362aebab9f2/office2010microsoftwindowsexcelinteropdll140office2007
      

  8.   

    用NOPI 把,你那样速度也慢,也有局限性,必须安装excel的机器上运行,没装的跑回报错。
      

  9.   

    强烈建议别用 Excel com组件。使用 NPOI  或 Myxls
      

  10.   

    @标记1@ 把引用的dll文件复制到Bin文件夹下,然后删除之前的引用,重新添加引用,但是不要直接引用环境中的,要浏览引用bin文件夹下的。
    很多人都说什么用第三方不会出问题而用微软自带的会出问题,原因是:VS开发环境中添加引用如果环境中存在的则复制到本地选项默认是false,如果添加的引用是第3方的复制到本地选项默认是true,当你引用的开发环境中的又没有设置复制到本地时,到了另外一台没有开发环境中引用的dll时就报错了。这就是为什么无数的人在说用第3方的不会报错(而多数人没有思考为什么直接引用微软的会报错)。
    当你不引用环境中的,而用 @标记1@ 时  ,就相当于把这个dll当作了第3方的了。
      

  11.   

    9楼正解,office软件是向后兼容的,所以你安个2003然后引用Microsoft Excel 11.0 Object Library.dll,然后就可以了
      

  12.   

    把文件另存为“文本文件(制表符分隔)(*.txt)”这种格式再导入,支持所有Excel版本
      

  13.   

    /// <summary>
            /// 导入
            /// </summary>
            void ReadXls()
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "Excel文件|*.xls";
                ofd.RestoreDirectory = true;
                ofd.FilterIndex = 1;
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    using (Stream sm = ofd.OpenFile())
                    {
                        byte[] bt = new byte[sm.Length];
                        sm.Read(bt, 0, Convert.ToInt32(sm.Length));
                        string text = Encoding.GetEncoding("gb2312").GetString(bt);
                        string[] line = text.Replace("\r\n", "겕").Split('겕');
                        string[] col = line[0].Replace("\t", "겕").Split('겕');
                        if (col.Length < 14 || col.Length>20)
                        {
                            MessageBox.Show("格式不正确,请按导出的格式,并另存为“文本文件(制表符分隔)(*.txt)”格式的文件!");
                        }
                        else
                        {
                            DataTable dtNew = dtList.Clone();
                            zw = new 展位添加(dtNew.NewRow());
                            for (int i = 1; i < line.Length; i++)
                            {
                                col = (line[i].Replace("\t", "겕") + "겕").Split('겕');
                                if (col.Length >= 14)
                                {
                                    DataRow dr = dtNew.NewRow();
                                    int u = 0;
                                    dr["Num"] = col[u]; u++;
                                    dr["City"] = col[u]; u++;
                                    dr["Area"] = col[u]; u++;
                                    dr["Typehy"] = col[u]; u++;
                                    dr["Co"] = col[u]; u++;
                                    dr["Address"] = col[u]; u++;
                                    dr["LinkMan"] = col[u]; u++;
                                    dr["LinkPhone"] = col[u]; u++;
                                    dr["NumClass"] = col[u]; u++;
                                    DateTime dpTime = new DateTime();
                                    if (DateTime.TryParse(col[u], out dpTime))
                                        dr["PlaceTime"] = dpTime;
                                    u++;
                                    dr["PlaceMan"] = col[u]; u++;
                                    dr["Maintainer"] = col[u]; u++;
                                    dr["Status"] = col[u]; u++;
                                    dr["Note"] = col[u]; u++;
                                    dr["addUser"] = dr["editUser"] = ODB.Utils.AdminName;
                                    dr["editTime"] = DateTime.Now;
                                    zw.getIn(dr);
                                    dtNew.Rows.Add(dr);
                                }
                            }
                            if (zw.SaveTabel(dtNew) > 0)
                            {
                                bindData();
                            }
                        }
                    }
                }
            }
      

  14.   

    我用Microsoft Excel 11.0,可以兼容2003-2010没问题
      

  15.   

    在vs引用中查看文件属性,你会看到你引用的文件的属性是“嵌入的互操作类型”为true的。你可以把它改为false,这样立刻你就可以将“复制本地”属性修改为true了。
      

  16.   

    实际上对于.net4.0,你可能也无需修改此“嵌入的互操作类型”为false,就保持它为true也可以。
      

  17.   


    类型嵌入是一项新的功能,反而让你产生了麻烦。你可以先搞懂什么叫做“嵌入互操作类型”,然后如果需要像以前一样去部署Office组件的话,就将这个属性改为false就行了。并且只要不是嵌入类型的dll,就能随时修改“复制本地”属性为true。
      

  18.   

    我表示用12.0可以完秒excel2003,2007,2010,亲测哦。
    另外你报的这个错感觉不想是office的错误,感觉是framework。