代码是这样的
function TForm1.LoadExcel(AFileName: String): Boolean;
var
vExcel: Variant;
i, RowCount: integer;
instRecord: TInstructRecord;
sMessage,sTemp: string;
begin
vExcel := CreateOleObject('Excel.Application'); //创建应用对象
vExcel.WorkBooks.Open(AFileName);
RowCount := vExcel.Worksheets[1].UsedRange.Rows.Count; //读行数
qry1.DisableControls();
for i := 2 to RowCount do
begin
instRecord.date := trim(vExcel.Worksheets[1].Cells[i, 1].Value);
instRecord.name := trim(vExcel.Worksheets[1].Cells[i, 10].Value);
instRecord.time := trim(vExcel.Worksheets[1].Cells[i, 11].Value);
instRecord.pass := trim(vExcel.Worksheets[1].Cells[i, 19].Value);
instRecord.prbl := trim(vExcel.Worksheets[1].Cells[i, 20].Value);
end;
begin adoqry1.Open;
adoqry1.Edit;
adoqry1.FieldByName('date').AsString := instRecord.date;
adoqry1.FieldByName('name').AsString := instRecord.name;
adoqry1.FieldByName('time').AsString := instRecord.time;
adoqry1.FieldByName('pass').AsString := instRecord.pass;
adoqry1.FieldByName('prbl').AsString := instRecord.prbl;
adoqry1.Open;
end;
adoqry1.EnableControls;
vExcel.WorkBooks.Close;
vExcel.Quit;
vExcel := Unassigned;
end;
现在有2个问题,第一个就是Execl中同一列有的数据是数字,有的是文本,一部分就读不出来,就算把单元格格式改成一样的也不行,怎么样在尽量不改动execl的情况下把全部数据都读出来.这个问题我在网上发现很多人遇到,可是没有好的解决办法.
比如一列是这样,我全部改成文本格式了: 1234 (读得出)
1234/5321 (读不出)
1453 (读得出)
4234/5345/1341 (读不出)
第二个问题是:在读取完数据,对ADOquery进行赋值的时候,出现错误,提示找不到对应的FIeld ,可我FIeld已经手动添加了,是string类型的,fieldkind为fkInternalCalc
function TForm1.LoadExcel(AFileName: String): Boolean;
var
vExcel: Variant;
i, RowCount: integer;
instRecord: TInstructRecord;
sMessage,sTemp: string;
begin
vExcel := CreateOleObject('Excel.Application'); //创建应用对象
vExcel.WorkBooks.Open(AFileName);
RowCount := vExcel.Worksheets[1].UsedRange.Rows.Count; //读行数
qry1.DisableControls();
for i := 2 to RowCount do
begin
instRecord.date := trim(vExcel.Worksheets[1].Cells[i, 1].Value);
instRecord.name := trim(vExcel.Worksheets[1].Cells[i, 10].Value);
instRecord.time := trim(vExcel.Worksheets[1].Cells[i, 11].Value);
instRecord.pass := trim(vExcel.Worksheets[1].Cells[i, 19].Value);
instRecord.prbl := trim(vExcel.Worksheets[1].Cells[i, 20].Value);
end;
begin adoqry1.Open;
adoqry1.Edit;
adoqry1.FieldByName('date').AsString := instRecord.date;
adoqry1.FieldByName('name').AsString := instRecord.name;
adoqry1.FieldByName('time').AsString := instRecord.time;
adoqry1.FieldByName('pass').AsString := instRecord.pass;
adoqry1.FieldByName('prbl').AsString := instRecord.prbl;
adoqry1.Open;
end;
adoqry1.EnableControls;
vExcel.WorkBooks.Close;
vExcel.Quit;
vExcel := Unassigned;
end;
现在有2个问题,第一个就是Execl中同一列有的数据是数字,有的是文本,一部分就读不出来,就算把单元格格式改成一样的也不行,怎么样在尽量不改动execl的情况下把全部数据都读出来.这个问题我在网上发现很多人遇到,可是没有好的解决办法.
比如一列是这样,我全部改成文本格式了: 1234 (读得出)
1234/5321 (读不出)
1453 (读得出)
4234/5345/1341 (读不出)
第二个问题是:在读取完数据,对ADOquery进行赋值的时候,出现错误,提示找不到对应的FIeld ,可我FIeld已经手动添加了,是string类型的,fieldkind为fkInternalCalc
解决方案 »
- 动态删除动态创建的组件问题
- ado+mssql2000 怎么对两个以上字段作模糊过滤?
- 混乱的关于接口(Interface)的理解!
- WinSight32里面的字体实在是太难看,有没有办法改字体?
- 高分讨论:游戏外挂!~~~~~~~~~
- 如何使用installshiel express for delphi来打包数据库的别名?(十万火急啊!帮助者均给分,不够再加!)
- 如何将edit1中的字符串转为pchar类型
- 高分求MMSYSTEM 方面的中文资料!
- 初学报表,请教一个问题,分很好赚的
- 请高手进来看看,有关MIDAS!!!!!
- indy 文件流 文件传送
- 如何打开后缀是htf, bsp,和map的文件呀
1234/ (读得出)
1234/5321/ (读得出)
1453/ (读得出)
4234/5345/1341/ (读得出)
可是这样原来的Execl文件改动太大,我想要更好的解决方法