B
bozhilong
Unregistered / Unconfirmed
GUEST, unregistred user!
EXCEL2000文件:
名称 单价1 单价2 单价3 单价四 单价五 单价6 单价7 单价8 单价9
精制棉 10 11 12 13 14 15 16 17 18
玉米淀粉 0 13 14 15 16 17 18
木桨 3 4 5 5
程序原码:
procedure TFmCP.ToolButton1Click(Sender: TObject);
var
bbxls: TStrings;
ExcelApp: Variant;
ADOConn: TADOConnection ;
ADOtemp: TADOQuery;
S : string;
begin
if OpenDialog1.Execute then begin
S := extractfilename(OpenDialog1.FileName);
if (S = '物资转让.xls') or (S = '新型辅料.xls') or (S = '包衣粉.xls') then
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Open(OpenDialog1.FileName);
ExcelApp.ActiveWorkBook.Save;
ExcelApp.Quit;
varclear(ExcelApp);
OpenDialog1.FileName := extractfilename(OpenDialog1.FileName); //去文件路径
OpenDialog1.FileName :=
leftstr(OpenDialog1.FileName,length(WideString(OpenDialog1.FileName))-4); // uses strutils 去文件后缀名
{打开保存一次EXCEL文件,为何要保存一次呢?如果是其它程序用第三方控件导出的EXCEL文件,最好做此步,否则容发生错误}
bbxls :=TStringList.Create;
ADOConn :=TADOConnection.Create(FmCP);
ADOConn.LoginPrompt := False;
ADOtemp :=TADOQuery.Create(FmCP);
ADOtemp.Connection := ADOConn;
{ADOConn是数据库连接控件ADOConnection}
ADOConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=true';
ADOConn.Connected := True;
ADOConn.GetTableNames(bbxls);{将EXCEL文件中的表格名单赋值于a_cc变量}
ADOtemp.Close;
ADOtemp.sql.text:='select * from ['+bbxls[0]+']';//得到EXCEL文件中的第一个表格的数据
ADOtemp.open;
while not ADOtemp.Eof do
begin
{adoquery1是操作ACCESS或SQL数据表的,XF_A是姓名 xf_b 是年龄 }
fmData.ADOCP.Append;
fmData.ADOCP.FieldByName('名称').AsString := ADOtemp.FieldValues['名称'];
fmData.ADOCP.FieldByName('类型').AsString := OpenDialog1.FileName;
fmData.ADOCP.FieldByName('单价1').AsFloat := ADOtemp.FieldByName('单价1').AsFloat;
fmData.ADOCP.FieldByName('单价2').AsFloat := ADOtemp.FieldByName('单价2').AsFloat;
fmData.ADOCP.FieldByName('单价3').AsFloat := ADOtemp.FieldByName('单价3').AsFloat;
fmData.ADOCP.FieldByName('单价4').AsFloat := ADOtemp.FieldByName('单价4').AsFloat;
fmData.ADOCP.FieldByName('单价5').AsFloat := ADOtemp.FieldByName('单价5').AsFloat;
fmData.ADOCP.FieldByName('单价6').AsFloat := ADOtemp.FieldByName('单价6').AsFloat;
fmData.ADOCP.FieldByName('单价7').AsFloat := ADOtemp.FieldByName('单价7').AsFloat;
fmData.ADOCP.FieldByName('单价8').AsFloat := ADOtemp.FieldByName('单价8').AsFloat;
fmData.ADOCP.FieldByName('单价9').AsFloat := ADOtemp.FieldByName('单价9').AsFloat;
ADOtemp.next;
end;
fmData.ADOCP.post;
adoconn.Connected:=false;
ADOtemp.close;
ADOConn.Free;
ADOtemp.Free;
bbxls.Free;
varclear(ExcelApp);
messagebox(handle,'数据处理完毕','提示',MB_OK+MB_ICONINFORMATION);
end else
messagebox(handle,'导入文件必须是类型文件名!','提示',MB_OK+MB_ICONINFORMATION);
end;
end;
程序运行后,总是从给‘单价4’付值时,提示找不到‘单价4’这列,这是怎么回事啊,
为什么‘单价1-单价3’都正常呢?
请各位大虾帮帮忙吧。
名称 单价1 单价2 单价3 单价四 单价五 单价6 单价7 单价8 单价9
精制棉 10 11 12 13 14 15 16 17 18
玉米淀粉 0 13 14 15 16 17 18
木桨 3 4 5 5
程序原码:
procedure TFmCP.ToolButton1Click(Sender: TObject);
var
bbxls: TStrings;
ExcelApp: Variant;
ADOConn: TADOConnection ;
ADOtemp: TADOQuery;
S : string;
begin
if OpenDialog1.Execute then begin
S := extractfilename(OpenDialog1.FileName);
if (S = '物资转让.xls') or (S = '新型辅料.xls') or (S = '包衣粉.xls') then
begin
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.WorkBooks.Open(OpenDialog1.FileName);
ExcelApp.ActiveWorkBook.Save;
ExcelApp.Quit;
varclear(ExcelApp);
OpenDialog1.FileName := extractfilename(OpenDialog1.FileName); //去文件路径
OpenDialog1.FileName :=
leftstr(OpenDialog1.FileName,length(WideString(OpenDialog1.FileName))-4); // uses strutils 去文件后缀名
{打开保存一次EXCEL文件,为何要保存一次呢?如果是其它程序用第三方控件导出的EXCEL文件,最好做此步,否则容发生错误}
bbxls :=TStringList.Create;
ADOConn :=TADOConnection.Create(FmCP);
ADOConn.LoginPrompt := False;
ADOtemp :=TADOQuery.Create(FmCP);
ADOtemp.Connection := ADOConn;
{ADOConn是数据库连接控件ADOConnection}
ADOConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + OpenDialog1.FileName + ';Extended Properties=excel 8.0;Persist Security Info=true';
ADOConn.Connected := True;
ADOConn.GetTableNames(bbxls);{将EXCEL文件中的表格名单赋值于a_cc变量}
ADOtemp.Close;
ADOtemp.sql.text:='select * from ['+bbxls[0]+']';//得到EXCEL文件中的第一个表格的数据
ADOtemp.open;
while not ADOtemp.Eof do
begin
{adoquery1是操作ACCESS或SQL数据表的,XF_A是姓名 xf_b 是年龄 }
fmData.ADOCP.Append;
fmData.ADOCP.FieldByName('名称').AsString := ADOtemp.FieldValues['名称'];
fmData.ADOCP.FieldByName('类型').AsString := OpenDialog1.FileName;
fmData.ADOCP.FieldByName('单价1').AsFloat := ADOtemp.FieldByName('单价1').AsFloat;
fmData.ADOCP.FieldByName('单价2').AsFloat := ADOtemp.FieldByName('单价2').AsFloat;
fmData.ADOCP.FieldByName('单价3').AsFloat := ADOtemp.FieldByName('单价3').AsFloat;
fmData.ADOCP.FieldByName('单价4').AsFloat := ADOtemp.FieldByName('单价4').AsFloat;
fmData.ADOCP.FieldByName('单价5').AsFloat := ADOtemp.FieldByName('单价5').AsFloat;
fmData.ADOCP.FieldByName('单价6').AsFloat := ADOtemp.FieldByName('单价6').AsFloat;
fmData.ADOCP.FieldByName('单价7').AsFloat := ADOtemp.FieldByName('单价7').AsFloat;
fmData.ADOCP.FieldByName('单价8').AsFloat := ADOtemp.FieldByName('单价8').AsFloat;
fmData.ADOCP.FieldByName('单价9').AsFloat := ADOtemp.FieldByName('单价9').AsFloat;
ADOtemp.next;
end;
fmData.ADOCP.post;
adoconn.Connected:=false;
ADOtemp.close;
ADOConn.Free;
ADOtemp.Free;
bbxls.Free;
varclear(ExcelApp);
messagebox(handle,'数据处理完毕','提示',MB_OK+MB_ICONINFORMATION);
end else
messagebox(handle,'导入文件必须是类型文件名!','提示',MB_OK+MB_ICONINFORMATION);
end;
end;
程序运行后,总是从给‘单价4’付值时,提示找不到‘单价4’这列,这是怎么回事啊,
为什么‘单价1-单价3’都正常呢?
请各位大虾帮帮忙吧。