起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 136|回复: 8

【结】还是导入excel问题。2250版本**

[复制链接]
发表于 2008-12-16 17:45:14 | 显示全部楼层 |阅读模式
怎么导入主从表单据啊,请教,excel是格式的如下图:红色字体要导入到表头数据集,蓝色字体要导入表体数据集。怎么导,请教,不好意思啊,最近碰到的问题有点多。呵呵,能给出代码最好。

呵呵.jpg

96.44 KB, 下载次数: 84

回复

使用道具 举报

发表于 2008-12-16 17:57:50 | 显示全部楼层
这个版本没excel导入的控件。楼主必须自己去编写一个控件去读取excel的内容,填入对应的数据集内。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-17 10:33:56 | 显示全部楼层
对啊,我自己写了啊,但是导入的数据很乱,对应不起来。上图:因为读取的数据默认为9条,连标题都包括了,我怎么才能把标题去掉呢。
回复 支持 反对

使用道具 举报

发表于 2008-12-17 16:02:47 | 显示全部楼层
你是怎么读取数据集,直接循环数据集,然后读取每个字段的值就可以了。

不会你直接读取表格文档的单元格坐标吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-18 11:55:31 | 显示全部楼层
我是读的值像以下代码:
DataSetBroker1.DataSet.FieldByName('JJYS').Asstring:=AdoDataSet1.Fields[7].Asstring;  // 基金预算
            DataSetBroker1.DataSet.FieldByName('TDCRZJ').Asstring:=AdoDataSet1.Fields[8].Asstring;  //预算外
            DataSetBroker1.DataSet.FieldByName('JZZJ').Asstring:=AdoDataSet1.Fields[9].Asstring;  //举债资金
            DataSetBroker1.DataSet.FieldByName('QTZJ').Asstring:=AdoDataSet1.Fields[10].Asstring;  //其他资金
            DataSetBroker1.DataSet.FieldByName('LJCGJE').Asstring:=AdoDataSet1.Fields[11].Asstring;  //累计采购金额
回复 支持 反对

使用道具 举报

发表于 2008-12-18 12:08:44 | 显示全部楼层
如果这样读取,那就不会读取到标题了,你所谓的标题是指字段的显示名称吗?像1楼图中的“购买单位”、“品名”这些值吗?

另外,但是导入的数据很乱,对应不起来
结合1楼的图和5楼的代码及贴上你现在的生成的文件的excel文件,具体说说,哪里对应不对。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-18 12:34:32 | 显示全部楼层
现在可以导进数据了,我用了跳转语句。是不是用个跳转像这样:AdoDataSet1.MoveBy(3);直接跳到想要的那行数据就可以了。下面是完整代码看看对不对啊,设计期运行的时候可以,但协同系统运行时报灾难性故障,看看什么原因,指点一下。:
procedure TMainForm.Button2Click(Sender: TObject);
Var
  DBName:string;
  I,Seq:Integer;
begin
      Seq:=1;
      DBName:='';
       if OpenDialog1.Execute then
         DBName:=OpenDialog1.FileName;
       if DBName='' then
         exit;
         ADOConnection1.Connected:= False;
       // AdoConnection1.Close;
        AdoConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DBName + ';Extended Properties="Excel 8.0;HDR=YES;IMEX=1"';
        AdoConnection1.Open;
        AdoDataSet1.Close;
        AdoDataSet1.CommandText:='select * from [sheet1$]';
        AdoDataSet1.Open;
        if (AdoDataSet1.RecordCount<=7) then
        begin
          jsDialogs.ShowMsg('选择的文件中没有数据!', Caption);
          Exit;
        end;
      try
        begin
          begin
            AdoDataSet1.MoveBy(3);
            DataSetBroker1.DataSet.Append;
            DataSetBroker1.DataSet.FieldByName('TJRQ').AsDateTime:=sysutils.Date;  //日期默认为当前日期
           // DBName:=sysutils.FormatDateTime('YYYY-MM-DD',sysutils.Date);
            DataSetBroker1.DataSet.FieldByName('SPDH').Asstring:=AdoDataSet1.Fields[5].Asstring;  //审批单号
             if TBizDataSet(DataSetBroker1.DataSet).GetLookupData('FGKS').DataSet.Locate('FDISPLAYNAME', AdoDataSet1.Fields[1].AsString, []) then  //分管科室
            DataSetBroker1.DataSet.FieldByName('FGKS').AsString:= TBizDataSet(DataSetBroker1.DataSet).GetLookupData('FGKS').DataSet.FieldByName('FDEPT').AsString;
            AdoDataSet1.First;
          end ;
          AdoDataSet1.MoveBy(6);
           try
             DataSetBroker2.DataSet.DisableControls;
          //while not Tdataset(AdoDataSet1).Eof do
             for I:= 0 to AdoDataSet1.FieldCount-1 do
             begin
                if AdoDataSet1.Fields[1].AsString='小计' then Break; //如果值为小计的话说明数据已经插完到此为止
                DataSetBroker2.DataSet.Append;
                DataSetBroker2.DataSet.FieldByName('SXH').AsInteger:=Seq;    //序号
               if TBizDataSet(DataSetBroker2.DataSet).GetLookupData('XMDW').DataSet.Locate('XMDW', AdoDataSet1.Fields[0].AsString, []) then
                  DataSetBroker2.DataSet.FieldByName('XMDW').AsString:= TBizDataSet(DataSetBroker2.DataSet).GetLookupData('XMDW').DataSet.Fields[0].AsString;//  项目单位
                DataSetBroker2.DataSet.FieldByName('CGNR').Asstring:=AdoDataSet1.Fields[2].Asstring;  //项目名称
                DataSetBroker2.DataSet.FieldByName('GG').AsString:='';//AdoDataSet1.Fields[3].Asstring;  //规格 默认为空
                DataSetBroker2.DataSet.FieldByName('SL').Asstring:=AdoDataSet1.Fields[3].Asstring;  //数量
                DataSetBroker2.DataSet.FieldByName('CKDJ').Asstring:=AdoDataSet1.Fields[4].Asstring; //采购单价
                DataSetBroker2.DataSet.FieldByName('CGYS').AsString:='0';//AdoDataSet1.Fields[9].Asstring; } //采购预算 默认为0
                DataSetBroker2.DataSet.FieldByName('HJ').Asstring:=AdoDataSet1.Fields[5].Asstring;
                DataSetBroker2.DataSet.FieldByName('YSNZJ').Asstring:=AdoDataSet1.Fields[6].Asstring;
                DataSetBroker2.DataSet.FieldByName('YSWZJ').Asstring:=AdoDataSet1.Fields[7].Asstring;
                DataSetBroker2.DataSet.FieldByName('YSWDGZJ').Asstring:=AdoDataSet1.Fields[8].Asstring;
                DataSetBroker2.DataSet.FieldByName('QTZJ').AsString:=AdoDataSet1.Fields[9].Asstring;
                if TBizDataSet(DataSetBroker2.DataSet).GetLookupData('TEMPZJLY').DataSet.Locate('MC', AdoDataSet1.Fields[10].AsString, []) then  //资金来源
                   DataSetBroker2.DataSet.FieldByName('TEMPZJLY').AsString:= TBizDataSet(DataSetBroker2.DataSet).GetLookupData('ZJLY').DataSet.FieldByName('BH').AsString;
                if TBizDataSet(DataSetBroker2.DataSet).GetLookupData('LZKM').DataSet.Locate('DMMC', AdoDataSet1.Fields[10].AsString, []) then   //列支科目
                   DataSetBroker2.DataSet.FieldByName('LZKM').AsString:= TBizDataSet(DataSetBroker2.DataSet).GetLookupData('LZKM').DataSet.FieldByName('BH').AsString;
                 Seq:=Seq+1;
                 AdoDataSet1.Next;
             end;
          finally
            DataSetBroker2.DataSet.DisableControls;
          end;
        end;
       Except
         Dialogs.ShowMessage('检查EXCEL文件名');
       end;
       AdoConnection1.Close;
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-18 15:17:38 | 显示全部楼层
呵呵,终于发现问题了,可以结贴了。报灾难性错误的原因是我的ADOConnection1的mode属性设置为:cmShareDenyNone了,改成cmread就好了。
回复 支持 反对

使用道具 举报

发表于 2008-12-18 15:23:34 | 显示全部楼层
好,谢谢反馈,结
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 14:57 , Processed in 0.043219 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表