我在将dbgrid的内容保存到word的时候,如果表格内有的数据项为空就会报错,这怎么解决?
下面是我的程序:
procedure TForm1.Button7Click(Sender: TObject);
var
  WordApp,WordDoc,WordTable:OleVariant;
  i,j:integer;
begin
  WordApp:=CreateOleObject('Word.Application');
  WordApp.Visible:=True;
  WordDoc:=WordApp.Documents.Add;
  WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range,DBGrid8.DataSource.DataSet.RecordCount+1,DBGrid8.Columns.Count);
  for i:=1 to DBGrid8.Columns.Count do
  WordTable.Cell(1,i).Range.InsertAfter(DBGrid8.Columns[i-1].Title.Caption);
  i:=2;
  with DBGrid8.DataSource.DataSet do
  while not eof do
  begin
    for j:=1 to DBGrid8.Columns.Count do
      WordTable.Cell(i,j).Range.InsertAfter(DBGrid8.Columns[j-1].Field.Value);
    Next;
    Inc(i);
  end;
end;

解决方案 »

  1.   

    for j:=1 to DBGrid8.Columns.Count do
    try//预防数据为空提取出错,捕获异常
          WordTable.Cell(i,j).Range.InsertAfter(DBGrid8.Columns[j-1].Field.Value);
    except
    end;   
       Next;
      

  2.   

    谢谢回复,kshape,我用了你的方法,错误和以前一样。我的表中有些数据就是空,这一点不能改。有能把空值也一起写入word表中的方法吗?
      

  3.   

    其实可以在你插入的时候先把表中的值取出来,进行判断,看是否为空值。
    var 
       s : string;
    for j:=1 to DBGrid8.Columns.Count do
    try//预防数据为空提取出错,捕获异常
          s:=DBGrid8.Columns[j-1].Field.asstring;
          ---如果string为空的话,就把空格之类的赋给string
          
    except
    end;       
          WordTable.Cell(i,j).Range.InsertAfter(s);
      
       Next;
      

  4.   

    zb662(),我照你的方法做了,借过什么都导不出去了,报错“集合所要求的成员不存在”
    for j:=1 to DBGrid8.Columns.Count do
    try//预防数据为空提取出错,捕获异常
          s:=DBGrid8.Columns[j-1].Field.asstring;
          if s='' then
             s:='  ';      
    except
    end;       
          WordTable.Cell(i,j).Range.InsertAfter(s);
      
       Next;
      

  5.   

    谢谢各位的回复,我已经解决了,是我忘了加begin end
    下面是我的程序,贴出来给大家参考:
    procedure TForm1.Button7Click(Sender: TObject);
    var
      WordApp,WordDoc,WordTable:OleVariant;
      i,j:integer;
      s:string;
    begin
      WordApp:=CreateOleObject('Word.Application');
      WordApp.Visible:=True;
      WordDoc:=WordApp.Documents.Add;
      WordTable:=WordDoc.Tables.Add(WordApp.Selection.Range,DBGrid8.DataSource.DataSet.RecordCount+1,DBGrid8.Columns.Count);
      for i:=1 to DBGrid8.Columns.Count do
      WordTable.Cell(1,i).Range.InsertAfter(DBGrid8.Columns[i-1].Title.Caption);
      i:=2;
      with DBGrid8.DataSource.DataSet do
      while not eof do
      begin
       for j:=1 to DBGrid8.Columns.Count do
        begin
        try//预防数据为空提取出错,捕获异常
          begin
          s:=DBGrid8.Columns[j-1].Field.asstring;
          if s='' then
            s:='  ';
           end;
        except
        end;
          WordTable.Cell(i,j).Range.InsertAfter(s);
        end;
       Next;    Inc(i);  end;
    end;