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