我尝试在c#中阅读.xls苍蝇。
如果第一个数据列是文本,那么它会显示DBNull.Value =true
。
但如果它的数量是可以的。
那么如何阅读文本?
这是我的代码:
OleDbCommand command = new OleDbCommand("Select [Id], [Name], [Email] from [sheet$]", connection);
OleDbDataAdapter objAdapter = new OleDbDataAdapter();
objAdapter .SelectCommand = command;
DataSet objDataset = new DataSet();
objAdapter .Fill(objDataset1);
DataView dv = objDataset .Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
if (dv[i][0] != DBNull.Value ) // problem is here.... if the first column is text then it true. I want to tead text as well.
{
}
}
答案 0 :(得分:2)
尝试:
string dval = dv[i][0] as string;
if(dval != null)
{
//use string
要使用该字符串,您必须调用ToString()
方法。即:
dv[i][0].ToString()
答案 1 :(得分:0)
即。可能你需要下一件事:
if(!Convert.IsDBNull(dv[i][0])) {…
// or
var text = Convert.ToString(dv[i][0], CultureInfo.CurentCulture);
if(!String.IsNullOrEmpty(text)) {…
// or
var text = dv[i][0] as string;
if(text != null) {…
取决于你需要的东西。
答案 2 :(得分:0)
您是否仅限于使用OleDbDataAdapter
或是否可以使用其他库?如果可以的话,你可能想给linqtoexcel一个机会。我发现它更容易使用,因为我是linq的忠实粉丝。它可以从上面的链接获得,但它也可以在nuget上使用。
这是您正在使用的一种语法:
var excel = new ExcelQueryFactory("excelFileName");
var indianaCompanies = from c in excel.Worksheet()
where c["State"] == "IN" || c.Zip == 46550
select c;
如果您有一个名为excelFileName
的电子表格,并且您想要的数据位于第一个工作表上,则可以选择State
列(假定列名称位于第一行)的任何行等于IN
或Zip
列= 46550
。他们有一个wiki页面,在here