• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi读取excel数据

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

从数据库导数据至excel 容易,但要是想把excel 里的数据通过delphi写的程式导入数据库就没那么简单了,并且网上讲的都不全面,没有几个完整可行的方案,以下是我收集的个人认为比较可行的方案,不敢独享,故拿出来供大家学习参考之用!

procedure load(rowCount,colCount:integer; fileName:String; var grid:TStringGrid);
//从Excel中读取数据到 Grid
var
   v:variant;
   i,j:integer;
begin
   grid.RowCount:=rowCount;
   grid.ColCount:=colCount;
   v:=createoleobject('Excel.Application');//创建OLE对象
   try
     form2.show;
     form2.ProgressBar1. 0;
     form2.ProgressBar1.Max :=   65535;
     V.workBooks.Open(fileName);
     //for i:=1 to rowCount do
     for i:=1 to 65535 do
       for j:=1 to colCount do
         //if grid.Cells[j-1,i-1] = '' then break;
         form2.ProgressBar1. i;
         grid.Cells[j-1,i-1]:=v.workbooks[1].sheets[1].cells[i,j];
     v.workbooks[1].close;
   finally
     v.quit;
     form2.close;
   end
end;
{
procedure save(tableName:String;grid:TStringGrid);
// 将 Grid 中的数据保存到 SQL Server 数据表中
var
   valuesStr:string;
   i,j:integer;
begin
   if not CreateTable(tableName,grid.ColCount) then
   begin
     showmessage('Error On CreateTable');
     exit;
   end;
   for i:=1 to grid.RowCount-1 do
   begin
     valuesStr:=inttostr(i)+',';
     for j:=0 to grid.ColCount-1 do
       valuesStr:=valuesStr+Grid.Cells[j,i]+',';
     if not insertone(tableName,valuesStr) then
     begin
       showmessage('Error On Row('+inttostr(i)+')');
       exit;
     end;
   end;
   showmessage('数据导入成功');
end;

function insertone(const tableName, ValuesStr: string): boolean;
// 插入一条记录
var
   tmpstr,s:string;
   p:integer;
begin
   result:=true;
   tmpstr:=ValuesStr;
   with query1 do
   begin
     close;
     sql.Clear;
     sql.Add('insert into '+tableName+' values(');
     s:='';
     while tmpstr<>'' do
     begin
       p:=pos(',',tmpstr);
       s:=s+''''+copy(tmpstr,1,p-1)+''',';
       system.Delete(tmpstr,1,p);
     end;
     s:=copy(s,1,length(s)-1);
     sql.Add(s);
     sql.Add(')');
     try
       execsql;
     except
       result:=false;
     end;
   end;
end;


function CreateTable(const tableName:String; aFieldCount: integer): boolean;
// 创建表
var
   tmpstr:string;
   i:integer;
begin
   result:=true;
   tmpstr:='if exists (select * from sysobjects where '
     +tableName+''') drop table '+tableName+' create table '+tableName+'(';
   for i:=1 to aFieldCount do
     tmpstr:=tmpstr+'F'+inttostr(i)+' varchar(50),';
   delete(tmpstr,length(tmpstr),1);
   tmpstr:=tmpstr+')';
   with query1 do
   begin
     close;
     sql.Clear;
     sql.Add(tmpstr);
     try
       execsql;
     except
       result:=false;
     end;
   end;
end;
   }


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DELPHI如何获取某目录下的所有文件名?发布时间:2022-07-18
下一篇:
关于DELPHIXE8开发安卓,和自己开发的服务端通信发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap