在excel中,如何判断一个单元格为空?(50分)

  • 主题发起人 主题发起人 Lion_sj
  • 开始时间 开始时间
L

Lion_sj

Unregistered / Unconfirmed
GUEST, unregistred user!
先谢了!
 
var
v: Variant;
ARange: IRange;
begin
ARange := AWorkSheet.Cells.Resize[1, 1];
v := ARange.Offset[nRow, nCol].Value;
if VarIsNull(v) then
单元格为空
else
单元格不为空;
...
 
它说ARange没有定义
 
uses ..., Excel97;
 
var
ExcelApp,zs : Variant;
RecCount,i : integer;
ARange : IRange;
begin
try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Open(sPathNameStr);
ExcelApp.WorkSheets[1].Activate;
except
// Show
end;
RecCount := ExcelApp.ActiveSheet.UsedRange.Rows.count;
ARange := ExcelApp.WorkSheets[1].Cells.Resize[1,1];

执行到最后一句出错,incompatible type:‘variant and IRange’
 
你用的是迟后绑定(late binding)方法,比较慢一点,将ARange定义为Variant类型就可以了。
用early binding才定义成IRange.执行稍快
 
可以了,问一下AWorkSheet.Cells.Resize[1, 1];什么意思

同时什么叫迟后绑定

不好意思麻烦你了
 
early binding:编译时就绑定了Ole对象的方法-快速
late binding:执行时从表中查找Ole对象的方法-慢速
 
就我这个东东,如何实现early binding呢
 
我靠,你这50分还正难拿!方法如下:

uses ..., Excel97;
...

procedure ...;
var
xl: TExcelApplication;
wb: _Workbook;
ws: _WorkSheet;
rg: Range;
begin
xl := TApplication.Create(Application);
try
xl.Visible[SysLocale.DefaultLCID] := True;

// 根据需要新建或打开,这里新建一个WorkSheet
wb := xl.ActiveWorkbook;
if wb = nil then
wb := xl.Workbooks.Add(Null, SysLocale.DefaultLCID);
wb.Sheets.Add(Null, Null, 1, Null, SysLocale.DefaultLCID);
ws := wb.Sheets[1];
rg := ws.Cells.Resize[1,1];
......
finally
xl.Free;
end;
end;

进一步的细节自己去读$Delphi/Ocx/Servers/Excel97.Pas
 
后退
顶部