读取excel文件,如果某个单元格的内容为空,就报错,急 ADOQuery_Insert.Parameters.ParamValues['v_id'] := v_excel.workbooks[1].sheets[1].cells[i,1]如果这个单元格的内容为空,就报错:delphi 参数?_1没有默认值,怎么避免这种错误? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用VarIsNull判断一下有可能出现空值的字段。不过按道理ParamValues也是一个Variant,不该存在出错的理由,出错应该是错在别的地方。 最后自己解决的。用VarIsNull和VarIsEmpty判断结果不知道为什么都是空,下面把我的完整代码贴出来,供大家参考:procedure TImportEmployeeForm.btnImportClick(Sender: TObject);var v_excel :Variant; aColumns,aRows : Integer; i,j : Integer; v_var : variant;begin if Edit1.Text='' then begin Application.MessageBox('请选择导入文件及所在路径!','提示框', MB_OK + MB_ICONINFORMATION); exit; end; if FileExists(OpenDialog1.FileName)=false then begin Application.MessageBox('文件路径不正确,请重新输入!','错误框', MB_OK + MB_ICONERROR); exit; end; if Application.MessageBox('确定导入员工信息吗?此操作将删除原有员工信息!','确认框', MB_OKCANCEL + MB_ICONINFORMATION)=ID_OK then begin v_excel := CreateOleObject('Excel.Application');//创建OLE对象 try v_excel.workBooks.Open(OpenDialog1.FileName); aColumns:= v_excel.WorkSheets[1].UsedRange.Columns.Count; // 列数 aRows := v_excel.WorkSheets[1].UsedRange.Rows.Count; // 行数 ProgressBar1.Position := 0; ProgressBar1.Max := aRows; ADOQuery_Del.Close; ADOQuery_Del.ExecSQL; ADOQuery_Insert.Close; for i:=2 to aRows do begin v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,1]); if v_var <> '' then ADOQuery_Insert.Parameters.ParamValues['v_id'] := v_excel.workbooks[1].sheets[1].cells[i,1] else continue; v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,2]); if v_var <> '' then ADOQuery_Insert.Parameters.ParamValues['v_name'] := v_var else ADOQuery_Insert.Parameters.ParamValues['v_name'] := ''; ADOQuery_Insert.ExecSQL; ProgressBar1.Position := i; end; Application.MessageBox(PAnsiChar('导入结束,共导入了'+IntToStr(aRows-1)+'名员工信息!'),'提示框', MB_OK + MB_ICONINFORMATION); v_excel.workbooks.close; finally v_excel.quit; end; end; 关于创建服务程序的问题。 delphi控制word模板的问题 制作好的组件,把它拖到FORM窗体,在FORM里面它没有图标,这个怎么解决? 动态报表遇到的问题(连开三贴,共300分求解决) 读书建议。 FROM FOXNT 听大家的看法:一个不真的事实...... 十几个字段的查询结果应该用什么容器显示啊 delphi中强制转换为字符串的函数是什么? 请各位高手帮我解释这段关于排序dbgrid.dataset 记录的代码,散分 急急急!!请问各位大虾在delphi中如何执行一(*.exe)文件??? dbexpress执行存储过程错误 用Delphi写的DLL用C#怎么调用?
procedure TImportEmployeeForm.btnImportClick(Sender: TObject);
var
v_excel :Variant;
aColumns,aRows : Integer;
i,j : Integer;
v_var : variant;
begin
if Edit1.Text='' then
begin
Application.MessageBox('请选择导入文件及所在路径!','提示框', MB_OK + MB_ICONINFORMATION);
exit;
end; if FileExists(OpenDialog1.FileName)=false then
begin
Application.MessageBox('文件路径不正确,请重新输入!','错误框', MB_OK + MB_ICONERROR);
exit;
end; if Application.MessageBox('确定导入员工信息吗?此操作将删除原有员工信息!','确认框', MB_OKCANCEL + MB_ICONINFORMATION)=ID_OK then
begin
v_excel := CreateOleObject('Excel.Application');//创建OLE对象
try
v_excel.workBooks.Open(OpenDialog1.FileName);
aColumns:= v_excel.WorkSheets[1].UsedRange.Columns.Count; // 列数
aRows := v_excel.WorkSheets[1].UsedRange.Rows.Count; // 行数 ProgressBar1.Position := 0;
ProgressBar1.Max := aRows; ADOQuery_Del.Close;
ADOQuery_Del.ExecSQL; ADOQuery_Insert.Close;
for i:=2 to aRows do
begin
v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,1]);
if v_var <> '' then
ADOQuery_Insert.Parameters.ParamValues['v_id'] := v_excel.workbooks[1].sheets[1].cells[i,1]
else
continue; v_var := VarToStr(v_excel.workbooks[1].sheets[1].cells[i,2]);
if v_var <> '' then
ADOQuery_Insert.Parameters.ParamValues['v_name'] := v_var
else
ADOQuery_Insert.Parameters.ParamValues['v_name'] := '';
ADOQuery_Insert.ExecSQL;
ProgressBar1.Position := i;
end;
Application.MessageBox(PAnsiChar('导入结束,共导入了'+IntToStr(aRows-1)+'名员工信息!'),'提示框', MB_OK + MB_ICONINFORMATION);
v_excel.workbooks.close;
finally
v_excel.quit;
end;
end;