如何通过循环合并Excel的单元格? ( 积分: 200 )

  • 主题发起人 主题发起人 智利
  • 开始时间 开始时间

智利

Unregistered / Unconfirmed
GUEST, unregistred user!
如何通过循环合并Excel的单元格?
例如:1、合并第一行的第1列到第4列,再从第5列到第8列,以此类推,合并30个单元格。
   2、合并第一列的第1行到第4行,再从第5行到第8行,以此类推,合并30个单元格。
 
如何通过循环合并Excel的单元格?
例如:1、合并第一行的第1列到第4列,再从第5列到第8列,以此类推,合并30个单元格。
   2、合并第一列的第1行到第4行,再从第5行到第8行,以此类推,合并30个单元格。
 
可以在EXCEL里录制宏,再将VBA代码转为D代码。
 
那是静态录宏,没用。

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2700215
如要源代码.
http://free.efile.com.cn/czcn/
里我曾写一个环阻速建工具(LFRC).有动态生成完整EXCEL文件.
 
动态生成完整EXCEL文件,我可以实现了,我现在只想解决动态合并单元格的问题。
其实有一个办法可以解决,就是把列标中的字母进行数字换算进行动态合并,比较麻烦,,,,,,[:D][:D][:D][:D][:D]
看看还有没有好的办法可以实现。
 
来自:czcn, 时间:2004-7-7 15:14:08, ID:2700585 | 编辑
...
MySheet.Range['A1:A10'].MERGE; //合并
.....
好像只有这个办法.
 
在DELPHI中如何实现对EXCEL表格的合并与添加边框的操作 (100分)
分类:OLE/Automation bestluo (2003-09-02 10:16:00)
希望大家于与指点,谢谢


onlyonekgx (2003-09-02 10:23:00)
用Excel录制宏,然后看看宏就知道

realLearning (2003-09-02 10:38:00)
一点代码可以参考一下。
procedure TfrmExport.ExportToExcel;
var
ExcelApp : Variant;
R : OleVariant;
C : OleVariant;
I : Integer;
Cell1,Cell2 : OleVariant;
begin
ExcelApp := CreateOleObject('Excel.Application');
try
ExcelApp.WorkBooks.Add(1);
ExcelApp.ActiveSheet.Name := cmbProject.Items[cmbProject.ItemIndex];
R := 2;
C := 2;
ExcelApp.ActiveSheet.Cells[R,C].Value := '项目信息';
ExcelApp.ActiveSheet.Cells[R,C].Font.Size := 12;
ExcelApp.ActiveSheet.Cells[R,C].Font.Bold := True;
Cell1 := ExcelApp.ActiveSheet.Cells[R,C];
Cell2 := ExcelApp.ActiveSheet.Cells[R,C+frmMain.adsProject.FieldCount-1];
ExcelApp.ActiveSheet.Range[Cell1,Cell2].Merge;//合并单元格
ExcelApp.ActiveSheet.Cells[R,C].Font.Size := 9;
ExcelApp.ActiveSheet.Cells[R,C].Interior.ColorIndex := 43;
ExcelApp.ActiveSheet.Cells[R,C].VerticalAlignment := xlVAlignCenter;
ExcelApp.ActiveSheet.Cells[R,C].HorizontalAlignment := xlHAlignCenter;
ExcelApp.ActiveSheet.Cells[R,C].MergeArea.Borders.LineStyle := xlContinuous;//设置边框
Inc(R);
另外如果如果某一区域都是同样格式,尽量一起设置这个区域的格式,效率比
一个一个单元格设置格式要提高许多。

chnplzh (2003-09-02 10:53:00)
还是建议使用EXCEL的宏功能,先记录下来,然后看宏代码就可以了。

bestluo (2003-09-06 20:34:00)
多人接受答案了。


chnplzh-20,onlyonekgx-70,realLearning-10,的回答最终被接受。
 
怎么样在DEPHI里写程序实现excel里两个单元格的合并 (100分)
分类:OLE/Automation swallowljh (2002-12-18 12:33:00)
怎么样在DEPHI里写程序实现excel里两个单元格的合并
或向一个已经存在的EXCEL文件里面写入内容并保存为另一个文件。


hhxxj (2002-12-22 0:02:00)
转贴:
山泉 (2001-8-19 14:04:00)
看我写的这段程序,送分来把,还加了个画线,呵呵

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;



wuxiaoyong (2002-12-25 9:40:00)
1. ExcelApp.ActiveSheet.Range['A1:G1'].merge(true);

2.ExcelApp.SaveAs(SaveDialog1.FileName);

swallowljh (2003-02-18 8:02:00)
多人接受答案了。


hhxxj-60,wuxiaoyong-40,的回答最终被接受。
 
怎样在Delphi中编程实现合并Excel中的单元格? (50分)
分类:ActiveX 控件 Vinson (2002-05-24 14:56:00)


linsb (2002-05-24 15:23:00)
合并单元的问题
ExcelApp.range['a1:a2'].select;
ExcelApp.Selection.Merge;


Vinson (2002-05-24 15:34:00)
接受答案了.

xxhadsg (2002-05-24 15:35:00)
创建一个OLE EXCEL对象,在EXCEL中用宏记录下合并单元格的操作,写到程序中即可。

var
XL,WorkBook, Sheet: Variant;
begin

XL:= CreateOleObject('Excel.Application');
WorkBook := Xl.WorkBooks.Add;
Sheet := WorkBook.WorkSheets[1];
//your code
OleExc.Free;
XL.DisplayAlerts:=false;
XL.QUIT;
XL:=unassigned;


Cell := Sheet .Cells[ 2,3];
Cell.Value :='value';


Sheet.Range("A1:B1").Select
With Sheet.Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Sheet.Selection.Merge



linsb的回答最终被接受。
 
在操作MS的办公软件时,有个统一的思路:
1.先录制操作过程的宏
2.分析宏,并用D语句实现
 
谢谢weiliu的好意。你所贴的内容可以实现固定某一列到固定某一列内的表格,这个我清楚,我也用过。
但是,我想从A1开始,每右4格合并一个成一个单元格,一共合成30个,如何做?

请各位看题看清楚。
 
weiliu里面写得很清楚了,你只要加上循环就OK了.

1、合并第一行的第1列到第4列,再从第5列到第8列,以此类推,合并30个单元格。
iRow:=1;
for i:=0 to 29 do
begin
Cell1:=ExcelApp.ActiveSheet.Cells[iRow,1+i*4];
Cell2:=ExcelApp.ActiveSheet.Cells[iRow,(i+1)*4];
ExcelApp.ActiveSheet.Range[Cell1,Cell2].Merge;
end;
 
多人接受答案了。
 
后退
顶部