如何使用c#在excel查询出有 "A"或者有"B"内容的单元格?

theodiact 2009-09-09 05:31:19
请使用Microsoft.Office.Interop.Excel命名空间
在EXCEL的指定工作表中查询出有"A"或者有"B"等多个查询条件的单元格,传成Range.
很急,请各位老大帮忙
...全文
2135 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
petroe 2010-09-21
  • 打赏
  • 举报
回复
sd sd fds fds f dsf
NB#兔兔兔 2010-07-08
  • 打赏
  • 举报
回复
观望中。。。
柳晛 2009-09-10
  • 打赏
  • 举报
回复
.
BitCoffee 2009-09-10
  • 打赏
  • 举报
回复

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xlApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbook xlBook;
object m_objOpt = System.Reflection.Missing.Value;
xlBook = xlApp.Workbooks.Open(@"c:\aaa.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

xlSheet.Application.DisplayAlerts = false;

object rngFound;

//在这里申明
Microsoft.Office.Interop.Excel.Range r;

rngFound = xlSheet.UsedRange.Find("a", m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, m_objOpt, m_objOpt, m_objOpt);

while (rngFound != null)
{
if (this.richTextBox1.Text.IndexOf(xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString()) > -1)
{
break;
}
else
{
this.richTextBox1.Text += xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString() + "\r\n";
//这里合并
r.Text += xlSheet.UsedRange.FindNext(rngFound).Text;
rngFound = xlSheet.UsedRange.FindNext(rngFound);
}
}
theodiact 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 bitcoffee 的回复:]
Microsoft.Office.Interop.Excel.Range r= xlSheet.UsedRange.FindNext(rngFound);
[/Quote]
这样使用好象不行~不能这样合并
BitCoffee 2009-09-10
  • 打赏
  • 举报
回复

Microsoft.Office.Interop.Excel.Range r = xlSheet.UsedRange.FindNext(rngFound);

[Quote=引用 17 楼 theodiact 的回复:]
引用 16 楼 bitcoffee 的回复:
C# code//这个部分多写一遍,将a换成b.object rngFound;


因为是要传出去的,所以希望最后得到的能够是一个range
[/Quote]
24K純帥 2009-09-10
  • 打赏
  • 举报
回复
学习。。
theodiact 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bitcoffee 的回复:]
C# code//这个部分多写一遍,将a换成b.object rngFound;
[/Quote]

因为是要传出去的,所以希望最后得到的能够是一个range
BitCoffee 2009-09-10
  • 打赏
  • 举报
回复

//这个部分多写一遍,将a换成b.
object rngFound;

rngFound = xlSheet.UsedRange.Find("b", m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, m_objOpt, m_objOpt, m_objOpt);

while (rngFound != null)
{
//这里对比时注意要和a的区别开,可以用richTextBox2或者数组.
if (this.richTextBox1.Text.IndexOf(xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString()) > -1)
{
break;
}
else
{
this.richTextBox1.Text += xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString() + "\r\n";
rngFound = xlSheet.UsedRange.FindNext(rngFound);
}
}

[Quote=引用 15 楼 theodiact 的回复:]
BitCoffee
这个只能查出含有"a"的,但是我希望是能够得到含有"a"或者"b" 的多个相或条件的
[/Quote]
theodiact 2009-09-10
  • 打赏
  • 举报
回复
BitCoffee
这个只能查出含有"a"的,但是我希望是能够得到含有"a"或者"b" 的多个相或条件的
zhongjiekangping 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bitcoffee 的回复:]
C# code//参考一下,已经测试过,可以查找出所有的.自己根据需要修改完善. Microsoft.Office.Interop.Excel.Application xlApp=new Microsoft.Office.Interop.Excel.ApplicationClass();
xlApp.Visible=true;
¡­
[/Quote]

up
其实find 也就是做了一层的封装.
BitCoffee 2009-09-10
  • 打赏
  • 举报
回复

//参考一下,已经测试过,可以查找出所有的.自己根据需要修改完善.
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xlApp.Visible = true;
Microsoft.Office.Interop.Excel.Workbook xlBook;
object m_objOpt = System.Reflection.Missing.Value;
xlBook = xlApp.Workbooks.Open(@"c:\aaa.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

xlSheet.Application.DisplayAlerts = false;

object rngFound;

rngFound = xlSheet.UsedRange.Find("a", m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, m_objOpt, m_objOpt, m_objOpt);

while (rngFound != null)
{
//查找下一个时,如果RowIndex,ColumnIndex已经记录,说明已经全部查找完毕
if (this.richTextBox1.Text.IndexOf(xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString()) > -1)
{
break;
}
else
{
this.richTextBox1.Text += xlSheet.UsedRange.FindNext(rngFound).Row.ToString() + ":" + xlSheet.UsedRange.FindNext(rngFound).Column.ToString() + "\r\n";
rngFound = xlSheet.UsedRange.FindNext(rngFound);
}
}
theodiact 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luqc1985 的回复:]
小弟不才 传成Range.是什么意思?

[/Quote]
就是搜索完的数据以range 类型传出来

theodiact 2009-09-10
  • 打赏
  • 举报
回复
而且客户提供的表的列很多,而且还不确定到底有多少列,如果使用ADO 的话,也是很难全表搜索
theodiact 2009-09-10
  • 打赏
  • 举报
回复
不能使用ADO,这是领导的要求
hyblusea 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 theodiact 的回复:]
能不能采用find方法,好几十万的单元格,遍历太慢了
[/Quote]

几十万的单元格也不会太慢。假如有find方法,我想实际上也是遍历

如果你只是想要查询,为什么不用ADO呢?
xingjunli 2009-09-10
  • 打赏
  • 举报
回复
将数据导入内存表中如DataTable中进行查找搜索
SQL77 2009-09-10
  • 打赏
  • 举报
回复
那是否有规律,能否用DATASET来弄
theodiact 2009-09-10
  • 打赏
  • 举报
回复
能不能采用find方法,好几十万的单元格,遍历太慢了
lwp850210 2009-09-09
  • 打赏
  • 举报
回复
遍历cell

Excel.Range range=(Excel.Range)xSheet.Cells[i,j];
if(range.value.ToString().indexof('A')>=0)
count++;
加载更多回复(4)

110,525

社区成员

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

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

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