总共130分~~DELPHI对Excel的操作问题:怎样把复杂Excel的数据保存到SQL数据库(100分)

  • 主题发起人 主题发起人 aocandy
  • 开始时间 开始时间
A

aocandy

Unregistered / Unconfirmed
GUEST, unregistred user!
DELPHI对Excel的操作问题:怎样把复杂Excel的数据保存到SQL数据库
我想将一个复杂Excel表的全部数据保存到SQL数据库中,将来用反相方法将SQL数据库里的数据逐条反写到Excel表,这样可以实现么?我做了一个简单的程序
while i3<=i1 do
begin
while i4<=i2 do
begin
wkSheet2.Cells.Item[i3,i4]:=wkSheet.Cells.Item[i3,i4];
inc(i4);
end;
inc(i3);
end;
wkSheet和wkSheet2分别对应着结构相同,数据内容不通的两个Excel表,就是说一个有数据一个是空数据
i1是表一的总行数,i2是表一的总行列数
关键是这里
wkSheet2.Cells.Item[i3,i4]:=wkSheet.Cells.Item[i3,i4];
这样应该是将表中相同位置的数据进行COPY,可是操作后,空表的数据没有任何变化,而且,在上面的循环中还发生了异常
请大虾帮忙指教,看有没有更好的办法!
 
给你个例子做参考吧(要uses comobj):

var ExcelApp:Variant;
begin
ExcelApp:=CreateOleObject('Excel.Application');
//ExcelApp.visible:=true;
ExcelApp.Caption:='应用程序调用 Microsoft Excel';
ExcelApp.WorkBooks.Add; //新增工作簿
//ExcelApp.workBooks.Open('C:/My Documents/Ca09lin1.xls'); //打开已存在工作簿
ExcelApp.Worksheets[2].activate; //打开第2个工作表
//ExcelApp.WorkSheets['第四章'].activate; //打开名为第四章的工作表
ExcelApp.Cells[1,4].Value:='第一行第四列';
ExcelApp.Cells[1,5].Value:='第一行第五列';
ExcelApp.ActiveSheet.Columns[4].ColumnWidth:=15;
ExcelApp.ActiveSheet.Rows[1].RowHeight:=15;
//ExcelApp.WorkSheets[1].Rows[8].PageBreak:=1; //设置分页符,但似无效
//Excelapp.ActiveSheet.Rows[8].PageBreak:=1; //同上
ExcelApp.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;
ExcelApp.ActiveSheet.Range['B3:D4'].Borders[1].Weight:=3;
ExcelApp.ActiveSheet.Range['B3:D4'].Borders[3].Weight:=3;
ExcelApp.ActiveSheet.Range['B3:D4'].Borders[4].Weight:=3;
//ExcelApp.ActiveSheet.Range['B3:D4'].Borders[5].Weight:=3; //会直接在范围内的各Cell内加上斜杠|
//ExcelApp.ActiveSheet.Range['B3:D4'].Borders[6].Weight:=3; //与上句类似
//Bordrs:1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )
ExcelApp.Cells[3,2].Value:='三行二列';
ExcelApp.Cells[3,3].Value:='三行三列';
ExcelApp.Cells[3,4].Value:='三行四列';
ExcelApp.Cells[4,2].Value:='四行二列';
ExcelApp.Cells[4,3].Value:='四行三列';
ExcelApp.Cells[4,4].Value:='四行四列';
//ExcelApp.ActiveSheet.Range['B3:D4'].Value.CopyToClipBoard;
ExcelApp.activeSheet.Cells[1,4].ClearContents; //清除一行四列的内容,activeSheet可以省略
Excelapp.Rows[3].font.Name:='隶书'; //这里Rows前省略了activeSheet,但针对也只是当前工作表而非整个工作簿
ExcelApp.Rows[3].font.Color:=clBlue;
ExcelApp.Rows[3].Font.Bold:=True;
ExcelApp.Rows[3].Font.UnderLine:=True;
ExcelApp.Range['B3:D4'].Copy;
RichEdit1.PasteFromClipboard;
//ExcelApp.ActiveSheet.PageSetup.CenterFooter:='第$P页';
//所有页面设置(PageSetup的属性)都不能进行,不知为何
//ExcelApp.ActiveSheet.PrintPreview; //打印预览
//ExcelApp.ActiveSheet.PrintOut; //直接打印输出
//if not ExcelApp.ActiveWorkBook.Saved then //工作表保存:
// ExcelApp.ActiveSheet.PrintPreview;
//ExcelApp.SaveAs( 'C:/Excel/Demo1.xls' ); //工作表另存为
ExcelApp.ActiveWorkBook.Saved := True; // 放弃存盘
ExcelApp.WorkBooks.Close; //关闭工作簿
ExcelApp.Quit; //退出 Excel
end;
 
ExcelApp:=CreateOleObject('Excel.Application');
这里怎么提示我:
Undeclared idenfifier:'CreateOleObject'
怎么解决
 
我要实现的并不是用什么工具解决了就行了,
要是用SQL的工具直接倒,我干吗还问阿,
我最终的实现目标是:将excel表的数据加密
后存入SQL数据库,以后需要将这些数据传输
倒网络上,在以后,还有客户端软件从网络上
把这些数据读回来,重新显示在excel表里,我
这样的要求能实现么~那位大哥能给各工程例子好么?
 
把ComObj单元加到uses中,CreateOleObject就可以用了
你的目标是可以实现的,给你一个操作Excel的例子看看吧
以下是把stringgrid中的数据存在到一个excel表中
var
i,j:integer;
sheet:variant;
excelapp:variant;

begin

excelapp:=MainForm.GetExcelObject('Excel.Application');
excelapp.visible:=true;
excelapp.workbooks.add;
sheet:=excelapp.ActiveWorkBook.ActiveSheet;
sheet.cells[1,2].font.color:=clblue;
sheet.cells[1,2].font.size:=16;
sheet.cells[1,2].font.bold:=true;
sheet.cells[1,2]:='统计报告';
sheet.cells[3,1].font.size:=9;
sheet.cells[3,1]:='统计范围:'+datetostr(DatePicker1.Date)+' '+timetostr(TimePicker1.time)
+'至'+datetostr(DatePicker2.Date)+' '+timetostr(TimePicker2.time);
// sheet.cells[3,10]:='打印日期: '+datetostr(date());
//转表格
for i:=0 to StringGrid1.RowCount-1 do
for j:=0 to stringgrid1.ColCount-1 do
begin
sheet.cells[i+4,j+1]:=stringgrid1.Cells[j,i];
sheet.cells[i+4,j+1].borders.linestyle:=1;

end;
end;
 
如果使用server中的组件excelapplication,
在win2000下好象不可以excelapplcation.connect失败,why
 
后退
顶部