我在程序中打开一个excel表,然后往里面输入内容。最后存盘。然后我到文件所在目录打开那个文件第一次能打开,多弄几次就会打不开。 后来我在进程管理器看到有几个进程 EXCEL.exe 。我关闭这些进程后,就能打开那个存盘的文件。 我想关于excel操作代码肯定有问题。 请帮忙看下?代码:
try
ExcelApp := CreateOleObject('Excel.Application');
except
Application.MessageBox('你的机器里未安装Microsoft Excel.', '', 32);
Exit;
end;
WorkBook := ExcelApp.WorkBooks.add; /////省略往sheet里写数据的代码 ExcelApp.activesheet.saveAs(filename); //存盘 filename是文件路径名 ExcelApp.WorkBooks.Close;
ExcelApp.Quit;这段代码哪里没有关闭打开的excel进程呀? 还是应该怎么写?
try
ExcelApp := CreateOleObject('Excel.Application');
except
Application.MessageBox('你的机器里未安装Microsoft Excel.', '', 32);
Exit;
end;
WorkBook := ExcelApp.WorkBooks.add; /////省略往sheet里写数据的代码 ExcelApp.activesheet.saveAs(filename); //存盘 filename是文件路径名 ExcelApp.WorkBooks.Close;
ExcelApp.Quit;这段代码哪里没有关闭打开的excel进程呀? 还是应该怎么写?
var
Temp_Worksheet: _WorkSheet;
i,j,m ,sa,xa,sj,xj: integer;
begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0] := false;
if CheckBox1.Checked then
ExcelApplication1.Caption := '百分比数据'
else
ExcelApplication1.Caption := '索力数据数据';
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
ExcelWorksheet1.Name := 'moumou';ExcelApplication1.Columns.ColumnWidth := 12;ExcelApplication1.Cells.Item[1,1] := '索号';
ExcelApplication1.Cells.Item[1,2] := '下游江';
ExcelApplication1.Cells.Item[1,3] := '上游江';
ExcelApplication1.Cells.Item[1,4] := '索号';
ExcelApplication1.Cells.Item[1,5] := '上游岸';
ExcelApplication1.Cells.Item[1,6] := '下游岸';
if not CheckBox1.Checked then
ExcelApplication1.Cells.Item[1,8] := '空传感器';
j := 1;
i := 2;
sa := 2;
xa := 2;
sj :=2;
xj := 2;ADOQuery3.Close;
ADOQuery3.Open;while not ADOQuery3.Eof do
begin
if ADOQuery3.FieldByName('qy').Value='下游江' then
begin ExcelApplication1.Cells.Item[xj,2].value := ADOQuery3.FieldByName('sl').Value;
inc(xj);
end
else if ADOQuery3.FieldByName('qy').Value='上游江' then
begin
ExcelApplication1.Cells.Item[sj,3].value := ADOQuery3.FieldByName('sl').Value;
inc(sj);
end
else if ADOQuery3.FieldByName('qy').Value='上游岸' then
begin
ExcelApplication1.Cells.Item[sa,5].value := ADOQuery3.FieldByName('sl').Value;
inc(sa);
end
else if ADOQuery3.FieldByName('qy').Value='下游岸' then
begin
ExcelApplication1.Cells.Item[xa,6].value := ADOQuery3.FieldByName('sl').Value;
inc(xa);
end
else begin
if not CheckBox1.Checked then
begin
ExcelApplication1.Cells.Item[i,8].value := ADOQuery3.FieldByName('sl').Value;
inc(i);
end;
end;
ADOQuery3.Next;end;for i:=2 to 42 do
begin
ExcelApplication1.Cells.Item[i,1] := inttostr(i-2);
ExcelApplication1.Cells.Item[i,4] := inttostr(i-2);
end;ExcelWorksheet1.SaveAs(ed_name.Text);ExcelWorkbook1.Close;
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
showmessage('数据导出完毕');end;
var
Temp_Worksheet: _WorkSheet;
i,j,m ,sa,xa,sj,xj: integer;
begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0] := false;
if CheckBox1.Checked then
ExcelApplication1.Caption := '百分比数据'
else
ExcelApplication1.Caption := '索力数据数据';
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
Temp_Worksheet:=ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
ExcelWorksheet1.Name := 'moumou';
//数据录入代码ExcelWorksheet1.SaveAs(ed_name.Text);ExcelWorkbook1.Close;
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;
showmessage('数据导出完毕');
这是精简之后的
ExcelApp:=unassigned;
WorkBook:=unassigned;
ExcelApp:=unassigned;