要根据编号统计笔数和金额,很简单的,只是我以前没做过,所以想来征求一下大家的意见,能教教小弟的另开贴给分也可以

解决方案 »

  1.   

    uses
      comobj;
    var
      pc_i:integer;
      xlapp,sheet: variant;
      WBK: OleVariant;
    begin
      xlapp := createoleobject('excel.application');
      if Trim(Edit1.Text)='' then
      begin
        Application.MessageBox('文件名不能为空','警告',MB_OK);
        Exit;
      end;
      WBK := xlapp.workbooks.Open(Edit1.Text);
      sheet := xlapp.workbooks[1].worksheets['sheet1'];
      pc_i:=1;
      Edit2.Text := sheet.cells[pc_i,1];
      WBK.Close(SaveChanges := True);
      xlapp.Quit;
    end;
      

  2.   

    楼上的误会了,我的程序现在是用一个控件来操作xls文件,用循环来比较列,遇到编号相同的就笔数加1,金额相加,再写入xls文件,不是用execl来操作,但是我发现这样还是太慢了,所以想建立一个数组,在数组中把所有的笔数和金额加起来了,再一次写入xls文件
      

  3.   

    好像用个一维数组和record types就行了,现在没时间试,迟点试
      

  4.   

    先一次性把excel里的数据写到数据库,通过sql语言处理,结束后;用你的控件回写到excel;
      

  5.   

    type myrec = record
        s: string;
        i: integer;
        d: double;
      end;
    var A: array[0..200] of integer;用这样的方法不知道行不行,刚起床,还没试
      

  6.   

    http://chinasmsd.com/myweb/jxguang/download/index.htm
    有个:将数据直接送入Excel的控件
    看能否解决你的问题。
      

  7.   

    我是用XLSReadWriteII来操作xls文件的,现在的问题是在月末汇总的时候一条流水在两个汇总文件中(xls格式)搜索一遍,笔数加1,金额相加,再写入xls文件,大概要20秒钟,考虑到数据大了可能要做上几小时的,所以想用个数组和记录先把值算好了再一次写入
      

  8.   

    楼主用数组的想法是合乎常理的,可以用SetLength(可能写的不对)来改变数组的长度,来实现并在数组内循环!
      

  9.   

    读取的部分已经测试成功type myrec = record
        s: string;
        i: integer;
        d: double;
      end;
      tmyarray = array[0..200] of myrec;
    var Starttime: tTime;
      myarray: tmyarray;
      i, : integer;
      s: string;
    begin
        with xls1 do begin
        Filename := xls.xls';
        Read;
        while not (Sheets[0].AsfmtString[0, row] = '99999') do begin //用99999作为结尾
          for i := 0 to 200 do
            if myarray[i].s = Sheets[0].AsfmtString[2, row] then begin
              myarray[i].i := myarray[i].i + 1;
              myarray[i].d := myarray[i].d + Sheets[0].Asfloat[3, row];
              break;
            end
            else if myarray[i].s = '' then begin
              myarray[i].s := Sheets[0].AsfmtString[2, row];
              myarray[i].i := 1;
              myarray[i].d := xls1.Sheets[0].Asfloat[3, row];
              break;
            end;
          row := row + 1;
        end;
      end;
    end;文件格式为20030626 000 61130104 1358.87
    20030626 001 66666666 2462.42
    20030626 002 61140807 2345.24
    20030626 003 61130104 2000.87
    99999