unit ExcelProUnit;
interfacetype TExcelFunction = procedure(asheet: OleVariant); //声明导入函数 {访问单元格:sheet.cells[row,col]转为string:vartostr(sheet.cells[row,col])转为datetime:vartodatetime(sheet.cells[row,col])} //afilename为数据源文件名,func为执行导入的函数procedure RunExcelApplication(afilename: string; func: TExcelFunction);implementationuses Controls, Forms, ComObj, windows, sysutils;procedure RunExcelApplication(afilename: string; func: TExcelFunction);var app: OleVariant; oldCursor: TCurSor;begin oldCursor := Screen.Cursor; //保存鼠标指针状态 Screen.Cursor := crHourGlass; try CoInitializeEx(nil, 0); app := CreateOleObject('Excel.Application'); try app.DisplayAlerts := False; app.WorkBooks.open(afilename);//打开源文件 app.WorkSheets[1].Activate; app.visible := False; //隐藏excel窗体 if Assigned(func) then //执行导入函数 func(app.ActiveSheet); //传递sheet给函数进行导入 finally app.WorkBooks.close; app.quit; //关闭推出excel Screen.Cursor := oldCursor; end; except on e: Exception do begin MessageBox(GetActiveWindow, pchar(e.message), '提示', MB_OK + MB_ICONINFORMATION); Screen.Cursor := OldCursor; Exit; end; end;end;end.--------------------------------------------------------------------------
unit Unit2;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBGridEhGrouping, DB, ADODB, GridsEh, DBGridEh, StdCtrls, RzButton;type TForm2 = class(TForm) Button1: TButton; DBGridEh1: TDBGridEh; ADOQuery1: TADOQuery; DataSource1: TDataSource; RzButton1: TRzButton; Memo1: TMemo; OpenDialog1: TOpenDialog; adodata: TADOQuery; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RzButton1Click(Sender: TObject); procedure exesql(str_sql:string); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm}uses ExcelProUnit;var sl: tStrings; pubsql:string;procedure TForm2.Button1Click(Sender: TObject);var str_sql:string;begin str_sql := 'SELECT * FROM nameyp3'; with ADOQuery1 do begin close; sql.Clear; SQL.Add(str_sql); open; end; DataSource1.DataSet := ADOQuery1; DBGridEh1.DataSource := DataSource1;end;procedure GetFromExcel(asheet: OleVariant);var s, rs: string; row: integer; compute_00,ylxmmc,jsxmbh,lb,code,content,py,sxzfbl,jxbm,jxmc,spec,gssxzfbl,sysxzfbl:string; adodata:TADOQuery;begin row := 1; s := trim(vartostr(aSheet.cells[row, 1])); pubsql := ''; while s <> '' do begin compute_00 := trim(vartostr(aSheet.cells[row, 1])); ylxmmc := trim(vartostr(aSheet.cells[row, 2])); jsxmbh := trim(vartostr(aSheet.cells[row, 3])); lb := trim(vartostr(aSheet.cells[row, 4])); code := trim(vartostr(aSheet.cells[row, 5])); content := trim(vartostr(aSheet.cells[row, 6])); py := trim(vartostr(aSheet.cells[row, 7])); sxzfbl := trim(vartostr(aSheet.cells[row, 8])); if sxzfbl = '' then sxzfbl := '0'; jxbm := trim(vartostr(aSheet.cells[row, 9])); jxmc := trim(vartostr(aSheet.cells[row, 10])); spec := trim(vartostr(aSheet.cells[row, 11])); gssxzfbl := trim(vartostr(aSheet.cells[row, 12])); if (gssxzfbl = '') or (gssxzfbl = 'NULL') then gssxzfbl := '0'; sysxzfbl := trim(vartostr(aSheet.cells[row, 13])); if (sysxzfbl = '') or (sysxzfbl = 'NULL') then sysxzfbl := '0'; pubsql := pubsql + ' insert into nameyp3(compute_00,ylxmmc,jsxmbh,lb,code,content,py,sxzfbl,jxbm,jxmc,spec,gssxzfbl,sysxzfbl)'; pubsql := pubsql + 'select ' + QuotedStr(compute_00) + ',' + QuotedStr(ylxmmc) + ',' + QuotedStr(jsxmbh) + ',' + QuotedStr(lb) + ',' + QuotedStr(code) + ',' + QuotedStr(content) + ',' + QuotedStr(py) + ',' + QuotedStr(sxzfbl) + ',' + QuotedStr(jxbm) + ',' + QuotedStr(jxmc) + ',' + QuotedStr(spec) + ',' + QuotedStr(gssxzfbl) + ',' + QuotedStr(sysxzfbl); inc(row); sl.Add(rs); s := trim(vartostr(aSheet.cells[row, 1])); end;end;procedure TForm2.exesql(str_sql: string);begin with adodata do begin Close; SQL.Clear; SQL.Add(str_sql); ExecSQL; end;end;procedure TForm2.FormCreate(Sender: TObject);begin sl := TStringList.Create;end;procedure TForm2.RzButton1Click(Sender: TObject);beginOpenDialog1.Title := '请选择正确的excel文件';
OpenDialog1.Filter := 'Excel(*.xls)|*.xls';if OpenDialog1.Execute then
begin // RunExcelApplication(ExtractFilePath(application.ExeName) + 'success.xls', GetFromExcel); RunExcelApplication(OpenDialog1.FileName, GetFromExcel); exesql(pubsql); //memo1.Lines.AddStrings(sl); end; { RunExcelApplication(ExtractFilePath(application.ExeName) + 'success.xlsx', GetFromExcel); memo1.Lines.AddStrings(sl); }end;end.