我的要求:自动打开Excel文档,读数据,写数据,然后再保存该Excel文档,再退出该Excel文档,当然不能关闭其他Excel的文档。以下是我的代码,运行到后来总是提示“类Workbook的SaveAs方法无效”如利用ExlApp.WorkBooks.Save(),也提示“Methord ‘save’ not supported by automation object”请问我这里该如何写啊????急啊?? try
//创建对象
ExlApp := CreateOleObject( 'Excel.Application' );
except
MessageDlg('您的机器里未安装Microsoft Excel!', mtError, [mbOk], 0);
exit;
end; //打开已存在的Excel文档
ExlApp.WorkBooks.Open(self.OpenDialog1.FileName);
ExlApp.Visible:=False;
//Screen.Cursor:=crSQLWait;
L: for i:=2 to ExlApp.ActiveSheet.UsedRange.Rows.Count do
begin
//取出各个单元格,并对某些单元格进行判断
str_xm:=ExlApp.Cells[i,1].Value;
str_xb:=ExlApp.Cells[i,2].Value;
str_sfzh:=ExlApp.Cells[i,3].Value;
str_cbrq:=ExlApp.Cells[i,4].Value;
str_rylb:=ExlApp.Cells[i,5].Value;
str_dbzh:=ExlApp.Cells[i,6].Value;
str_jtdz:=ExlApp.Cells[i,7].Value;
str_jtdh:=ExlApp.Cells[i,8].Value;
str_yhzh:=ExlApp.Cells[i,9].Value;
str_hm:=ExlApp.Cells[i,10].Value;
str_xyh:=ExlApp.Cells[i,11].Value;
//判断身份证号的位数及校验的正确性
iLen:=length(str_sfzh);
if (iLen<>18) and (iLen<>15) then
begin
serrmsg:='该行身份证号位数不对,应为18位或15位!';
goto L1;
end;
L1:
//把错误信息写入到Excel的最后一列中
ExlApp.Cells[i,12].Value:=serrmsg;
n:=n+1; //不成功的记录数 end; ExlApp.DisplayAlerts:=false;
//ExlApp.WorkBooks.Save();
ExlApp.ActiveWorkBook.SaveAs(EdtSbsj.Text,false);
ExlApp.WorkBooks.Close(EdtSbsj.Text);
ExlApp.Quit;
ExlApp:=Unassigned;
if n=0 then
Application.MessageBox(pchar('成功导入'+inttostr(m)+'条数据!'),'批量申报导入')
else
Application.MessageBox(pchar('共有'+inttostr(m+n)+'条数据进行导入,导入成功'+inttostr(m)+'条;导入错误'+inttostr(n)+'条! 如有错误记录,请到原文件中查看错误原因。'),'批量申报导入')
//创建对象
ExlApp := CreateOleObject( 'Excel.Application' );
except
MessageDlg('您的机器里未安装Microsoft Excel!', mtError, [mbOk], 0);
exit;
end; //打开已存在的Excel文档
ExlApp.WorkBooks.Open(self.OpenDialog1.FileName);
ExlApp.Visible:=False;
//Screen.Cursor:=crSQLWait;
L: for i:=2 to ExlApp.ActiveSheet.UsedRange.Rows.Count do
begin
//取出各个单元格,并对某些单元格进行判断
str_xm:=ExlApp.Cells[i,1].Value;
str_xb:=ExlApp.Cells[i,2].Value;
str_sfzh:=ExlApp.Cells[i,3].Value;
str_cbrq:=ExlApp.Cells[i,4].Value;
str_rylb:=ExlApp.Cells[i,5].Value;
str_dbzh:=ExlApp.Cells[i,6].Value;
str_jtdz:=ExlApp.Cells[i,7].Value;
str_jtdh:=ExlApp.Cells[i,8].Value;
str_yhzh:=ExlApp.Cells[i,9].Value;
str_hm:=ExlApp.Cells[i,10].Value;
str_xyh:=ExlApp.Cells[i,11].Value;
//判断身份证号的位数及校验的正确性
iLen:=length(str_sfzh);
if (iLen<>18) and (iLen<>15) then
begin
serrmsg:='该行身份证号位数不对,应为18位或15位!';
goto L1;
end;
L1:
//把错误信息写入到Excel的最后一列中
ExlApp.Cells[i,12].Value:=serrmsg;
n:=n+1; //不成功的记录数 end; ExlApp.DisplayAlerts:=false;
//ExlApp.WorkBooks.Save();
ExlApp.ActiveWorkBook.SaveAs(EdtSbsj.Text,false);
ExlApp.WorkBooks.Close(EdtSbsj.Text);
ExlApp.Quit;
ExlApp:=Unassigned;
if n=0 then
Application.MessageBox(pchar('成功导入'+inttostr(m)+'条数据!'),'批量申报导入')
else
Application.MessageBox(pchar('共有'+inttostr(m+n)+'条数据进行导入,导入成功'+inttostr(m)+'条;导入错误'+inttostr(n)+'条! 如有错误记录,请到原文件中查看错误原因。'),'批量申报导入')
解决方案 »
- 讨论系统架构(附本人稳定运行多年的系统架构)
- 求思路~~~~搞不出来啊。
- 急问如何模拟鼠标点击动作(鼠标不在窗口内)
- 运动员做动作时怎么用摄像机或是摄像头进行录像事后并分析动作分解要领?
- 指针?内存?类?对象?流?我都弄了两天了
- 菜鸟问问题:有什么办法动态加载一个Frame(来源于自己做的Frame模型)到一个Form中啊
- query的locate是什么意思?
- 我发布了一个小软件~~http://expert.csdn.net/cnshare/soft/12/12362.shtm
- 如何快速清空stringgrid中的全部内容?
- 百思不得其解,我的TDBchart,去了那里?十万火急(up 有分
- TQuery和TStringgrid 组合的闪烁问题
- dbexpress执行存储过程错误
ExlApp.Visible:=true; 试试,看能不能存.有时不可见的不好操作
procedure TFrmOrderFind.Excel1Click(Sender: TObject);
var
ExcelApplication1:TExcelApplication;
ExcelWorksheet1:TExcelWorksheet;
ExcelWorkbook1:TExcelWorkbook;
begin
try
begin
ExcelApplication1:=TExcelApplication.Create(Application);
ExcelWorksheet1:=TExcelWorksheet.Create(Application);
ExcelWorkbook1:=TExcelWorkbook.Create(Application);
ExcelApplication1.Connect;
end;
except
ShowMessage('没有安装EXCEL2000!!!');
exit;
end;
ExcelApplication1.Workbooks.Add(EmptyParam,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
ExcelWorksheet1.Cells.item[1,1]:='11';
ExcelWorksheet1.Cells.item[1,2]:='12';
ExcelWorksheet1.Cells.item[1,3]:='13';
//ExcelApplication1.Visible[0]:=true; //可以让其不可见
ExcelApplication1.Save(ExtractFilePath(application.ExeName)+'myexlttt1.xls');
//上面哪一句会弹出一个对话框来,建议最好不要使用上面的哪一句;
//保存通通用下面这一句,我刚写的代码,在2003server测试通过.
ExcelWorksheet1.SaveAs(ExtractFilePath(application.ExeName)+'myexlttt2.xls');
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
ExcelApplication1.Free;
ExcelWorksheet1.Free;
ExcelWorkbook1.Free;
end;