操作Excel5.0。参与有分。最好能给点代码,参考下。 ( 积分: 200 )

  • 主题发起人 主题发起人 q_sand
  • 开始时间 开始时间
Q

q_sand

Unregistered / Unconfirmed
GUEST, unregistred user!
我想操作Excel5.0,
问题1 如何操作
问题2 能导成Access的码?
Excel5.0 ,ADO不能用,ExcelWorkBook好像也不行,怎么操作阿?救命阿。
 
操纵excel5.0的方式:
一是用把excel当作数据库打开;二是直接读取excel文件,向里面插入数据
生成access比较麻烦,但基本原理是:读取excel的所有列标题,根据列标题,生成access的sql语句,根据sql语句,创建数据库和数据表
 
To wzquan
把excel当作数据库打开的话,在Excel5.0内不显示,区域选择 自定义的表名称。也就没办法具体操作。因为,Excel5.0时还没有ADO技术。。。。
对于第二种方法,请具体说说。
 
用ole可灵活控制excel,你想要的都能实现。参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517 内有对execl的操作
 
对于第一种方法,你可以先把excel中的数据读到一个stringgrid中,在stringgrid中编辑,然后写入excel中.
第二种方法:我给你贴段程序创建accesss数据库和数据表的代码,你自己看看。
Procedure TSubmitDataForm.CreateAdoDatabase(databasename:String;DataPath:String);
Var
myCreateADo:TAdoquery;
cat:OleVariant;
myPath:String;
I:Integer;
myStr,myStr1,myStr2,myStr3,myStr4,myStr5,myStr6,myStr7,myStr8,myStr9,myStr10:String;
myList1,myList2,myList3,myList4,myList5,myList6,myList7,myList8,myList9:TStringList;
myList10,myList11:TStringList;
begin

try
If Copy(DataPath,length(DataPath)-1,1)<>'/' then

DataPath:=DataPath+'/';
DataPath:=DataPath+DataBaseName+Trim(G_Nd)+'.mdb';
If Fileexists(DataPath) then
//如果存在,则删除
deletefile(DataPath);
cat:=CreateOleObject('ADOX.Catalog');
cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataPath);
//Cat.Free;
myList1:=TStringList.Create;
myList2:=TStringList.Create;
myList3:=TStringList.Create;
myList4:=TStringList.Create;
myList5:=TStringList.Create;
myList6:=TStringList.Create;
myList7:=TStringList.Create;
myList8:=TStringList.Create;
myList9:=TStringList.Create;
myList10:=TStringList.Create;
myList11:=TStringList.Create;
myList1.clear;
mylist2.Clear;
myList3.clear;
mylist4.Clear;
myList5.Clear;
myList6.Clear;
myList7.clear;
myList8.clear;
myList9.Clear;
myList10.Clear;
myList11.Clear;
myStr:='';
myStr1:='';
myStr2:='';
myStr3:='';
myStr4:='';
myStr5:='';
myStr6:='';
myStr7:='';
myStr8:='';
myStr9:='';
myStr10:='';
//==================区块数据表
myList1.add('Create Table qkTable ');
//创建表
myList1.Add('(lb Int Not Null default 0,');
//类别
myList1.add('Qk Char(40) Not Null,');
//类别名称
myList1.add('Xylb Char(50),');
//效益类别
myList1.add('qsny char(10) Not Null,');
//起始年月
myList1.add('Zzny Char(10) Not Null,');
//中止年月

myList1.add('yclx Char(40) Not Null,');
//油藏类型
myList1.add('xsyp Char(40) Not Null,');
//销售油品
myList1.Add('ssyt char(40),');
//所属油田
myList1.add('Dyhymj Decimal(20,4) not null default 0,');
//动用含油面积
myList1.add('DyDzcl Decimal(20,4) not Null default 0,');
//动用地质储量
myList1.Add('DyKccl Decimal(20,4) Not Null default 0,');
//动用可采储量
myList1.add('ycZs Decimal(20,4) Not Null Default 0,');
// 油藏中深
myList1.add('Pjstl Decimal(20,4) Not Null Default 0,');
//平均渗透率
myList1.add('dxyynd Decimal(20,4) Not Null Default 0,');
//地下原油年度
myList1.add('yjzs Decimal(20,4) Not Null Default 0,');
//油井总数
myList1.add('yjkjs Decimal(20,4) Not Null Default 0,');
//油井开井数
myList1.add('sjzs Decimal(20,4) Not Null Default 0,');
//水井总数
myList1.add('sjkjs Decimal(20,4) Not Null Default 0,');
//水井开井数
myList1.add('zqjzs Decimal(20,4) Not Null Default 0,');
//注汽井总数
myList1.add('zqjkjs Decimal(20,4) Not Null Default 0,');
//注汽井开井数
myList1.add('ljcyl Decimal(20,4) Not Null Default 0,');
//累计产油量
myList1.add('zql Decimal(20,4) Not Null Default 0,');
//注汽量
myList1.add('ljzql Decimal(20,4) Not Null Default 0,');
//累计注汽量
myList1.add('zsl Decimal(20,4) Not Null Default 0,');
//注水量
myList1.add('ljzsl Decimal(20,4) Not Null Default 0,');
//累计注水量
myList1.Add('dwmc Char(60) Not Null default '+DatabaseName);
//单位名称
myList1.Add(')');
For I:=0 to myList1.Count-1do

myStr:=myStr+myList1.Strings;

//下面是创建数据库的程序
//创建区块表
myCreateAdo:=TAdoquery.Create(self);
GAdoLink:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataPath;
myCreateAdo.ConnectionString:=GAdoLink;
//创建QkTable
myCreateAdo.SQL.clear;
myCreateAdo.SQL.append(myStr);
myCreateAdo.ExecSQL;
myCreateAdo.Close;
myCreateAdo.SQL.Text:='ALTER TABLE [QkTable] ADD CONSTRAINT [Qktable] PRIMARY KEY (lb,qk,qsny,zzny)';
myCreateAdo.ExecSQL;
myCreateAdo.Close;
 
我发现连接Excel5.0后,表名存在,只不过是乱码,通过下面语句导入到DataSet解决了,
with ADOConnection1do

begin

Connected := True;
Execute('select * into 222 from [Excel 5.0;
DATABASE=F:/2].[±¨±í]');
//2
showMessage('导入成功。');
end;

完结,谢谢各位对我的启发。
 
谢谢各位
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部