按需要导出Excel?

woaiwd 2014-03-10 10:00:22
例如有5个字段,身份证号,姓名,性别,年龄,民族,如何随意组合导出Excel?
全部导出我可以写出来,这样随意组合怎么写,比如选择身份证号,姓名,年龄或者选择身份证号,姓名,性别?
附全部导出的代码:

if not DBGridEh1.DataSource.DataSet.Active then
begin
Msg:='数据表中没有数据,请先统计数据';
ShowMessage(Msg);
Exit;
end;

ShowMessage('有数据,可以导出Excel!');
Row:=1 ; Col:=5; //Row为输出起始行,Col为总列数

try
Xlsa := CreateOleObject('Excel.application');
except
MessageDlg('Excel May Not Be Installed!',mtError,[mbok],0);
Abort;
end;

Xlsa.Visible := True;
XlsW := XlsA.Workbooks.Add(-4167);
XlsA.workbooks[1].sheets[1].name:='sheet1';
XlsS := XlsA.workbooks[1].sheets['sheet1'];

Range := XlsS.Range[XlsS.cells[Row,1],XlsS.cells[Row,Col]];
Range.select;
Range.merge;
Range.value := '学生信息';
Range.font.size := 9;
Range.font.name := '宋体';
Range.font.fontStyle:='加粗';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row+1,1],XlsS.cells[Row+1,1]];
Range.select;
Range.merge;
Range.value := '身份证号';
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row+1,2],XlsS.cells[Row+1,2]];
Range.select;
Range.merge;
Range.value := '姓名';
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row+1,3],XlsS.cells[Row+1,3]];
Range.select;
Range.merge;
Range.value := '性别';
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row+1,4],XlsS.cells[Row+1,4]];
Range.select;
Range.merge;
Range.value := '民族';
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row+1,5],XlsS.cells[Row+1,5]];
Range.select;
Range.merge;
Range.value := '年龄';
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;

Range := XlsS.Range[XlsS.cells[Row,1],XlsS.cells[Row+1,Col]];
Range.select ;
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;
Range.borders.lineStyle := xlContinuous;

with Fdm.ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('select * from StudentInfo');
Open;
if Active then
begin
j:=RecordCount;
if j>0 then
begin
first;
for i:=1 to j do
begin
XlsS.cells[Row+i+1,1].NumberFormatLocal:='@';
XlsS.cells[Row+i+1,1] :=FieldByName('cIdNo').Value;
XlsS.cells[Row+i+1,2] :=FieldByName('cName').Value;
XlsS.cells[Row+i+1,3] :=FieldByName('cGender').Value;
XlsS.cells[Row+i+1,4] :=FieldByName('cNation').Value;
XlsS.cells[Row+i+1,5] :=FieldByName('cAge').Value;
Next;
end;

Range := XlsS.range[XlsS.cells[Row+2,1],XlsS.cells[Row+1+j,Col]];
Range.select ;
Range.font.size := 9;
Range.font.name := '宋体';
Range.HorizontalAlignment := xlCenter;
Range.borders.lineStyle := xlContinuous;
end;//end j>0
end;//end Active
end;
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟一世 2014-03-12
  • 打赏
  • 举报
回复
学习中 正在找这样的程序呢
lyhoo163 2014-03-11
  • 打赏
  • 举报
回复
建议使用第三方控件TXLSReadWriteII4,非常好用。
nm_wyh 2014-03-11
  • 打赏
  • 举报
回复
我做过类似的!步骤如下: 1、肯定需要选择那些字段需要导出吧,在选择的时候设置ADOQuery.Fields[i].Tag := 1; //默认是0 如果不选择也要重置一下ADOQuery.Fields[i].Tab := 0; 2、导出时表头字段如(身份证号,姓名等)做如下判断: if ADOQuery.Fields[i].Tag = 1 then Sheet1.Cells[2,i+1] := ADOQuery.Fields[i].DisplayLabel; //此处DisplayLabel是事先设置的表头,如数据库中身份证号字段名称是F_IDCard,那么在显示时应该显示【身份证号】吧,这里在ADOQuery中就可以设置,具体自己找资料。 3、导出具体内容时也一样,做如下判断并导出信息: if ADOQuery.Fields[j].Tag = 1 then Sheet1.Cells[i+3,j+1]:=Trim(ADOQuery.Fields[j].AsString);
lght 2014-03-10
  • 打赏
  • 举报
回复
将字段与表头对应,然后网上找一下排列组合的算法
woaiwd 2014-03-10
  • 打赏
  • 举报
回复
自己写的啊,不能去掉,5个都要保留,5个字段随意组合导出,你没看明白
lght 2014-03-10
  • 打赏
  • 举报
回复
楼主这不是自己写的吧 把不要的去掉不就行了?去掉对应的表格头,for循环里去掉对应的字段。注意序号

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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