代码是这样的
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
解决方案 »
- 讨论一下数据库管理软件模块化开发问题
- 帮帮看一下,谁能告诉我:如何用流加载HTML网页中的图片!
- 高手请进,帮帮小弟!关于系统设计的问题
- 能不能用qreport做出这样的表格
- 急!!! 怎样对HTML文件进行解析。 完了再开帖给分
- fastreport,如何打印超市标价签,谢谢
- 如何像QQ那样实现在文本输入框中插入图片?
- 请问高手,我在一个没有窗体的unit中写个生成窗体的过程,其中事件调用本unit中其他过程,但编译不了,为何?谢谢,哪个unit作为主程序调用的
- 各位大虾:十万火急!!c语言中的异或函数是什么?
- 关于三层数据库的问题
- indy 文件流 文件传送
- 如何打开后缀是htf, bsp,和map的文件呀
1234/ (读得出)
1234/5321/ (读得出)
1453/ (读得出)
4234/5345/1341/ (读得出)
可是这样原来的Execl文件改动太大,我想要更好的解决方法