关于DELPHI和EXCEL,很急,请大家帮忙(200分)

  • 主题发起人 主题发起人 seilfer
  • 开始时间 开始时间
S

seilfer

Unregistered / Unconfirmed
GUEST, unregistred user!
现在需要每天将三个相同格式的EXECL表格汇总到一个表,然后在总表上再填加一些合计,平均
率之类的表项,请问该如何做? OLE还是SERVERS,我没做过类似的东西,请大家帮帮忙。详细
说说实现步骤我搜过帖子了,有很多关于EXCEL的问题,但没看到有类似的。能给出相似的例程
最好。如果谁能给出详细的答案,等完成程序后我再给他300分。最近大富翁总上不去,做过
相似程序的人最后能留下联系方式。
 
怎么都没人答啊?问题太简单了吗?我说详细些吧。这是一个铁路局的售票统计,每天各
分局都发一张各个车次的售票情况。然后要将这些数据汇总成一个总表。大体就是把内容都
帖过去再加些统计项合计什么的。还要求能查询任何时间段内每个车次的情况。我初步想法
是要把EXCEL表格导入数据库操作,请各位多提供点意见和帮助啊
 
应该很简单的吧。
就是在Delphi中对Excel的操作问题,在DFW上找过资料?
要么你就干脆在Excel中把文件保存成DBF数据库,然后编程实现DBF数据库的合并,也不难吧。
 
你会不会VBA编程,要是会那就是小菜一蝶了
 
你到www.codelphi.com去用关键字excel搜一下,
哪里有一个全面控制excel的文章
 
to ctx62 谢谢,有几篇文章很有用,正在看。
to 王公子 我在EXCEL中录制了宏但不知道如何在DELPHI中调用。我录制的宏保存到哪了?
如果要在别的EXCEL文件中也能调用这个宏该怎么写? 我把它导入到一个。BAS文件
ExcelApp.Run('InsertRow。BAS');//调用宏 这样写出错。

 
全面控制 Excel

首先创建 Excel 对象,使用ComObj:
var ExcelID: Variant;

ExcelID := CreateOleObject( 'Excel.Application' );

1) 显示当前窗口:
ExcelID.Visible := True;

2) 更改 Excel 标题栏:
ExcelID.Caption := '应用程序调用 Microsoft Excel';

3) 添加新工作簿:
ExcelID.WorkBooks.Add;

4) 打开已存在的工作簿:
ExcelID.WorkBooks.Open( 'C:/Excel/Demo.xls' );

5) 设置第2个工作表为活动工作表:
ExcelID.WorkSheets[2].Activate;

ExcelID.WorksSheets[ 'Sheet2' ].Activate;

6) 给单元格赋值:
ExcelID.Cells[1,4].Value := '第一行第四列';

7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelID.ActiveSheet.Column[1].ColumnsWidth := 5;

8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

9) 在第8行之前插入分页符:
ExcelID.WorkSheets[1].Rows.PageBreak := 1;

10) 在第8列之前删除分页符:
ExcelID.ActiveSheet.Columns[4].PageBreak := 0;

11) 指定边框线宽度:
ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;

1-左 2-右 3-顶 4-底 5-斜( / ) 6-斜( / )

12) 清除第一行第四列单元格公式:
ExcelID.ActiveSheet.Cells[1,4].ClearContents;

13) 设置第一行字体属性:
ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;

14) 进行页面设置:

a.页眉:
ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;

15) 拷贝操作:

a.拷贝整个工作表:
ExcelID.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelID.ActiveSheet.Range.PasteSpecial;

16) 插入一行或一列:

a. ExcelID.ActiveSheet.Rows[2].Insert;
b. ExcelID.ActiveSheet.Columns[1].Insert;


17) 删除一行或一列:

a. ExcelID.ActiveSheet.Rows[2].Delete;
b. ExcelID.ActiveSheet.Columns[1].Delete;

18) 打印预览工作表:
ExcelID.ActiveSheet.PrintPreview;

19) 打印输出工作表:
ExcelID.ActiveSheet.PrintOut;

20) 工作表保存:
if not ExcelID.ActiveWorkBook.Saved then
ExcelID.ActiveSheet.PrintPreview;

21) 工作表另存为:
ExcelID.SaveAs( 'C:/Excel/Demo1.xls' );

22) 放弃存盘:
ExcelID.ActiveWorkBook.Saved := True;

23) 关闭工作簿:
ExcelID.WorkBooks.Close;

24) 退出 Excel:
ExcelID.Quit;
 
现在我不知道要怎么录制宏才能在别人的机子上别的表格中使用啊。要怎么保存,调用?
 
分别将三个Excel导入到数据库--读Excel有例子,技术上应没问题,ole、Ado、Servers均可
然后导出到excel,现成控件或ole、Servers。
那个环节有问题,具体讨论。例子很多,需要留下地址。
 
呵呵,我在这么做可刚开始就遇到问题了。我把一个EXCEL表导入到一个数据表格中
table1.Fields[3].asstring:=Excel1.ActiveSheet.Cells[1,4];
运行时报错 table1:dataset not in edit or insert mode.这是为什么啊? 我查了
table1.canmodify属性是true,应该没问题啊
 
加:
table1.open;
table1.Edit;
 
你的Excel表格如果很规则的话,问题就很简单了。可以直接用TADOQuery连接EXCEL,然
后就什么都容易了.:) 如果合用别忘了给我加分
ADOQuery.ConnectionSring:=
'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:/Book1.xls;
Persist Security Info=False;
Extended Properties=Excel 8.0
Sql.Text:='Select * from [sheet1$]'
就可以打开Query.

 
zhumoo
请问有没有有关OLE Excel更加详细的资料
 
也許對你有用
procedure Texportexcel.BitBtn1Click(Sender: TObject);
var
row,column,Tempcolumn:integer;
i,j:integer;
begin
inherited;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
Try
{ExcelWorksheet1.Connect;
ExcelWorkbook1.Connect;
Excelapplication1.Connect; }
{ExcelWorksheet1.Connect;
excelWorkbook1.Connect;
excelapplication1.Connect;}
Except
Messagedlg('沒有安裝Excel!'+chr(13)+
'請聯絡系統管理員安裝該軟件!',mtinformation,[mbok],0);
Abort;
end;
Excelapplication1.Visible[0]:=true;
Excelapplication1.Caption:='數據導出窗口';
Excelapplication1.Workbooks.Add(varNull,0);
Excelworkbook1.ConnectTo(excelapplication1.workbooks[excelapplication1.workbooks.count]);
Excelworksheet1.ConnectTo(excelworkbook1.worksheets[1] as _worksheet);
Excelworksheet1.Cells.Item[1,3]:='TOOLING PROGRESS REPORT';
Excelworksheet1.Cells.Item[2,1]:='Customer:';
Excelworksheet1.Cells.Item[2,3]:=dm.xvalue.fieldbyname('customer').value;
Excelworksheet1.Cells.Item[3,1]:='Cust.No:';
Excelworksheet1.Cells.item[3,3]:=dm.xvalue.fieldbyname('custph').value;
Excelworksheet1.Cells.Item[4,1]:='Description';
Excelworksheet1.Cells.Item[4,3]:=dm.xvalue.fieldbyname('custcpname').value;
Excelworksheet1.Cells.item[5,1]:='RSC No.:';
Excelworksheet1.Cells.Item[5,3]:=dm.xvalue.fieldbyname('rscno').value;
Excelworksheet1.Cells.item[6,1]:='Chinese Description:';
Excelworksheet1.Cells.Item[6,3]:=trim(dm.xvalue.fieldbyname('rsccpname').value);
Excelworksheet1.Cells.Item[7,1]:='Start date:';
Excelworksheet1.Cells.Item[7,3]:=dm.xvalue.fieldbyname('rjdate').value;
Excelworksheet1.Cells.item[8,1]:='Estimate Finish Date:';
Excelworksheet1.Cells.Item[8,3]:=copy(dm.xvalue.fieldbyname('rjoverdate').value,1,10);
Excelworksheet1.Cells.item[9,1]:='Actual Finish Date';
Excelworksheet1.cells.Item[10,1]:='total days:';
Excelworksheet1.Cells.Item[10,3]:=dm.xvalue.fieldbyname('totaldays').value;
Excelworksheet1.cells.item[11,1]:='Progress Per Day:';
Excelworksheet1.Cells.Item[11,3]:=COPY(dm.xvalue.fieldbyname('perday').value,1,4)+'%';
Excelworksheet1.Cells.Item[12,1]:='Date/Time';
EXCELWORKSHEET1.Cells.Item[12,2]:='PLAN(%)';
Excelworksheet1.Cells.Item[12,3]:='ACTUAL(%)';
Excelworksheet1.Cells.Item[12,4]:='GAP';
Excelworksheet1.Cells.Item[12,5]:='WORKING DAYS';
row:=13;
dm.evalue.First ;
While Not (dm.evalue.Eof) do
begin
TempColumn := 0 ;
begin
for Column:=1 to DbGrid1.FieldCount do
if DbGrid1.Columns.Items[Column-1].Visible=True Then
begin
TempColumn:=TempColumn+1;
ExcelWorksheet1.Cells.Item[row,TempColumn]:=DbGrid1.Fields[Column-1].AsString;
end;
end;
dm.evalue.Next;
row:=row + 1;
end;
end;
 
由于QR太麻烦,早就想把报表生成excel打印了,一直找不到资料,原来这很多
 
后退
顶部