C# 無法讀取Excel(.xlsx)

nizhijie1984 2015-02-05 03:29:29
無法讀取Excel(.xlsx) 報錯:Microsoft Office Excel 不認識此檔的檔案格式
有引用以下產考
Introp.excel
interop.microsoft.office.core
mircrosoft.office.interop.excel

oExc = new Excel.Application();
//object Missing.Value = Type.Missing;
object MissingValue = System.Reflection.Missing.Value;
oBook = oExc.Workbooks.Open(fileNamePath, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue, MissingValue);
一調試 oExc.Workbooks.Open() 就報錯

跪求高手幫忙
...全文
445 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
衣舞晨风 2015-02-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/jiankunking/article/details/38383817
衣舞晨风 2015-02-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/jiankunking/article/details/38385369
lc_ant 2015-02-10
  • 打赏
  • 举报
回复
DLL 版本引用错误
生财 2015-02-10
  • 打赏
  • 举报
回复
还有一种可能,是你的excel文件不对,因为excel可以是字符串.用excel也能以表格形式打开的. 楼主可以把Excel另存为,然后再用程序读取,试试.保证格式正确
本拉灯 2015-02-06
  • 打赏
  • 举报
回复
引用 8 楼 nizhijie1984 的回复:
[quote=引用 1 楼 wyd1520 的回复:] office装什么版本的?最少2007以上才行
我電腦中裝的是 OFFICE2003 但是引用 MS Interop.excel 的版本是 14.0.0.0 這樣不可以么?[/quote] 不行地。你要引用的版本与安装的OFFICE版本一至才行。
Eiceblue 2015-02-06
  • 打赏
  • 举报
回复
有可能是Excel文件有问题吧,或者版本号不支持。有关读取的方法可以看这里
nizhijie1984 2015-02-06
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
office装什么版本的?最少2007以上才行
我電腦中裝的是 OFFICE2003 但是引用 MS Interop.excel 的版本是 14.0.0.0 這樣不可以么?
oop_2637780136 2015-02-06
  • 打赏
  • 举报
回复
读取Excel到Word文档 private void btn_Read_Click(object sender, EventArgs e) { object missing = System.Reflection.Missing.Value;//获取缺少的object类型值 string[] P_str_Names = txt_Excel.Text.Split(',');//存储所有选择的Excel文件名 object P_obj_Name;//存储遍历到的Excel文件名 Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();//实例化Word对象 if (txt_Word.Text.EndsWith("\\"))//判断路径是否以\结尾 P_obj_WordName = txt_Word.Text + DateTime.Now.ToString("yyyyMMddhhmmss") + ".doc";//记录Word文件路径及名称 else P_obj_WordName = txt_Word.Text + "\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".doc";//记录Word文件路径及名称 Microsoft.Office.Interop.Word.Table table;//声明Word表格对象 Microsoft.Office.Interop.Word.Document document = new Microsoft.Office.Interop.Word.Document();//声明Word文档对象 document = word.Documents.Add(ref missing, ref missing, ref missing, ref missing);//新建Word文档 Microsoft.Office.Interop.Word.Range range ;//声明范围对象 int P_int_Rows = 0, P_int_Columns = 0;//存储工作表中数据的行数和列数 object P_obj_start = 0, P_obj_end = 0;//分别记录创建表格的开始和结束范围 object P_obj_Range = Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd;//定义要合并的范围位置 for (int i = 0; i < P_str_Names.Length - 1; i++)//遍历所有选择的Excel文件名 { P_obj_Name = P_str_Names[i];//记录遍历到的Excel文件名 List<string> P_list_SheetName = CBoxBind(P_obj_Name.ToString());//获取指定Excel中的所有工作表 for (int j = 0; j < P_list_SheetName.Count; j++)//遍历所有工作表 { range = document.Range(ref missing, ref missing);//获取Word范围 range.InsertAfter(P_obj_Name + "——" + P_list_SheetName[j] + "工作表");//插入文本 range.Font.Name = "宋体";//设置字体 range.Font.Size = 10;//设置字体大小 DataSet myds = CBoxShowCount(P_obj_Name.ToString(), P_list_SheetName[j]);//获取工作表中的所有数据 P_int_Rows = myds.Tables[0].Rows.Count;//记录工作表的行数 P_int_Columns = myds.Tables[0].Columns.Count;//记录工作表的列数 range.Collapse(ref P_obj_Range);//合并范围 if (P_int_Rows > 0 && P_int_Columns > 0)//判断如果工作表中有记录 { //在指定范围处添加一个指定行数和列数的表格 table = range.Tables.Add(range, P_int_Rows, P_int_Columns, ref missing, ref missing); for (int r = 0; r < P_int_Rows; r++)//遍历行 { for (int c = 0; c < P_int_Columns; c++)//遍历列 { table.Cell(r + 1, c + 1).Range.InsertAfter(myds.Tables[0].Rows[r][c].ToString());//将遍历到的数据添加到Word表格中 } } } object P_obj_Format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument;//定义Word文档的保存格式 word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;//设置保存时不显示对话框 //保存Word文档 document.SaveAs(ref P_obj_WordName, ref P_obj_Format, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); } } document.Close(ref missing, ref missing, ref missing);//关闭Word文档 word.Quit(ref missing, ref missing, ref missing);//退出Word应用程序 MessageBox.Show("已经成功将多个Excel文件的内容读取到了一个Word文档中!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }
於黾 2015-02-06
  • 打赏
  • 举报
回复
如果文件本身不是excel格式,只不过是html或txt修改了一下扩展名 那么office可能也能打开,只不过打开的时候会有警告 而你用程序自动去读,必然是读不出来
於黾 2015-02-06
  • 打赏
  • 举报
回复
估计是你的excel文件不是真正的excel文件,而是用html导出的吧
TianShangYouHuiJi 2015-02-06
  • 打赏
  • 举报
回复
连接字符串问题?用aspose.cells.dll比较好。
  • 打赏
  • 举报
回复
引用 12 楼 Z65443344 的回复:
[quote=引用 11 楼 nice_fish 的回复:] 确定你的excel 版本 03版本的可以用NPOI读取 07及以上用epplus
NPOI可以读07 NPOI帮助类 还是果断放弃office组件,换第三方处理excel的dll吧,那个问题太多,不一一列举了(至少能列举出4个缺点)[/quote] 可以是可以,不过我做用NPOI写excel 报表的时候,出现过不能样式类不通超过指定数目的限制,所以后来改用epplus库,轻而易举的写各种样式.所以07及以上的版本,我个人比较推荐epplus.
於黾 2015-02-06
  • 打赏
  • 举报
回复
还是列举一下吧 1.不兼容32位64位,所以你换个电脑可能就不好使了 2.跟环境的office版本有关,你换个安装了office2010或WPS的电脑,又不能用了 3.server系统或win7,win8下可能需要注册DCOM 4.读写文件过程会开excel进程,读写完成后进程可能会变成死进程,无法自动关闭 5.如果发布到IIS,需要单独给office操作权限
andyliuxiaobo 2015-02-06
  • 打赏
  • 举报
回复
用NPOI,这个03,07都支持,服务器不用去安装office,
於黾 2015-02-06
  • 打赏
  • 举报
回复
引用 11 楼 nice_fish 的回复:
确定你的excel 版本 03版本的可以用NPOI读取 07及以上用epplus
NPOI可以读07 NPOI帮助类 还是果断放弃office组件,换第三方处理excel的dll吧,那个问题太多,不一一列举了(至少能列举出4个缺点)
  • 打赏
  • 举报
回复
确定你的excel 版本 03版本的可以用NPOI读取 07及以上用epplus
泡泡龙 2015-02-05
  • 打赏
  • 举报
回复
看着像是excel引用错误
wind_cloud2011 2015-02-05
  • 打赏
  • 举报
回复
http://blog.csdn.net/dyllove98/article/details/8606230
wind_cloud2011 2015-02-05
  • 打赏
  • 举报
回复
用NPOI, http://www.cnblogs.com/luxiaoxun/p/3374992.html
本拉灯 2015-02-05
  • 打赏
  • 举报
回复
office装什么版本的?最少2007以上才行

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧