Delphi对Excel的操作

    Delphi将数据存到Excel中。这里是将数据追加到excel文件的末尾。

//保存数据到文件最后
//path:文件所在路径
//v:待保存的数据
//sheetindex
function SaveToExcel(path:string;v:Variant;sheetindex:Integer=1):Boolean;
var
i:Integer;
index:Integer;
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
stmp:string;
sr:TSearchRec;
itmp:Integer;
begin
  Result := True;
  try
    MsExcel := CreateOleObject('Excel.Application');
    try
      //判断是否存在该文件,不存在就创建
      if(FindFirst(path,faanyfile,sr)=0) then
      begin
        MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      end
      else
      begin
        MsExcelWorkBook := CreateOleObject('Excel.Sheet');
        MsExcel.DisplayAlerts:=false;
        MsExcelWorkBook.SaveAS(path);
        MsExcel.Quit;
        MsExcel := Unassigned;

        MsExcel := CreateOleObject('Excel.Application');
        MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      end;
      try
        MsExcelWorkSheet := MsExcel.Worksheets.Item[sheetindex];
        index := MsExcelWorkSheet.Range['A1'].CurrentRegion.rows.count;

        i := 1;
        while i <= VarArrayHighBound(v, 2) do
        begin
          stmp := v[1,i];
          MsExcelWorkSheet.Cells.item[index+1,i] := v[1,i];
          inc(i);
        end;
        MsExcel.DisplayAlerts:=false;
        MsExcel.ActiveWorkBook.Save;
      finally
        MsExcel.WorkBooks.Close;
      end;
    finally
      MsExcel.Quit;
      MsExcel := Unassigned;
    end;
  except
  begin
    showmessage('写入文件失败!');
  end;
  end;
end;
删除一行数据:先找到对应数据对应的行号:
//删除某一行的数据
//path:文件所在路径
//SData:查找的数据
//findCOl:在哪一列查找数据
function DeleteExcelRow(path:string;SData:Variant;findCol:Integer):Boolean;
var
i:Integer;
roucount:Integer;
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
v:Variant;
begin
  Result := false;
  try
    MsExcel := CreateOleObject('Excel.Application');
    try
      MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      try
        MsExcelWorkSheet := MsExcel.Worksheets.Item[1];
        roucount := MsExcelWorkSheet.Range['A1'].CurrentRegion.rows.count;
        v := varArrayCreate([1, 1000, 1, 7], varVariant);
        v := MsExcelWorkSheet.Range['A1:G1000'].Value;
        for i := 1 to roucount do
        begin
          if v[i,findCol] = SData then
          begin
            MsExcel.ActiveSheet.Rows[i].Delete;
            break;
          end;
        end;
        MsExcel.DisplayAlerts:=false;
        MsExcel.ActiveWorkBook.Save;
      finally
        MsExcel.WorkBooks.Close;
      end;
    finally
      MsExcel.Quit;
      MsExcel := Unassigned;
    end;
  except
    begin
      showmessage('打开文件失败!');  
    end;
  end;
  Result := True;
end;
获取excel表名,存于variant变量数组V中。
//获取所有表名
//path参数是excel文件路径
//v是out的,输出型变量,获取到的表名存于v
procedure GetExcelSheetName(path:string;out v:Variant);
var
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
i:Integer;
begin
  v := varArrayCreate([1, 50, 0, 1], varVariant);
  try
    MsExcel := CreateOleObject('Excel.Application');
    try
      MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      try
        for i := 1 to MsExcel.Sheets.Count do
        begin
          v[i,0] := MsExcel.Sheets[i].Name;
        end;
      finally
        MsExcel.WorkBooks.Close;
      end;
    finally
      MsExcel.Quit;
      MsExcel := Unassigned;
    end;
  except
    begin
      showmessage('打开文件失败!');
    end;
  end;
end;
读取Excel内容:
//读取excel文件,得到数据v,最大行数rowcount
//path:文件所在路径
//v:文件内数据
//rowcount:文件最大行数
//sheetindex:读取的文件sheet序号
function ReadFromExcel(path:string;out v:Variant;out rowcount:Integer;sheetindex:Integer=1):Boolean;
var
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
begin
  Result := false;
  try
    MsExcel := CreateOleObject('Excel.Application');
    try
      MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      try
        MsExcelWorkSheet := MsExcel.Worksheets.Item[sheetindex];
        rowcount := MsExcelWorkSheet.Range['A1'].CurrentRegion.rows.count;
        v := varArrayCreate([1, 1000, 1, 7], varVariant);
        v := MsExcelWorkSheet.Range['A1:G1000'].Value;
      finally
        MsExcel.WorkBooks.Close;
      end;
    finally
      MsExcel.Quit;
      MsExcel := Unassigned;
    end;
  except
    begin
      showmessage('打开文件失败!');
    end;
  end;
  Result := True;
end;
删除一个表单:
//删除某个表单
//path:excel文件路径
//RecipeName:表单名
function DeleteRecipe(path:string;RecipeName:string):Boolean;
var
i:Integer;
index:Integer;
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
begin
  Result:=False;
  try
    MsExcel := CreateOleObject('Excel.Application');
    try
      MsExcelWorkBook := MsExcel.Workbooks.Open (path);
      try
        //先判断当前是否已存在该配方
        for i := 1 to MsExcel.Sheets.Count do
        begin
          if (RecipeName = MsExcel.Sheets[i].Name) then
          begin
            MsExcel.DisplayAlerts:=false;
            MsExcel.Sheets[i].delete;
            Result := True;
            break;
          end;
        end;

        MsExcel.DisplayAlerts:=false;
        MsExcel.ActiveWorkBook.Save;

    finally
        MsExcel.WorkBooks.Close;
      end;
    finally
      MsExcel.Quit;
      MsExcel := Unassigned;
    end;
  except
    showmessage('删除失败!');
  end;
end;
delphi中的数组的行和列有些容易弄混。。。。 敲打

使用方便,功能强大。 type FileCheckResult = (fcrNotExistend,fcrNotXSLFile,fcrValidXSL); //文件不存在,不是XSL文件,合法的XSL文件 TOLEExcel = class(TComponent) private FExcelCreated: Boolean; FVisible: Boolean; FExcel: Variant; //Excel程序对象 FWorkBook: Variant; //Excel工作簿对象 FWorkSheet: Variant; //Excel工作簿 工作表对象 FCellFont: TFont; //单元格字体对象 FTitleFont: TFont; // FFontChanged: Boolean; FIgnoreFont: Boolean; FFileName: TFileName; //********************************************自己添加*****************************// FCreateFromFile:Boolean; //指示是否打开已有文件 FExcelCaption:string; //用程序打开Excel的窗体标 //*********************************来自U_Report*****************************// FRCPrePage:Integer; //每页显示的记录数 FMax:Integer; //最大的数组个数 procedure SetExcelCellFont(var Cell: Variant); procedure SetExcelTitleFont(var Cell: Variant); procedure GetTableColumnName(const Table: TTable; var Cell: Variant); procedure GetQueryColumnName(const Query: TQuery; var Cell: Variant); procedure GetFixedCols(const StringGrid: TStringGrid; var Cell: Variant); procedure GetFixedRows(const StringGrid: TStringGrid; var Cell: Variant); procedure GetStringGridBody(const StringGrid: TStringGrid; var Cell: Variant); protected procedure SetCellFont(NewFont: TFont); procedure SetTitleFont(NewFont: TFont); procedure SetVisible(DoShow: Boolean); function GetCell( ARow,ACol: Integer): string; procedure SetCell(ACol, ARow: Integer; const Value: string); function GetDateCell(ACol, ARow: Integer): TDateTime; procedure SetDateCell(ACol, ARow: Integer; const Value: TDateTime); //*********************************************自己添加************************************// procedure SetCaption(ACaption:string);//设置打开文件后,Excel主程序的窗体标题 function GetCapiton:string;//返回打开文件后,Excel主程序的窗体标题 public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值