方法/步骤
有些时候我们需要从一个excel文件中的数据库中提取指定的行或列中的数据。例如如图示,是国内所有上市公司的行业统计。但是现在我们只需要其中部分上市公司的行业统计,我们怎么办呢,是一个个查找,然后复制吗,当然不是。
我们可以做一个表格,只需要把我们需要的公司代码列复制进去就会自动显示其行业统计情况。也就是从浩如烟云的数据中,提取需要的数据对应的行中的数据。下面就以我刚刚解决的这个问题为示例详细说明一下。
1、打开源数据文件,把首行中的对应的数据,复制行到空白位置。
3、d出”插入函数“对话框,设置其类别为”逻辑“,并选择列表框中的IF选项。然后确定。
4、在d出的”函数参数“对话框中,设置Logical_test参数为”I2=“”,将Value_if_true设置为“”,也就是空白内容。
最重要的一步来了:
将Value_if_false参数框中输入“VLOOKUP(I2,A2:B2846,2),然后确定。这个步骤是什么意思呢。就是用if函数判定I2单元格中的内容是不是不是空白。若是空白,那么J2单元格也是空白。
若不是空白,就执行VLOOKUP函数。在A2:B2846区域中(因为源数据不改动,所以这里用的是相对引用)查找I2单元中的内容,找到后,在J2单元格中返回所找到的内容所在的行的第二列中的数据。
5、经过第4步后,我们在I2单元中输入任意证券代码就会在J2单元中显示其行业了。那么,现在我们需要的是在I列粘贴进去我们需要的证券代码后,其后会出现源数据所对应的第一行中的内容。所以要接着第6步。
6、选中J2单元格,注意是J2,不是I2哦(I2是我们输入证券代码的地方),鼠标移动到单元格右下角,出现十字光标时,按住鼠标左键向右拖动到O2单元格。
7、这个时候你就会发现原来源数据中的C2-G2单元格中的内容就会自动填充到K2-O2单元格中。这个时候,如果我们需要的数据是按源数据中的数据从上 到下排列的,就可以不用修改了。直接重复第6步中的方法,把J2-O2每个单元格下拉填充就完成了。如图示,先把需要的数据列复制到I列中,然后依次下拉 填充。
8、但有时候,如果我们需要的不是按照源数据中的排序,比如说,回到我们现在用的这个例子,如果在I3中,输入000002就会出错。
这是为什么呢,看一下J3中的公式就明白了。j3中的函数为VLOOKUP(I3,A3:B2847,2)),也就是搜索从A3到B2487区域中 的内容。没有包含A2,所以我们输入000002在源数据中找不到。所以使用这个方法前,要先对需要的数据按源数据进行排序。不然,是不准确的。
g2公式=INDEX(Sheet2!$B$2:$F$10,MATCH(B2,Sheet2!$A$2:$A$10,0),MATCH(D2,Sheet2!$B$1:$F$1,0))
下拉
数据范围自己按照实际范围选定
由于拆分后还需要按顺序组合成,所以使用游标。
declare @a varchar(1000), @b varchar(1000)
declare @seq_a int, @seq_b int
set @seq_a = 1
set @seq_b = 1
create table #a(seq int, val int)
create table #b(seq int, val int)
declare cur cursor for select A, B from tablename
open cur
fetch next from cur into @a, @b
while @@fetch_status = 0
begin
if charindex(',',@a,1) = 0
begin
insert into #a values(@seq_a, cast(@a as int))
set @seq_a = @seq_a + 1
end
else
begin
declare @index_a int,@pos_a int
set @index_a = 1
set @a = @a + ','
set @pos_a = charindex(',',@a,@index_a)
while @pos_a > 0
begin
insert into #a values(@seq_a, cast(substring(@a,@index_a,@pos_a - @index_a) as int))
set @seq_a = @seq_a + 1
set @index_a = @pos_a + 1
set @pos_a = charindex(',',@a,@index_a)
end
end
if charindex(',',@b,1) = 0
begin
insert into #b values(@seq_b, cast(@b as int))
set @seq_b = @seq_b + 1
end
else
begin
declare @index_b int,@pos_b int
set @index_b = 1
set @b = @b + ','
set @pos_b = charindex(',',@b,@index_b)
while @pos_b > 0
begin
insert into #b values(@seq_b, cast(substring(@b,@index_b,@pos_b - @index_b) as int))
set @seq_b = @seq_b + 1
set @index_b = @pos_b + 1
set @pos_b = charindex(',',@b,@index_b)
end
end
fetch next from cur into @a, @b
end
close cur
deallocate cur
select #aval as A, #bval as B from #a full join #b on #aseq = #bseq
order by isnull(#aseq, #bseq)
drop table #a
drop table #b
方便的办法应该是通过分列 *** 作。
函数提取的方法是:在B2单元格中输入以下公式,然后向下填充公式
=MID(A2,FIND("座",SUBSTITUTE(A2," ","座",2)),FIND("座",SUBSTITUTE(A2," ","座",3))-FIND("座",SUBSTITUTE(A2," ","座",2)))
详见附图附件
你要另外写的话,可以。先连接数据库,创建SqlDataApter对象,把查到的结果集填充到Datatable里显示、然后再逐个获取Datatable单元格的内容。
或用SqlDataReader来,它是逐行读取数据的,每读一次就把当前行添加到集合里。
sqlhelper这个类是对数据库 *** 作进行封装而已,方便重复使用。你在vs里,右击你的代码 Sqlhelper---转到定义,仔细看它是怎么通过getDataTable()这个函数
获得数据库数据的。原理都是一样的。
1
2
3
4
5
6
7
8
9
10
11
string constr = "data source=;database=Goods; uid=123;pwd=123;";//连接的数据库的信息
SqlConnection conn = new SqlConnection(constr);//创建连接
connOpen();//打开连接
string sql = "select from Course"; //要执行的sql语句,你改成你的表名
SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
DataTable dt = new DataTable();
sdaFill(dt);//填充数据到dt
foreach (DataRow row in dtRows)
{
listAdd(row["课程编号"]ToString());
以上就是关于Excel怎么设置只提取指定行中的数据全部的内容,包括:Excel怎么设置只提取指定行中的数据、excel中如何通过函数调取符合一个数据库里两个条件、数据库截取函数和行转列问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)