我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll.而客户那边装的是office2003,可想而知,问题出现了,见图
1.那么,有没有什么好的解决方案来解决这个问题啊?
2.再往后延伸,为了防止以后在其它项目中也出现类似问题,就是说不管客户那边装的是什么版本的office,都可以正常运行?
求迷津...C#Excel
1.那么,有没有什么好的解决方案来解决这个问题啊?
2.再往后延伸,为了防止以后在其它项目中也出现类似问题,就是说不管客户那边装的是什么版本的office,都可以正常运行?
求迷津...C#Excel
解决方案 »
- 运算符“==”无法应用于type 和type! 晕了 这是怎么回事呀? 在线等
- 不改变引用,将一个对象的属性设置为另一个对象(两个对象为同一对象)
- C# 如何实时监控网络连接问题
- 请一定要帮帮我看看是怎么回事
- 如何计算两个日期之间间隔月数的算法
- 关于word中的find方法
- 如何激活或者关闭“活动桌面上显示WEB内容”,就是显示HTML文档墙纸? 顶者有分
- 怎么把struct 拷贝到string 中(急)
- 各位大虾!小弟想做一个相册功能,用C#,vs2005,SQLServer开发,急啊!!!!
- 请问做个控件的朋友,如何能象编辑窗口界面一样,编辑控件界面?(高分请教)
- C#WinForm程序如何屏蔽QQ截屏
- 求M选N算法
可以换个思路部署(sharedaddin),在03版本的基础上,兼容07+版本,这样做好处多多 目前已经在所有Office版本中测试通过,包括office 2010 64位
======================================================================================
我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll
与客户版本不一样啊
======================================================================================
我的机器上面装的是Office2010,引用的是Microsoft Excel 14.0 Object Library.dll
与客户版本不一样啊说实话,在对比使用微软自带的dll以及NPOI后,除非你需要用到vba或者更细致化,又或者excel 2010版本的要求,否则我直接推荐使用NPOI。
很多人都说什么用第三方不会出问题而用微软自带的会出问题,原因是:VS开发环境中添加引用如果环境中存在的则复制到本地选项默认是false,如果添加的引用是第3方的复制到本地选项默认是true,当你引用的开发环境中的又没有设置复制到本地时,到了另外一台没有开发环境中引用的dll时就报错了。这就是为什么无数的人在说用第3方的不会报错(而多数人没有思考为什么直接引用微软的会报错)。
当你不引用环境中的,而用 @标记1@ 时 ,就相当于把这个dll当作了第3方的了。
/// 导入
/// </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();
}
}
}
}
}
类型嵌入是一项新的功能,反而让你产生了麻烦。你可以先搞懂什么叫做“嵌入互操作类型”,然后如果需要像以前一样去部署Office组件的话,就将这个属性改为false就行了。并且只要不是嵌入类型的dll,就能随时修改“复制本地”属性为true。
另外你报的这个错感觉不想是office的错误,感觉是framework。