Delphi 利用NativeExcel 实现 导入(返回clientdataset) 导出

1、先要安装控件\NativeExcel310(自行下载)

2、添加单元引用

   uses nexcel;

3、转换方法

function ExcelToDataSet(fileNmae:string):TClientDataSet;
var
od: TOpenDialog;
wb: IXLSWorkbook;
ws: IXLSWorksheet;
irow,J: integer;
v: Variant;
ClientDataSet1: TClientDataSet;
MaxCell: Integer;
begin
  wb := TXLSWorkbook.Create;
  wb.Open(fileNmae);
  ws := wb.WorkSheets[1];            // sheet1
  if ws.UsedRange.Rows.Count = 0 then
  Exit;

  if ClientDataSet1 <> nil then
    ClientDataSet1.Free;

  ClientDataSet1:= TClientDataSet.Create(nil);

  MaxCell:= 0;
  for irow := 1 to ws.UsedRange.Cells.Count - 1 do // 遍历标题
  begin

    v := ws.UsedRange.Cells[1, irow].Value;
    if VarIsNull(v) then
       Break;

    if not VarIsNull(v) then
     begin
        MaxCell:= MaxCell + 1;
        ClientDataSet1.FieldDefs.Add(v,ftstring,90 );
     end;

  end;
  ClientDataSet1.CreateDataSet; //建立
  ClientDataSet1.Active;

  ClientDataSet1.Edit;
  for J := 2 to ws.UsedRange.Rows.Count   do
  begin

//      for irow := 1 to ws.UsedRange.Cells.Count - 1 do // 遍历标题
    for irow := 1 to MaxCell -1 do // 遍历标题
    begin

      v := VarToStr(ws.UsedRange.Cells[J, irow].Value);
//        if not VarIsNull(v) then
      begin

        //根据列名Post数据
         ClientDataSet1.FieldByName(ws.UsedRange.Cells[1, irow].Value).AsString:= v;
      end;

    end;
      ClientDataSet1.Append;
  end;


  Result := ClientDataSet1;

  wb.Close;


end;

4、导出

procedure TForm2.Button3Click(Sender: TObject);
var
xls: TDataset2Excel;
sd: TSaveDialog;

begin
  //export

  if ClientDataSet1 = nil then
    Exit;
  sd := TSaveDialog.Create(nil);
  sd.Filter := 'xls|*.xls';
  sd.FileName := '1.xls';
  if sd.Execute then
  begin
    xls := TDataset2Excel.Create(nil);
    xls.Dataset := ClientDataSet1;
    xls.WorksheetName := '1';
    xls.SaveDatasetAs(sd.FileName);
    xls.Workbook := nil;
    xls.Free;
  end;
  sd.Free;
end;

posted @ 2021-08-26 11:48  三弄梅花  阅读(425)  评论(0编辑  收藏  举报