Excel 问题 (50分)

  • 主题发起人 主题发起人 隐士山人
  • 开始时间 开始时间

隐士山人

Unregistered / Unconfirmed
GUEST, unregistred user!
版面上只一个按钮,一个Edit1和一个Edit2,一个Excel工作表已做好,就放在D盘的根目录
下。现在我想把Edit1的数据写入Excel工作表的A1单元格中,并把Excel工作表B1单元格的数据读入Edit2中,并让Excel保存刚读入的Edit2数据(另一个按钮操作)
求:一,需要什么控件?
二,完整的代码。
不需要显示Excel2000
 
下面是部分操作示例, 你看看吧
procedure TTestExcelF.Button1Click(Sender: TObject);
var
app, sheet: Variant;
begin
try
app := CreateOleObject('Excel.Application');
app.Visible:=True; //是否显示Excel

if True then
app.WorkBooks.Add //新建Excel文件
else
app.WorkBooks.Open('E:/MyTest.xls'); //打开Excel文件

{ app.WorkBooks[1].WorkSheets[1].Name := '第一页标题';
app.WorkBooks[1].WorkSheets[2].Name := '第二页标题';
app.WorkBooks[1].WorkSheets[3].Name := '第三页标题';}

app.WorkBooks[1].Activate; //激活第一个WorkBook
app.WorkBooks[1].WorkSheets[3].Activate; //激活第三个WorkSheets
app.ActiveWorkBook.WorkSheets[2].Name := 'ActiveWorkBook';
//通过ActiveWorkBook访问当前的工作簿
app.ActiveSheet.Name := 'ActiveSheet'; //通过ActiveSheet访问当前的工作单

if True then
Sheet:=app.ActiveSheet
else begin
Sheet := app.WorkBooks[1].WorkSheets['ActiveSheet'];
//通过标题得到工作单
Sheet := app.WorkBooks[1].WorkSheets[2];//通过索引取得工作单
end;

Sheet.Columns[1].NumberFormatLocal := '@'; //设置第一栏为字符串格式
Sheet.Cells[1, 1] := '123456789012345678';
Sheet.Cells[1, 2] := '12903382084024820';
Sheet.Cells[1, 3] := '43234253247932795923';
except
Application.MessageBox('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试!'
,'信息',MB_OK+MB_ICONINFORMATION);
app.DisplayAlerts := False; //是否提示存盘
app.Quit; //退出Excel
Exit;
end;

if True then app.WorkBooks[1].SaveAs('E:/MyTest.xls')
else app.ActiveWorkBook.Save;
// app.ActiveWorkBook.SaveAs('E:/MyTest1.xls');
app.WorkBooks[1].Close; app.Quit;
Application.Restore; Application.BringToFront;
end;

procedure TTestExcelF.Button2Click(Sender: TObject);
var
app, sheet: Variant;
begin
try
app := CreateOleObject('Excel.Application');
app.Visible:=True; //是否显示Excel
app.WorkBooks.Add; //新建Excel文件

app.WorkSheets['Sheet2'].Activate; //通过工作簿的名称访问
app.Columns['A:C'].Select; //通过栏名访问,并选中
app.Selection.NumberFormatLocal := '@'; //访问选中的部分
app.Range['A7:B8'].Select; //选中范围
app.Selection.Merge; //合并
app.Cells.Select; //选中所有的单元格
app.Selection.Font.Size := 10; //设置选中部分的单元格的字体大小
app.Rows[5].RowHeight := 40; //设置行高
app.Selection.HorizontalAlignment := 2; //2:左对齐 3:居中 4:右对齐
app.Selection.VerticalAlignment := 3; //2:居中 3:下对齐 4:上对齐
app.Rows[5].Value := 'Row5'; //设置第五行的值
app.Rows[6].Select; //选中第六行
app.Selection.Value := 'Selection'; //设置选中部分的值


app.Cells(1, 1) := '字符型'; //访问单元格
app.Cells(1, 2) := 'Money型';
app.Cells(1, 3) := '日期型';
app.Cells(2, 1) := '23427904270432742';
app.Range['B2:B2'].NumberFormatLocal:='人民币#,##0.00元';
//设置货币格式
app.Cells(2, 2) := 10.01;
app.Cells(2, 3) := Date;
except
end;
end;
 
用动态创建方法,引用ComObj这个单元
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComObj, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
celApp : Variant;
Path : string;
begin
Path := 'd:/Book1.xls';
if FileExists(Path) then
begin
celApp := CreateOleObject('Excel.Application');
try
celApp.WorkBooks.Open(Path) //打开已存在的
except
Application.MessageBox('未安装EXCEL2000!','提示信息',MB_OK+MB_ICONINFORMATION);
end;
end
else
begin
showmessage(path+' 这个文件不存在');
exit;
end;
celApp.workbooks[1].worksheets[1].Cells[1,1].Value := Trim(Edit1.Text);
Edit2.Text := celApp.workbooks[1].worksheets[1].Cells[1,2].Value;
celApp.WorkBooks[1].Save;
celApp.WorkBooks[1].Close;
celApp.Quit;
end;
end.
 
能否解释一下‘用动态创建方法,引用ComObj这个单元’的实现方法?我对这方面不是很熟。
 
celApp := CreateOleObject('Excel.Application');
这一句就是动态创建
在Uses中加入ComObj就是一如ComObj单元
楼主看看以前关于Excel的帖子,上面已经有很完整的实例了
 
多人接受答案了。
 
后退
顶部