Delphi从Excel导入 - 娃娃鸭的窝 - ITeye技术网站

来源: Delphi从Excel导入 – 娃娃鸭的窝 – ITeye技术网站

Delphi从Excel导入数据

要写一程序从Excel导入数据,从网上查到通用程序的写法,我只做了少量修改。

ExcelProUnit.pas

Delphi代码  收藏代码
  1. unit ExcelProUnit;
  2. interface
  3. type
  4.   TExcelFunction = procedure(asheet: OleVariant); //声明导入函数
  5.   {访问单元格:sheet.cells[row,col]
  6. 转为string:vartostr(sheet.cells[row,col])
  7. 转为datetime:vartodatetime(sheet.cells[row,col])
  8. }
  9.   //afilename为数据源文件名,func为执行导入的函数
  10. procedure RunExcelApplication(afilename: string; func: TExcelFunction);
  11. implementation
  12. uses Controls, Forms, ComObj, windows, sysutils;
  13. procedure RunExcelApplication(afilename: string;
  14.   func: TExcelFunction);
  15. var
  16.   app: OleVariant;
  17.   oldCursor: TCurSor;
  18. begin
  19.   oldCursor := Screen.Cursor;
  20.  //保存鼠标指针状态
  21.   Screen.Cursor := crHourGlass;
  22.   try
  23.     CoInitializeEx(nil, 0);
  24.     app := CreateOleObject(‘Excel.Application’);
  25.     try
  26.       app.DisplayAlerts := False;
  27.       app.WorkBooks.open(afilename);
  28. //打开源文件
  29.       app.WorkSheets[1].Activate;
  30.       app.visible := False; //隐藏excel窗体
  31.       if Assigned(func) then //执行导入函数
  32.         func(app.ActiveSheet); //传递sheet给函数进行导入
  33.     finally
  34.       app.WorkBooks.close;
  35.       app.quit; //关闭推出excel
  36.       Screen.Cursor := oldCursor;
  37.     end;
  38.   except on e: Exception do
  39.     begin
  40.       MessageBox(GetActiveWindow, pchar(e.message), ‘提示’, MB_OK + MB_ICONINFORMATION);
  41.       Screen.Cursor := OldCursor;
  42.       Exit;
  43.     end;
  44.   end;
  45. end;
  46. end.

主要考虑的地方是传进去的函数的写法。以下写法没有进行过多的细化主要是完成功能。

ExcelMainUnit.pas

Delphi代码  收藏代码
  1. unit excelmainUnit;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls;
  6. type
  7.   TForm1 = class(TForm)
  8.     Button1: TButton;
  9.     Memo1: TMemo;
  10.     Button2: TButton;
  11.     procedure FormCreate(Sender: TObject);
  12.     procedure Button1Click(Sender: TObject);
  13.     procedure Button2Click(Sender: TObject);
  14.   private
  15.     { Private declarations }
  16.   public
  17.     { Public declarations }
  18.   end;
  19. var
  20.   Form1: TForm1;
  21. implementation
  22. uses ExcelProUnit;
  23. var
  24.   sl: tStrings;
  25. {$R *.dfm}
  26. procedure GetFromExcel(asheet: OleVariant);
  27. var
  28.   s, rs: string;
  29.   row: integer;
  30. begin
  31.   row := 1;
  32.   s := trim(vartostr(aSheet.cells[row, 1]));
  33.   while s <>  do
  34.   begin
  35.     rs := ;
  36.     rs := rs + vartostr(aSheet.cells[row, 1]) + ‘  ‘;
  37.     rs := rs + vartostr(aSheet.cells[row, 2]) + ‘  ‘ + vartostr(aSheet.cells[row, 3]);
  38.     inc(row);
  39.     sl.Add(rs);
  40.     s := trim(vartostr(aSheet.cells[row, 1]));
  41.   end;
  42. end;
  43. procedure TForm1.FormCreate(Sender: TObject);
  44. begin
  45.   sl := TStringList.Create;
  46. end;
  47. procedure TForm1.Button1Click(Sender: TObject);
  48. begin
  49.   RunExcelApplication(ExtractFilePath(application.ExeName) + ‘success.xlsx’, GetFromExcel);
  50.   memo1.Lines.AddStrings(sl);
  51. end;
  52. procedure TForm1.Button2Click(Sender: TObject);
  53. begin
  54.   RunExcelApplication(ExtractFilePath(application.ExeName) + ‘success.xls’, GetFromExcel);
  55.   memo1.Lines.AddStrings(sl);
  56. end;
  57. end.

其中Excel数据为:

Java代码  收藏代码
  1. 姓名  成绩  备注
  2. Danny   100 完胜
  3. Way 99  差一分完胜
  4. Jay 59  没及格,太难受了
  5. Joan    77  中等

读取数据为:

Java代码  收藏代码
  1. 姓名  成绩  备注
  2. Danny  100  完胜
  3. Way  99  差一分完胜
  4. Jay  59  没及格,太难受了
  5. Joan  77  中等

2011-5-27 23:10 danny

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏