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中的数组的行和列有些容易弄混。。。。 敲打

猜你喜欢

转载自blog.csdn.net/qq_16039013/article/details/80688739
今日推荐