求教:C#操作excel2010的问题

一转程序员 2014-10-28 06:33:54
有一个excel2010的表,是在Sheet1,只有这一个工作表。格式如下:


现在我想用C#把它当作一个数据库查询,比如查找宽5长8的编号怎样实现?
还有如果要更新这表中的数据应该怎么做?
...全文
237 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
真爱无限 2014-10-30
  • 打赏
  • 举报
回复
。。。上面回答中语句有点问题 , “再用excel写入到excel“ 是 ”再用NPOI写入到excel“ 。
真爱无限 2014-10-30
  • 打赏
  • 举报
回复
不知道你们是来闲谈的还是解决问题的。 针对提问者的问题, 现在我想用C#把它当作一个数据库查询,比如查找宽5长8的编号怎样实现? :当作数据库查询,要依赖电脑上的office2010,并发时可能出问题,不太好,而用npoi(速度快)读取到datatable,然后也能用linq 语句类似查询数据库一样,实现查询(要遍历)。 还有如果要更新这表中的数据应该怎么做? 一样的,在读取到数据的datatable中,修改内容后,再用excel写入到excel(删除或更名原来的excel) 还如果没用过NPOI的话,要花点时间学习一下,这个东西开源且好用。
於黾 2014-10-30
  • 打赏
  • 举报
回复
引用 8 楼 hodrag 的回复:
[quote=引用 3 楼 Z65443344 的回复:] 方法1.用ADODB,把excel当数据库读,可以使用SQL语句查询 方法2.用NPOI,先把excel都读到datatable里,然后用Linq筛选
方法一可以直接用sql查询?不用读到datatable里?[/quote] sql查询完,返回的不还是datatable吗... 你就把它当数据库操作就好了... datatable的使用方法,自己查MSDN也行,或者到底哪里出错,贴出来看看
一转程序员 2014-10-30
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
[quote=引用 2 楼 hodrag 的回复:] [quote=引用 1 楼 yingyingcht 的回复:] 给个邮箱,我给你点资料,看看你就会了
我找过几本书,关于dataset和datatable只有很简单的介绍,根本没实用价值,help里也没有[/quote] 这东西本来就是跟数组差不多的,有什么复杂的,很简单的介绍不够用吗[/quote] 我试的总是出错,还找不出问题出在哪……
baidu_22669667 2014-10-29
  • 打赏
  • 举报
回复

strFile_Type = strFile_Path.Substring(strFile_Path.LastIndexOf("."));
if (strFile_Type == ".xls")
 {
        //Office 2003版本
    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFile_Path + ";Extended Properties=Excel 8.0";
 }
else
 {
          //Office 2007版本
     strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFile_Path + ";Extended Properties=Excel 12.0";
}
 strSql = "select 编号,宽,长,高 from [Sheet1$]";
System.Data.DataSet ds = new System.Data.DataSet();
oledbcon = new System.Data.OleDb.OleDbConnection(strconn);
oledbada = new System.Data.OleDb.OleDbDataAdapter(strSql, oledbcon);
oledbada.Fill(ds);    //将查询出的结果集放到DataSet中
DataTable dt1=ds.Table[0];
var q = from dt1 in dt.AsEnumerable()
        where dt1.Field<string>("宽") == "5" && dt1.Field<string>("长") == "MARKING" 
        select dt1;
//最后通过foreach将q的值取出就OK了
是这个吗??
於黾 2014-10-29
  • 打赏
  • 举报
回复
引用 2 楼 hodrag 的回复:
[quote=引用 1 楼 yingyingcht 的回复:] 给个邮箱,我给你点资料,看看你就会了
我找过几本书,关于dataset和datatable只有很简单的介绍,根本没实用价值,help里也没有[/quote] 这东西本来就是跟数组差不多的,有什么复杂的,很简单的介绍不够用吗
ck_cht 2014-10-29
  • 打赏
  • 举报
回复
引用 2 楼 hodrag 的回复:
[quote=引用 1 楼 yingyingcht 的回复:] 给个邮箱,我给你点资料,看看你就会了
我找过几本书,关于dataset和datatable只有很简单的介绍,根本没实用价值,help里也没有[/quote] 很简单,C#操作excel很简单,因为office是支持vb.net的,有不会的直接在excel里面录个宏,看宏的代码转换成C#的就行了,类都是一模一样的,引用就引用Microsoft.Office.Interop.Excel
於黾 2014-10-29
  • 打赏
  • 举报
回复
方法1.用ADODB,把excel当数据库读,可以使用SQL语句查询 方法2.用NPOI,先把excel都读到datatable里,然后用Linq筛选
一转程序员 2014-10-29
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
方法1.用ADODB,把excel当数据库读,可以使用SQL语句查询 方法2.用NPOI,先把excel都读到datatable里,然后用Linq筛选
方法一可以直接用sql查询?不用读到datatable里?
一转程序员 2014-10-29
  • 打赏
  • 举报
回复
引用 6 楼 baidu_22669667 的回复:

strFile_Type = strFile_Path.Substring(strFile_Path.LastIndexOf("."));
if (strFile_Type == ".xls")
 {
        //Office 2003版本
    strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFile_Path + ";Extended Properties=Excel 8.0";
 }
else
 {
          //Office 2007版本
     strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFile_Path + ";Extended Properties=Excel 12.0";
}
 strSql = "select 编号,宽,长,高 from [Sheet1$]";
System.Data.DataSet ds = new System.Data.DataSet();
oledbcon = new System.Data.OleDb.OleDbConnection(strconn);
oledbada = new System.Data.OleDb.OleDbDataAdapter(strSql, oledbcon);
oledbada.Fill(ds);    //将查询出的结果集放到DataSet中
DataTable dt1=ds.Table[0];
var q = from dt1 in dt.AsEnumerable()
        where dt1.Field<string>("宽") == "5" && dt1.Field<string>("长") == "MARKING" 
        select dt1;
//最后通过foreach将q的值取出就OK了
是这个吗??
我是想取一个单元格的内容,foreach取出的是一行的内容吧?还有,如果要更新这个excel表怎么做?
一转程序员 2014-10-28
  • 打赏
  • 举报
回复
引用 1 楼 yingyingcht 的回复:
给个邮箱,我给你点资料,看看你就会了
我找过几本书,关于dataset和datatable只有很简单的介绍,根本没实用价值,help里也没有
ck_cht 2014-10-28
  • 打赏
  • 举报
回复
给个邮箱,我给你点资料,看看你就会了

110,536

社区成员

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

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

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