我的代码是这样的(adoquery1是连接数据库的查询,adoquery2是连接excel的查询)try
sFileName := OpenDialog1.FileName;
ADOConnection2.Connected := False; //注意这里 连接 EXCEL 的参数 //关键是这里
ADOConnection2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended Properties="Excel 8.0;IMEX=1";Persist Security Info=False';
ADOConnection2.Connected := True;
//showmessage('连接execl成功');
sl := TStringList.Create;
ADOConnection2.GetTableNames(sl); // 记住 Excel 文件的 底部 必须是 sheet1 否则不能导入
sTableName := sl[0];
//showmessage(sTableName);
if Pos('$', sTableName) > 0 then sTableName := '[' + sTableName + ']'; ADOquery2.Close;
ADOquery2.SQL.Clear;
ADOquery2.SQL.Text := 'SELECT * FROM ' + sTableName;
//showmessage(ADOquery2.SQL.Text);
ADOquery2.Open;
sl.Free; ADOquery1.Close;
ADOquery1.Sql.Text := 'SELECT top 1 * FROM data2011 where 1=0'; //打开 空记录表....这里可以用 insert,不用append
//showmessage(ADOquery1.Sql.Text);
ADOquery1.Open; //根据自己习惯 做吧...
//该语句用来执行Query1中的SQL命令语句, 如果执行查询从数据库中获得查询结果,查询结果会在数据网格DBGrid1中显示出来。
if ADOquery2.RecordCount > 0 then
begin ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do //
begin
ADOquery1.Append;
ADOquery1.FieldValues['商户名']:=trim(ADOquery2.FieldValues['商户名']);
ADOquery1.FieldValues['分子公司']:=trim(ADOquery2.FieldValues['分子公司']);
ADOquery1.FieldValues['成功笔数(不含跨行)']:=trim(ADOquery2.FieldValues['成功笔数(不含跨行)']);
ADOquery1.FieldValues['成功金额(不含跨行)']:=trim(ADOquery2.FieldValues['成功金额(不含跨行)']);
ADOquery1.FieldValues['跨行发送银行笔数']:=trim(ADOquery2.FieldValues['跨行发送银行笔数']);
ADOquery1.FieldValues['跨行发送银行金额']:=trim(ADOquery2.FieldValues['跨行发送银行金额']);
ADOquery1.FieldValues['应收收入']:=trim(ADOquery2.FieldValues['应收收入']);
ADOquery1.Post; ADOquery2.Next;
end; end; MessageBox(Handle,'导入完成!','完成!',MB_OK+MB_ICONINFORMATION);
except
MessageBox(Handle,'失败!','信息!',MB_OK+MB_ICONINFORMATION); end;end;运行后没报错,但导入时出现ADOquery2.FieldValues['成功笔数(不含跨行)'])等均提示not found 成功笔数(不含跨行)等错误。跨行发送银行笔数'和跨行发送银行金额也是这个错误。我找了半天才发现需要导入的excel的列名不是前面有空格,就是后面有空格,请问如何预处理这些EXCEL的列名然后在导入。
sFileName := OpenDialog1.FileName;
ADOConnection2.Connected := False; //注意这里 连接 EXCEL 的参数 //关键是这里
ADOConnection2.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended Properties="Excel 8.0;IMEX=1";Persist Security Info=False';
ADOConnection2.Connected := True;
//showmessage('连接execl成功');
sl := TStringList.Create;
ADOConnection2.GetTableNames(sl); // 记住 Excel 文件的 底部 必须是 sheet1 否则不能导入
sTableName := sl[0];
//showmessage(sTableName);
if Pos('$', sTableName) > 0 then sTableName := '[' + sTableName + ']'; ADOquery2.Close;
ADOquery2.SQL.Clear;
ADOquery2.SQL.Text := 'SELECT * FROM ' + sTableName;
//showmessage(ADOquery2.SQL.Text);
ADOquery2.Open;
sl.Free; ADOquery1.Close;
ADOquery1.Sql.Text := 'SELECT top 1 * FROM data2011 where 1=0'; //打开 空记录表....这里可以用 insert,不用append
//showmessage(ADOquery1.Sql.Text);
ADOquery1.Open; //根据自己习惯 做吧...
//该语句用来执行Query1中的SQL命令语句, 如果执行查询从数据库中获得查询结果,查询结果会在数据网格DBGrid1中显示出来。
if ADOquery2.RecordCount > 0 then
begin ADOquery2.First;
for i := 1 to ADOquery2.RecordCount do //
begin
ADOquery1.Append;
ADOquery1.FieldValues['商户名']:=trim(ADOquery2.FieldValues['商户名']);
ADOquery1.FieldValues['分子公司']:=trim(ADOquery2.FieldValues['分子公司']);
ADOquery1.FieldValues['成功笔数(不含跨行)']:=trim(ADOquery2.FieldValues['成功笔数(不含跨行)']);
ADOquery1.FieldValues['成功金额(不含跨行)']:=trim(ADOquery2.FieldValues['成功金额(不含跨行)']);
ADOquery1.FieldValues['跨行发送银行笔数']:=trim(ADOquery2.FieldValues['跨行发送银行笔数']);
ADOquery1.FieldValues['跨行发送银行金额']:=trim(ADOquery2.FieldValues['跨行发送银行金额']);
ADOquery1.FieldValues['应收收入']:=trim(ADOquery2.FieldValues['应收收入']);
ADOquery1.Post; ADOquery2.Next;
end; end; MessageBox(Handle,'导入完成!','完成!',MB_OK+MB_ICONINFORMATION);
except
MessageBox(Handle,'失败!','信息!',MB_OK+MB_ICONINFORMATION); end;end;运行后没报错,但导入时出现ADOquery2.FieldValues['成功笔数(不含跨行)'])等均提示not found 成功笔数(不含跨行)等错误。跨行发送银行笔数'和跨行发送银行金额也是这个错误。我找了半天才发现需要导入的excel的列名不是前面有空格,就是后面有空格,请问如何预处理这些EXCEL的列名然后在导入。
fields[1]是什么呢。。我没用过?这样改导入时程序如何知道该哪个字段导入哪个SQL的列中呢还有我建数据库的时候所有的列都是nvarchar[255]型,转换为string会不会出现数据转换错误。。
谢谢。
像“阳光人寿保险股份有限公司四川分公司??”,“?? 5,491.00”等这样的数据。。这些数据如果再导出到一张EXCEL,这个EXCEL根本没法用。。哎请问下如何去除excel各列数据中的空格,谢谢。因为这些?号就是空格,导入到数据库后就成了?号。真悲剧。。谁能提供个处理excel空格的源代码格外加分吧。呵呵。。大家帮帮忙。谢谢。
begin ADOquery2.First;
ADOquery2.Next;//第二行才是数据
for i := 1 to ADOquery2.RecordCount do //
begin
ADOquery1.Append;
ADOquery1.FieldByName('商户名').AsString:=trim(ADOquery2.FieldByName('F1').AsString);//F1就是字段1,是第一个字段,也就是'商户名'那一列;
ADOquery1.FieldByName('分子公司').AsString:=trim(ADOquery2.FieldByName('F2').AsString);//字段2['分子公司']);
ADOquery1.FieldByName('[成功笔数(不含跨行)]'):=trim(ADOquery2.FieldByName('F3').AsString);//字段3['成功笔数(不含跨行)']);你字段名里带有()所以需要有[]来确定字段名,你可以用你的方式导入,但是字段名是一定要有[]的
.... ADOquery1.Post; ADOquery2.Next;
end; end;