急!!!如何向Excel Application Sheet的单元格中写入批注信息,另,如何……??? (100分)

  • 主题发起人 主题发起人 小宇飞刀
  • 开始时间 开始时间

小宇飞刀

Unregistered / Unconfirmed
GUEST, unregistred user!
急!!!各位大虾,小弟有如下几个问题请求急救。
1、可以用Edit.Text:=ExcelID.CELS[1,3].COMMENT.TEXT;语句从Excel Application
Sheet的单元格中读入批注信息,但不能用以如下语句写入批注信息,为何?
ExcelID.CELS[1,3].ADDCOMMENT;
ExcelID.CELS[1,3].COMMENT.TEXT:='ABC';

2、如何判断某一单元格是否已存在批注?
2、如何判断某一单元格在是否在某一Range中?
 
应该这样,你试试
ExcelOle_app.cells[2,2].addcomment;
ExcelOle_app.cells[2,2].comment.visible:=false;
ExcelOle_app.cells[2,2].Comment.Text('abc');
 
判断单元格在一个range中,你可以判断这个单元格(cell[a,b])的a是否是range的上
即可。
 
判断一个单元格是否有批注可以这样:
edit1.text:=excelOle_app.cells[2,2].comment.text;
if edit.text<>'' then
showmessgae('有批注');
 
to 745580:
谢谢!另外两个问题也请看看!

to 745614:
如果cell[2,2]没有批注,则运行edit1.text:=excelOle_app.cells[2,2].comment.text;
时将发生异常,如何解决!
 
这样,你可以建立一个全局数组,在那个单元格中写了批注的同时,给与这个单元格有一定
关连的数组来赋值,再次可以判断这个值,是,则给edit赋值;不是,则退出。
try
ExcelOle_app.cells[2,2].addcomment;
ExcelOle_app.cells[2,2].comment.visible:=false;
ExcelOle_app.cells[2,2].Comment.Text('afda');
s[0]:='abcd';
except;
end;


判断:
if s[0]='' then
begin
showmessage('ad');
edit2.text:=ExcelOle_app.cells[2,2].comment.text;
end;

 
to bbs_delphi:
问题是当再次读取此保存sheet之时该如何判断cells[2,2]中是否有批注。
 
上面的判断有一些问题
应该是:
if s[0]='abcd' then
begin
showmessage('ad');
edit2.text:=ExcelOle_app.cells[2,2].comment.text;
end;
 
to 747790:
不行啊,我要读取的是一个已保存的.xls文件,要判断其中的单元格是否有批注内容,
而当我们打开一个已保存的sheet时,数组还不存在或还未被赋值呢!!
 
让我想想,试试再说,呵呵,我也没办法了
 
好像是个数组,今天没时间了,明天再说,我们头来了,呵呵
 
我用的是delphi的servers控件,你如果用的是CreateOleObject方法原理上是一样的,只是
从语法上可以更方便一些. 在调试阶段会有错误异常,运行.exe就没问题了.

// 打开一个已有文件
procedure TForm1.Button7Click(Sender: TObject);
begin
xlApp.Connect;
xlBook.ConnectTo(xlApp.Workbooks.Open('E:/book1.xls',NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0));
xlSheet.ConnectTo(xlBook.Sheets[1] as _WorkSheet);
xlApp.Visible[0] := True;
end;

// 判断是否有批注的函数
function TForm1.HasComment(R : Range) : boolean;
var
comText, comStart, comOverwrite : OleVariant;
begin
comText := EmptyParam;
comStart := EmptyParam;
comOverwrite := False;
try
r.Comment.Text(comText,comStart,comOverwrite);
result := True;
except
result := False;
end;
end;

// 检查B1格有没有批注
procedure TForm1.Button8Click(Sender: TObject);
begin
if HasComment(xlSheet.Range['B1','B1']) then
edit1.text := 'has'
else
edit1.text := 'not has';
end;
 
后退
顶部