使用Delphi读取Excel单元格批注时如何判断是否存在批注?
搜索以前的帖子 发现有这么回答的
if ExcelWS.Cells.Item[11,6].Comment <> nil then
PZ:=ExcelWS.Cells.Item[11,6].Comment.Text(EmptyParam,EmptyParam,EmptyParam); 但是编译不过 [Error] MainF.pas(11727): Incompatible types
经测试.Comment 不能用 nil 来判断
请问是哪里出错了,还是有其他方法呢?
搜索以前的帖子 发现有这么回答的
if ExcelWS.Cells.Item[11,6].Comment <> nil then
PZ:=ExcelWS.Cells.Item[11,6].Comment.Text(EmptyParam,EmptyParam,EmptyParam); 但是编译不过 [Error] MainF.pas(11727): Incompatible types
经测试.Comment 不能用 nil 来判断
请问是哪里出错了,还是有其他方法呢?
procedure TForm1.Button13Click(Sender: TObject);
var
FExcel: Variant;
FWorkbook: Variant;
FWorksheet: Variant;
i, j: integer;
s: string;
//comText, comStart, comOverwrite : OleVariant;
begin
if not OpenDialog1.Execute then
exit;
Screen.Cursor := crHourGlass;
try
FExcel := CreateOleObject('excel.application');
except
Screen.cursor := crDefault;
MessageDlg('Could not start Microsoft Excel!', mtError, [mbCancel], 0);
Exit;
end;
try
FWorkBook := FExcel.WorkBooks.Open(OpenDialog1.Filename);
//FWorkSheet := FWorkBook.WorkSheets.Add;
FWorkSheet := FWorkBook.WorkSheets[1];
i := 5; j:= 3;//判断并读取第5行,第3列的注释
try
s := FWorkSheet.Cells[i, j].Comment.Text;
except
s := 'No Comment';//报异常表示没有注释
end;
{comText := EmptyParam;
comStart := EmptyParam;
comOverwrite := False;
try
s := FWorkSheet.Cells[i, j].Comment.Text(comText,comStart,comOverwrite);
except
s := 'Error';
end;} ShowMessage(s);
finally
Screen.Cursor := crDefault;
FWorkBook.Close;
FExcel.Quit;
end;
end;
except s := 'No Comment';//报异常表示没有注释
end;
使用后,程序运行时出现“ OLE error 800A03EC” 弹框。
求其他办法。
你使用的delphi, office版本是??
begin
try
begin
temp:=myworkbook.worksheets[1].cells.item[xlsi,5+i].comment.text ;
//ShowMessage(temp);
myworkbook.worksheets[1].cells.item[xlsi,5+i].clearcomments;
myworkbook.worksheets[1].cells.item[xlsi,5+i].addcomment(temp+';'+comment);
end;
except
begin
myworkbook.worksheets[1].cells[xlsi,5+i].addcomment(comment);
end;
end;
end;
顺便问一下,我现在给批注赋值是先清除,后添加。。怎样直接修改?
myworkbook.worksheets[1].cells.item[xlsi,5+i].comment.text :=temp+comment; 会报错
var
FExcel: Variant;
FWorkbook: Variant;
FWorksheet: Variant;
i, j: integer;
s: string;
//comText, comStart, comOverwrite : OleVariant;
begin
if not OpenDialog1.Execute then
exit;
Screen.Cursor := crHourGlass;
try
FExcel := CreateOleObject('excel.application');
except
Screen.cursor := crDefault;
MessageDlg('Could not start Microsoft Excel!', mtError, [mbCancel], 0);
Exit;
end;
try
FWorkBook := FExcel.WorkBooks.Open(OpenDialog1.Filename);
//FWorkSheet := FWorkBook.WorkSheets.Add;
FWorkSheet := FWorkBook.WorkSheets[1];
i := 5; j:= 2;
{try
s := FWorkSheet.Cells[i, j].Comment.Text;
except
s := 'No Comment';//
end;
ShowMessage(s);} try
FWorkSheet.Cells[i, j].addcomment;
except
end;
FWorkSheet.Cells[i, j].comment.visible:=false;
FWorkSheet.Cells[i, j].Comment.Text('abc123');//修改批注 {comText := EmptyParam;
comStart := EmptyParam;
comOverwrite := False;
try
s := FWorkSheet.Cells[i, j].Comment.Text(comText,comStart,comOverwrite);
except
s := 'Error';
end;}
finally
FExcel.DisplayAlerts := False;
FExcel.Save;//保存
Screen.Cursor := crDefault;
FWorkBook.Close;
FExcel.Quit;
end;
end;