如何从Excel电子表格中提取数据写入Access数据库表形成新的记录?(100分)

  • 主题发起人 主题发起人 RedBaby
  • 开始时间 开始时间
R

RedBaby

Unregistered / Unconfirmed
GUEST, unregistred user!
有多个Excel文件,结构不太一致,如何提取其中的数据写入Access数据库表中的相应字段形成新的记录。
 
用Delphi写一个程序从Excel文件中读入数据然后写到Access中
 
你的excel文件如果比较符合数据库的结构,可以把excel当作数据库来处理。建立odbc的数据员或用ole db驱动写都可以。
 
To:MikeZ
老大,Excel文件非常多的,我想把所有的信息放到一个数据库表里.
 
可以放在一个数据库中,放在一个表中好象不行,结构都不一样吗
 
excel作为数据库的方式:一个文件即一个数据库,一个工作表即一个数据库表。
即使是一个execl文件由于各个工作表的结构不一样,也没法直接些到一个数据库表中,多文件同样。
除非建立一个数据库表包容所有excel的列。

我想知道你的需求究竟是什么,是否要进行文件管理,这样可以在access中加ole object或超级链接字段。
 
To:MikeZ
我就是要建立一个数据库表包容所有excel的列,因为以前用户资料的管理用的是Excel,数据已经很多了,但是我现在
做了一个管理软件,需要把已有的数据导入现在得数据库,拜托.
 
还有一种方法:每个excel表对应一个数据库表,数据库中建立联结表的试图。
 
这个问题很简单。而且大富翁以前相关的贴子也不少。我贴一段我的函数,是把数据集写到
Excel的,是不是觉得离题了,其实没有,因为可以用程序控制Excel文件的任意单元格,
所以用来实现你的目的也很简单。

procedure ExportToExcel(Dataset:TDataset);
var
Range,WorkBook,Sheet,Excel:variant;
CurCol,col,row:integer;
FrmWait:TFrmWait;
begin
Excel:=CreateOleObject('Excel.Application');
FrmWait:=TFrmWait.Create(application);
try
FrmWait.Show;
// Excel.visible:=true;
Application.ProcessMessages;
Excel.DisplayAlerts:=false;
Excel.WorkBooks.Add;
WorkBook:=Excel.WorkBooks[1];
Sheet := WorkBook.WorkSheets[1];
CurCol:=0;
Row:=4; //从第四行,第二列开始输出
for col:=1 to DataSet.FieldCount do //输出标题
if DataSet.Fields[Col-1].Visible then
begin
Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayLabel;
inc(CurCol);
end;
inc(Row); //数据从第五行开始输出

DataSet.DisableControls;
FrmWait.ProgressBar1.Max:=TDataQuery(DataSet).FilterRows;
FrmWait.Label2.Caption:=format('估计用时:%f 秒',[FrmWait.ProgressBar1.Max/40]);
DataSet.First;
while not Dataset.Eof do
begin
CurCol:=0;
for Col:=1 to DataSet.FieldCount do
if DataSet.Fields[Col-1].Visible then
begin
Sheet.Cells[Row,CurCol+2]:=DataSet.Fields[Col-1].DisplayText;
inc(CurCol);
end;
DataSet.Next;
inc(Row);
FrmWait.ProgressBar1.Position:=Row;
FrmWait.Label2.Caption:=format('估计用时:%f 秒',[(FrmWait.ProgressBar1.Max-FrmWait.ProgressBar1.Position)/40]);
if FrmWait.ConFirmQuit then
if YesNoBox('确定要取消当前操作吗?') then
begin
Dataset.EnableControls;
Excel.quit;
exit;
end else FrmWait.ConFirmQuit:=false;
Application.ProcessMessages;
end;

Range:=Sheet.Range['1:65536'];
Range.Verticalalignment:= -4108;//Center; //垂直中对齐
//选择画表格线的范围
Range:=Sheet.Range[Sheet.cells[4,2].Address+':'
+Sheet.cells[Row-1,CurCol+1].Address];
Range.Borders.LineStyle:=1;
Range.Font.Name:='宋体'; //设置字体和大小
Range.Font.Size:=11;

Sheet.Cells.Columns.AutoFit; //自动调整列宽
Excel.visible:=true;
{ try
Sheet.PrintPreView;
finally
Excel.quit;
end;
}
finally
FrmWait.Free;
Dataset.EnableControls;
end;
end;
 
多人接受答案了。
 
后退
顶部