C#如何对Excel表格进行条件选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何对Excel表格进行条件选择相关的知识,希望对你有一定的参考价值。

我现在想把Excel表格的部分数据导入到我的软件里面(C#的WinForm平台开发的)。
我是按时间选择,选择某个日期的所有数据。

我的表格中,明明有我所选择的日期的数据。但是导出来的数据却是下面这样的:

我的部分相关代码如下:
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [" + name + "$] where 测试日期 = "+date;
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
ds = new DataSet();
myCommand.Fill(ds);
myConn.Close();
dataGridView1.Invoke((MethodInvoker)delegate

dataGridView1.DataSource = ds.Tables[0];
);
我把strCom换成
string strCom = " SELECT * FROM [" + name + "$] where 测试日期 in ( "+date+")";效果也一样
请问是怎么回事

参考技术A OleDb 内部自动转换,测试多几次没问题就可以用了。如果不确定是否正确,最好在前台把数据都转换好在带入查询 参考技术B 去掉where条件,然后断点下看能不能取出数据先追问

可以取出,没问题。我是先看代码有问题没,没问题了才加的where条件。

追答

时间类型的条件你加上#试试,where 测试日期 = #"+date +“#”

追问

OK了,谢谢哈。你的方法可取。

本回答被提问者采纳
参考技术C date是字符串?还是日期对象啊?
string strCom = string.Format(" SELECT * FROM [0$] where 测试日期 ='1'",name,date);
试试哈!!追问

是字符串。
我这么弄的:
string date = dateTP.Value.Date.ToShortDateString();//Convert to the 2015/5/11 format.
dateTP是dateTimePicker控件。

可能就是这个原因,应该是这个date出了问题。

追答

哦!!
string date = dateTP.Value.ToString("yyyy/M/d");
string strCom = string.Format(" SELECT * FROM [0$] where 测试日期 ='1'",name,date);

追问

用户名是啥东西的方法可取。

c#如何实现对表格(excel)的增删改查?

一、首先处理好数据库连接字串

Excel2000-2003: string connStr = "Microsoft.Jet.Oledb.4.0;Data Source='c:\test.xls';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";

Excel2007: string connStr = "Microsoft.Ace.OleDb.12.0;Data Source='c:\test.xlsx';Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

其中:

HDR ( Header Row )设置:

若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称

若指定值为 No,代表 Excel 档中的工作表第一行就是资料了,没有栏位名称

IMEX ( IMport EXport mode )设置

当 IMEX=0 时为"汇出模式",这个模式开启的 Excel 档案只能用来做"写入"用途。

当 IMEX=1 时为"汇入模式",这个模式开启的 Excel 档案只能用来做"读取"用途。

当 IMEX=2 时为"连结模式",这个模式开启的 Excel 档案可同时支援"读取"与"写入"用途。

二、进行表格数据的查询、插入和更新:

(假设Excel文件text.xls中存在Excel表单tree,有2列分别为id,name)

1、查询

String sql = "select id, name from [tree$]";



String sql = "select id, name from `tree$`;

2、插入

String sql = "insert into [tree$] (id,name) values(1,'testname');

3、更新

String sql = "update [tree$] set name='name2' where id=1;

4、数据的删除

在OleDB的连接方式下,不可以使用delete from 语句来删除某表中的某一条记录。确切的说,在此模式下,将无法删除表中的记录。即使用update语句将所有的字段写成null,打开excel文件后依然会发现保留了该空行,而且在使用oleDB连接进行查询时,依然会查询到这条空数据。
参考技术A

C# 操作Excel分很多种方法,有COM,有ODBC,但是如果你要更灵活的操作,建议使用第三方库,这里推荐几个:

1、NPOI

优点:开源,你可以到npoi的git镜像下载源代码来看;

缺点:如果使用普通接口,在Excel比较大的情况下可能造成内存溢出(当然有解决方案,具体就去看文档吧);

2、OpenXML

优点:微软出的,比较官方,和现在的offce格式兼容性比较好而且也开源,具体可以到Open-XML-SDK查看;

缺点:只支持 Excel 2007之后版本,而且需要对文件格式比较了解;

3、aspose.cells

优点:封装的比较好,内存处理上比npoi和openxml要好些,接口简单易用;

缺点:收费,免费版会在生成的 Excel 中写入 Aspose 标志;

4、自己解析格式

优点:更灵活,想干啥干啥;

缺点:要对excel格式了解的比较多,比较麻烦。

参考技术B office现在有新加的开发技术,vsto,就是基于c#的,虽然还是比较冷门,但是很多时候感觉比vba顺手。具体可以找刘永富老师的教程 参考技术C

直接用Excel的类库来操作的话要容易的多,free spire.xls for .net这个免费Excel类库,中文站有很多教程示例可以参考,写得都比较详细

以上是关于C#如何对Excel表格进行条件选择的主要内容,如果未能解决你的问题,请参考以下文章

c#如何实现对表格(excel)的增删改查?

Excel表格如何单条件求和

excel表格操作已经筛选一次了如何在结果上二次筛选

如何用C#的winform程序对Excel表格进行增删修查

如何用C#的winform程序对Excel表格进行增删修查

excel表格筛选怎么用