delphi问题:浅谈Delphi如何控制Excel操作Delphi教程
delphi吧
全部回复
仅看楼主
level 8
1 创建Excel文件
  要在Delphi中控制Excel,就必须用到OLE自动化。现在一般采用OLE2来创建OLE对象,当激活一个OLE对象时,服务器程序仅在容器程序内部激活,这就是所谓的“就地激活”(in-place activation)。
  创建Excel文件时,先创建一个OLE对象,然后在对象中建立工作表worksheet,如函数createExcel所示:
  function createExcel:variant;
  var
  v:variant;
  sheet:variant;
  begin
  v:=createoleobject('Excel.Application');//创建OLE对象
  v.visible:=true;
  v.workbooks.add(-4167); //添加工作表
  v.workbooks[1].sheets[1].name:='test';
  sheet:=v.workbooks[1].sheets['test'];
  return v;
  end;
  2 数据表格控制
  Excel表格的控制,主要包括数据的导入、修改;单元格的合并、边框的控制;表格的复制、粘贴等。当报表格式一定的情况下,表格的复制、粘贴显得尤为重要,这样,可以先制作一个文件模板,然后按照实际需要输出多页报表即可。
  (1)数据的导入(importData)
  procedure importData;
  var
  I,j:integer;
  v:variant;
  begin
  v:=createExcel; //创建Excel文件test
  for I:=0 to maxcolumn do
  begin
  for j:=0 to maxrow do
  v.workbooks[1].sheets[1].cells[I,j]:=I*j; //导入数据
  end;
  end;
  (2)单元格的合并、边框的控制(lineStylecontrol)
  单元格的合并,是在选定合并范围的情况下进行的。边框控制可以操作边框线条的是否显示。其他方式的控制,可以仿照下面过程进行。
  procedure lineStylecontrol;
  var
  v,sheet,range:variant;
  begin
  v:=createExecl;
  sheet:= v.workbooks[1].sheets[1];
  range:=sheet.range[sheet.cells[1,1],sheet.cells[39,30]];//选定表格
  range.select;
  range.merge; //合并单元格
  range.borders.linestyle:=xlcontinuous; //置边框线可见
  range.font.size:=9; //改变表格内文本字体大小
  end;
2015年08月21日 06点08分 1
吧务
level 14
你这是把贴吧当成便签呢
2015年08月21日 06点08分 2
level 10
等 那一天 百度说,咱不要贴吧了。
楼主的便签就没了。
2015年08月21日 08点08分 3
哈哈,别小看贴吧呀,都活了12年多了呢
2015年08月22日 01点08分
level 2
[大拇指]
2016年03月07日 04点03分 6
level 1
var
xlApplication: _Application;
xlWorkBook, xlWorkBook2: _Workbook;
xlWorkSheet: _Worksheet;
begin
try
xlApplication := CreateOleObject('Excel.Application') as _Application;
xlApplication.Visible[GetUserDefaultLCID] := false;
xlApplication.DisplayAlerts[GetUserDefaultLCID] := false;
xlApplication.ReferenceStyle[GetUserDefaultLCID] := xlR1C1;
//指定默认Sheet数目,新增WorkBook,自动创建多个Sheet
xlApplication.SheetsInNewWorkbook[GetUserDefaultLCID] := 3;
xlWorkBook := xlApplication.Workbooks.Add(EmptyParam, GetUserDefaultLCID);
//指定各Sheet名称,后面用Sheet名称索引Sheet页
(xlWorkBook.Worksheets[1] as _Worksheet).Name := 'COLOR';
(xlWorkBook.Worksheets[2] as _Worksheet).Name := 'ASCII';
(xlWorkBook.Worksheets[3] as _Worksheet).Name := 'TEST';
//初始化各Sheet页
self.Proc_Color_Gen(xlApplication, xlWorkBook.Worksheets['COLOR'] as _Worksheet);
self.Proc_ASCII_Gen(xlWorkBook.Worksheets['ASCII'] as _Worksheet);
self.Proc_TEST_Gen(xlWorkBook.Worksheets['TEST'] as _Worksheet);
//指定WorkSheet模板,新增WorkBook
xlWorkBook2 := xlApplication.Workbooks.Add(xlWBATWorksheet, GetUserDefaultLCID);
finally
xlWorkBook.SaveCopyAs(ExtractFilePath(ParamStr(0)) + 'test\B5\test123.xlsx', GetUserDefaultLCID);
xlWorkBook.Close(EmptyParam, EmptyParam, EmptyParam, GetUserDefaultLCID);
xlWorkBook2.Close(EmptyParam, EmptyParam, EmptyParam, GetUserDefaultLCID);
if xlApplication.Workbooks.Count = 0 then
xlApplication.Quit;
end;
end;
2016年04月09日 09点04分 13
level 8
请问delphi在控制word和excel时,有的教程声明为variant,有的声明为oleVariant,这两者有什么区别呢?
2016年04月18日 10点04分 15
level 11
我想借贵地问一下,我用delphi 7的ExcelApplication1.Connect 连接上一个已经打开的excel表,然后给不在当前页面的单元格赋值,但赋值之前想先跳转到该单元格(比如该单元格在220行),应该怎么做?
2016年05月14日 04点05分 16
1