关于excel(100分)

  • 主题发起人 主题发起人 mjf_jigh
  • 开始时间 开始时间
M

mjf_jigh

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,在ADO中如何去掉用户名和密码的对话框,还有如何将用select选择出来的记录导入
excel 表
 
LoginPrompt:=False;
 
>>如何将用select选择出来的记录导入excel 表
编程实现呀。
一个方法是使用Com技术,然后遍历选中的记录,逐个写入打开的Excel文件。
 
loginprompt:=False就行了.
 
//将dbgrid中的内容输出到excel中.
示例中,dbgrid(DBGrid1)具有一个弹出菜单,它给出两个选项:"Send to Excel" 和 "Copy".
下面给出用到的方法:
//注意:下面的方法必须包含 ComObj, Excel97 单元
//-----------------------------------------------------------
// if toExcel = false, export dbgrid contents to the Clipboard
// if toExcel = true, export dbgrid to Microsoft Excel
procedure ExportDBGrid(toExcel: Boolean);
var
bm: TBookmark;
col, row: Integer;
sline: String;
mem: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourglass;
DBGrid1.DataSource.DataSet.DisableControls;
bm := DBGrid1.DataSource.DataSet.GetBookmark;
DBGrid1.DataSource.DataSet.First;

// create the Excel object
if toExcel then
begin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Grid Data';
end;

// First we send the data to a memo
// works faster than doing it directly to Excel
mem := TMemo.Create(Self);
mem.Visible := false;
mem.Parent := MainForm;
mem.Clear;
sline := '';

// add the info for the column names
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
mem.Lines.Add(sline);

// get the data into the memo
for row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
sline := '';
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].AsString + #9;
mem.Lines.Add(sline);
DBGrid1.DataSource.DataSet.Next;
end;

// we copy the data to the clipboard
mem.SelectAll;
mem.CopyToClipboard;

// if needed, send it to Excel
// if not, we already have it in the clipboard
if toExcel then
begin
ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
ExcelApp.Visible := true;
end;

FreeAndNil(mem);
// FreeAndNil(ExcelApp);
DBGrid1.DataSource.DataSet.GotoBookmark(bm);
DBGrid1.DataSource.DataSet.FreeBookmark(bm);
DBGrid1.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
end;
 
问题1:LoginPrompt := False;
问题2:
使用OLE自动化对象建立同EXCEL的连接,并在DELPHI下面编程控制EXCEL。
首先,应该在USES中加入一个ComObj。这是非常重要的。然后创建一个EXCEL类型的COM对象,实现如下:
V := CreatOleObject( 'Excel Application ');
V.Visible := true;

代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, Excel2000(也可以是Excel97);

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
XLApp: Variant;
procedure InsertData;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
uses ComObj;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(XLApp) then begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
XLApp := CreateOleObject('Excel.Application');
XLApp.Visible := True;
XLApp.Workbooks.Add(xlWBatWorkSheet); //
XLApp.Workbooks[1].WorkSheets[1].Name := 'Delphi Data';
InsertData;
end;

procedure TForm1.InsertData;
var
i: integer;
Sheet: Variant;
begin
Sheet := XLApp.Workbooks[1].WorkSheets['Delphi Data'];
for i := 1 to 10 do
begin
Sheet.Cells[i,1] := i;
//用上面这种形式,把你的数据插进去就行了。
end;
Sheet.Cells[i,1] := '=Sum(A1: A10)'
end;
end.
 
如果你把数组里面的数据插入可以这样:
M //数组上界
for i:=1 to M-1 do
begin
ExcelApp.Cells[i,1].Value := FloatTOStr(arr_orign[i,1]);
ExcelApp.Cells[i,2].Value := FloatTOStr(arr_orign[i,2]);
end;
 
用smexport控件,可以直接把dataset的数据导出到excel:
http://202.117.210.31/softdownload.asp?no=109
 
多人接受答案了。
 
为什么提示createoleobject出错??
undeclared identifier "createoleobject"
 
后退
顶部