Delphi操作Excel 合并单元格问题 (100分)

  • 主题发起人 主题发起人 tinytao
  • 开始时间 开始时间
T

tinytao

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi操作Excel时,如何判断一个合并单元格,合并了几个单元格。
 
!我保证你们看到以下的用法一定爽歪歪了!!!
这可是我三天工作的结果。唔。。。
---看最后终结者office。
--------------------------------
如果你们用的office97的server控件,那么用office2000时就要把server上的控件换掉。
做法:
1。在Componet里打开Install Packages.....
2.去掉borland sample automation server components
3.在project中点input type Library....
4.点add加入office2000的类库。(在Microsoft Office/office目录下的)
5。反正是什么Excel9.olb , Msword9.olb 和那些*.olb的东东,有excel的,word的,等。。。
6。palette page:改为servers(因为以前的office的控件完完了)
7。点install就好了。
这样office2000的问题我想应解决了。(如果你用的是什么word.application或excel.application 的控件的话)。
-----------
我的建议:
先用上面一的方法,再用comobj对象。
use comobj, excel_tlb; //excel_tlb 是新excel控件的pas文件,你把新控件放在窗体上看它用的哪个.pas就好了,当然下面要把这个控件去掉。因为comobj不用这个控件。只用这个.pas如excel_tlb中的函数。
var xl:variant;
在事件里写:
xl:=createoleobject('Excel.Application');

然后打开excel或word录一个宏命令,并打开宏命令考入代码。
----以下是宏录下来的宏。
workbooks.add
Range("C5:D7").Select
Sheets("Sheet2").Select
ActiveWindow.SelectedSheets.Delete
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("A1")
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3"
-------
现在把它改为以下:
xl.workbooks.add;
xl.Range['C5:D7'].Select;
xl.Sheets['Sheet2'].Select;
xl.ActiveWindow.SelectedSheets.Delete;
xl.Charts.Add;
xl.ActiveChart.ChartType := xlColumnClustered;
xl.ActiveChart.Location(xlLocationAsObject,'Sheet3');
现在运行一下,我保证你们爽歪歪!
看到规律了吗?
前面加上对象名,()改[],= 改:=,有参数时直接用,后加; 。哈哈,满意了吧,
用office的宏命令可是不用你去想编程的,全是手动。这样少写了一大堆代码。

bbcoll 如有不明白的朋友讨论可:bbcoll@china.com

-------------------------------------------------------
 
bbcoll,用得着吗,谁都知道直接把vba翻译成delphi,你不必要每个贴子都发些类似的吧
 
看我写的这段程序,送分来把,还加了个画线,呵呵

Procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
PathName: string;
oldcur: tcursor;
FExcelApplication: TExcelApplication;
FExcelWorkbook: TExcelWorkbook;
FExcelWorksheet: TExcelWorksheet;
xl:olevariant;
begin

PathName := ExtractFilePath(Application.ExeName);
if FileExists(pathname + 'test.xls') then
try
DeleteFile(pathname + 'test.xls');
except
end;

if queryprint.Active = true then queryprint.Close;
queryprint.CommandText := 'select * from mainwork where 1=1';
queryprint.open;
begin
try
FExcelApplication := TExcelApplication.Create(nil);
FExcelWorkbook := TExcelWorkbook.Create(nil);
FExcelWorkSheet := TExcelWorksheet.Create(nil);

except
showmessage('对不起,您没有安装Excel 2000!');
abort;
end;
end;
begin

FExcelApplication.Visible[0] := True;
FExcelApplication.Connect;
FExcelApplication.Caption := 'test1';
FExcelApplication.Workbooks.Add(PathName + 'juannei.xls', 0);
FExcelWorkbook.ConnectTo(FExcelApplication.ActiveWorkbook);
FExcelWorksheet.ConnectTo(FExcelWorkbook.Activesheet as _WorkSheet);
end;

//写入execl
if Queryprint.RecordCount > 0 then
begin
for i := 1 to (Queryprint.RecordCount) do
begin
try
FExcelWorkSheet.cells.Item[i + 2, 2] := Queryprint.fieldbyname('文件编号').asstring;
FExcelWorkSheet.cells.Item[i + 2, 3] := Queryprint.fieldbyname('责任者').asstring;

//给单元格画上线条
with FExcelApplication.Range['A'+inttostr(i+1),'G'+inttostr(i+1)].Borders do
begin
LineStyle:=xlContinuous;
Weight:=xlThin;
ColorIndex:=xlAutomatic;
end;
//合并单元格子
FExcelApplication.Range['H'+inttostr(i+1),'J'+inttostr(i+1)].Merge(xl);
except
end;
Queryprint.Next;
end;
end;

// xl.Range['H7,H7'].Select;

// xl.ActiveWindow.SelectedSheets.HPageBreaks.add(FExcelApplication.ActiveCell);

FExcelApplication.Disconnect;
FExcelApplication.ScreenUpdating[0] := true;
FExcelWorkbook.Disconnect;
FExcelWorksheet.Disconnect;

FExcelApplication.Quit;

FExcelWorksheet.Free;
FExcelWorkbook.Free;
FExcelApplication.free;

end;
 
多人接受答案了。
 
后退
顶部