EXCEL导入的问题(20分)

  • 主题发起人 主题发起人 eighteenzl
  • 开始时间 开始时间
E

eighteenzl

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.SpeedButton1Click(Sender: TObject);
const
BeginRow = 3; BeginCol = 1;
var
Excel: OleVariant;
iRow,iCol : integer;
xlsFilename: string;
begin

OpenDialog1.Title := '请选择相应的Excel文件';
OpenDialog1.Filter := 'Excel(*.xls)|*.xls';
if OpenDialog1.Execute then
edit1.Text := OpenDialog1.FileName;

if (trim(edit1.Text) = '') then
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +
MB_ICONWARNING);
exit;
end;
xlsFilename := trim(edit1.Text);
{try
Excel :=CreateOLEObject('Excel.Application');
except
Application.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end; }
Excel.Visible := false;
Excel.WorkBooks.Open(xlsFilename);
try
iRow := BeginRow;
iCol := BeginCol;
while trim(Excel.WorkSheets[2].Cells[iRow,iCol].value) <> '' do begin
with ADOQry_main do begin
Append;
Fields[0].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol].value);
Fields[1].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+1].value);
Fields[2].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+2].value);
Fields[3].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+3].value);
Fields[4].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+4].value);
iRow := iRow + 1;
end;
end;
Excel.Quit;
ADOQry_main.UpdateStatus ;
except
Application.MessageBox('导入数据出错!请检查文件的格式是否正确!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Excel.Quit;
end;
MessageBox(GetActiveWindow(), '数据导入成功!', '警告', MB_OK +
MB_ICONWARNING);
end;
各位大侠,我在写EXECL导入的时候遇到了一些问题,请各位指点一下,谢谢
帮我注释一下,整个过程就 Excel :=CreateOLEObject('Excel.Application');
这条报错,基中CreateOLEObject是这个未申明!
我是没有引用任何函数的.
谢谢!请知道的多多指教!
 
uses ComObj;
 
hs-kill, 那个引用是对了,但是还有其它问题,在运行到while trim(Excel.WorkSheets[2].Cells[iRow,iCol].value) <> '' do begin这个循环语句时报错了,
Project project1.exe raised exception class EOLeException with message'无效索引.' Process stopped, use Step or Run to continue
这些是报错消息的全部.
 
恩......这到是个问题,无效索引我也遇到过.....不过是在用excel直接load一个txt文件时才出现的,像这样直接写cell的情况下还没遇到过.......

我猜测可能是引用为空造成的,你加个判断试试:
try
iRow := BeginRow;
iCol := BeginCol;
if assigned(Excel.WorkSheets[2]) then
while (iRow<=Excel.WorkSheets[2].UsedRange.Rows.Count) and (iCol<=Excel.WorkSheets[2].UsedRange.columns.Count) and (trim(Excel.WorkSheets[2].Cells[iRow,iCol].value) <> '') do begin
with ADOQry_main do begin
Append;
Fields[0].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol].value);
Fields[1].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+1].value);
Fields[2].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+2].value);
Fields[3].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+3].value);
Fields[4].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+4].value);
iRow := iRow + 1;
end;
end;
 
hs.kill 你好啊,
我按你的方法去试了一下还是报同样的错,
你能不能帮我把我的原码简单的注释一下啊
谢谢.!
 
注释?下面这样?

procedure TForm1.SpeedButton1Click(Sender: TObject);
const
BeginRow = 3;//起始行
BeginCol = 1;//起始列
var
Excel: OleVariant;//EXCEL对象
iRow,iCol : integer;
xlsFilename: string;
begin

OpenDialog1.Title := '请选择相应的Excel文件';
OpenDialog1.Filter := 'Excel(*.xls)|*.xls';
if OpenDialog1.Execute then//选择文件
edit1.Text := OpenDialog1.FileName;

if (trim(edit1.Text) = '') then //如果选择的文件为空
begin
MessageBox(GetActiveWindow(), '请正确选择相关路径!', '警告', MB_OK +
MB_ICONWARNING);
exit;
end;
xlsFilename := trim(edit1.Text);
{try
Excel :=CreateOLEObject('Excel.Application');//创建EXCEL对象
except
Application.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end; }
Excel.Visible := false;//设置EXCEL对象不可见
Excel.WorkBooks.Open(xlsFilename);//打开XLS文件
try
iRow := BeginRow;
iCol := BeginCol;
如果当前单元格不为空
while trim(Excel.WorkSheets[2].Cells[iRow,iCol].value) <> '' do begin
with ADOQry_main do begin
Append;//添加记录
Fields[0].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol].value);//将第irow行第icol列单元格中数据写入数据库对应的列
Fields[1].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+1].value);
Fields[2].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+2].value);
Fields[3].Asstring := trim(Excel.WorkSheets[2].Cells[iRow,iCol+3].value);
Fields[4].AsString := trim(Excel.WorkSheets[2].Cells[iRow,iCol+4].value);
iRow := iRow + 1;//下一行
end;
end;
Excel.Quit;//关闭excel对象
ADOQry_main.UpdateStatus ;
except
Application.MessageBox('导入数据出错!请检查文件的格式是否正确!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Excel.Quit;
end;
MessageBox(GetActiveWindow(), '数据导入成功!', '警告', MB_OK +
MB_ICONWARNING);
end;
 
hs.kill谢谢你!
 
后退
顶部