Winny 发表于 2022-1-20 12:30:31

GCExcel5.0新特性 - 上下文批注(Threaded Comments)

本帖最后由 Winny 于 2022-1-27 09:45 编辑

常见的表格产品提供了插入批注的功能,具体的展现形式如下:

使用该功能,不同的用户可以对同一区域的内容做出解释说明,建立对话。GCExcel5.0对该功能进行了支持。
下面介绍该功能的一些使用说明:
1. 使用IWorksheet.CommentsThreaded来获取工作表上的所有上下文批注集合,集合中的顺序先按行排序,再按列顺序;
2. 使用IRange.AddCommentThreaded(String text,String author)将新的批注添加到对应区域中,如果author为空,则批注会使用集合列表中的最后一位作者,如果集合列表为空,则添加一个空的author;
3. 使用Icommentsthread从上下文批准列表中按索引获取批注;
4. 使用ICommentsThreaded.Count可获取当前工作表中上下文批注的数量;
5. 使用ICommentThreaded.IsResolved获取或设置上下文批注的锁定状态,如果IsResolved为true,则禁止对批注进行编辑和回复;
6. 使用ICommentThreaded.Text获取或设置批注的文本内容。如果IsResolved为true,则在设置内容时抛出InvalideException;
7. 使用ICommentThreaded.Replies获取指定批注的所有答复,答复按照时间戳排序,如果某一批注本身是回复,则返回null;
8. 使用ICommentThreaded.Date以获取一个日期,该日期表示在本地时间中添加上下文批注的日期和时间;
9. 使用ICommentThreaded.Next()获取下一条上下文批注(答复),如果当前sheet中只有一条批注或当前批注是最后一条,返回null。如果当前批注是某一个批注的最后一个回复,也返回null;
10. 使用ICommentThreaded.Previous()获取前一条批注(答复),如果当前sheet中只有一条批注,则返回null,如果当前批注是某一批注的第一条回复,也返回null;
11. 使用ICommentThreaded.Parent获取当前回复的父对象(如果当前批注是一个回复),如果该上下文批注为顶级批注,返回null;
12. 使用ICommentThreaded.AddReply(String text,String author=null)向上下文批注添加回复。如果当前批注是顶级批注,它将向其“回复”集合添加回复。
如果当前批注是回复,它将向其父级的回复集合添加回复;
13. 使用ICommentThreaded.Delete()删除指定的批注,如果当前批注是顶级批注,则删除该批注的同时,删除与之关联的回复。如果当前批注是一个回复,则从它的父级答复列别中删除本身;
14. 使用ICommentThreaded.Author来获取批注的作者。
15. 使用 IAuthor.Name来设置或获取批注的名称;
16. 导出Html时支持上下文批注;
17. 导出json时支持线程注释;
18. 导出PDF/图像时不支持上下文批注。

需要注意的是,由于SpreadJS目前并不支持上下文批注,因此在到处json时,GCExcel会将批注转为普通注释。
与之相关的API有以下几个:
public interface IWorksheet
{
//获取当前WorkSheet中的所有上下文对象
ICommentsThreaded CommentsThreaded { get; }
}public interface IRange
{
//清空当前区域的上下文批注
void ClearCommentsThreaded();
//当前区域添加批注
ICommentThreaded AddCommentThreaded(string text, string author = null);public interface IAuthor
{
//获取批注作者名称
string Name { get; set; }
}public interface ICommentsThreaded
{
//获取特定索引的批注
ICommentThreaded this { get; }
//获取批注数量
int Count { get; }
}public interface ICommentThreaded
{
//当前批注添加回复
ICommentThreaded AddReply(string text, string author = null);
//删除批注或回复
void Delete();
// 设置或获取批注锁定状态
bool IsResolved { get; set; }
//获取或设置批注内容
string Text { get; set; }
//获取批注回复的集合
ICommentsThreaded Replies { get; }
//获取批注作者名称
IAuthor Author { get; }
//获取批注添加时间
DateTime Date { get; }//获取下一条批注,如果当前批注是sheet中的最后一个顶层批注,返回null。如果当前批注是最后一个回复,也返回null。
ICommentThreaded Next();//获取上一条批注,如果当前批注是sheet中第一个顶层批注,返回null。如果当前批注是第一个回复,也返回null。
ICommentThreaded Previous();
// 获取父级批注
ICommentThreaded Parent { get; }
}最后,提供一个简单的测试用例:Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getActiveSheet();
//Add a threaded comment
ICommentThreaded commentThreaded =worksheet.getRange("A1").addCommentThreaded("Test CommentThreaded to json01","Winny");
ICommentThreaded reply = commentThreaded.addReply("hello Winny","memo");      
workbook.save("out.xlsx");在搭建好的java项目中运行上述代码之后,将生成的文件打开,展示效果如下:
相关的一些其它API如下所示:
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getActiveSheet();
//添加批注
ICommentThreaded commentThreaded = worksheet.getRange("A1").addCommentThreaded("Test CommentThreaded to json01","Winny");
//当前批注添加回复
ICommentThreaded reply01 = commentThreaded.addReply("hello Winny","memo");
ICommentThreaded reply02 = commentThreaded.addReply("Hi memo","Winny");
ICommentThreaded reply03 = commentThreaded.addReply("this is a cat","Mario");
//添加批注
worksheet.getRange("B1").addCommentThreaded("Test CommentThreaded to json02", "Dextor");
//获取当前sheet中的所有批注
ICommentsThreaded comments = worksheet.getCommentsThreaded();
//获取批注数量
int count = comments.getCount();
//获取第一个批注
ICommentThreaded comment0 = comments.get(0);
//获取当前批注的所有回复
ICommentsThreaded replies = comment0.getReplies();
//获取当前批注的回复总数量
int count02 = replies.getCount();
//获取当前批注的第三个回复
ICommentThreaded replay01 = replies.get(2);
//获取当前批注(回复)的下一条批注(回复),如果已经是最后一条,返回null
ICommentThreaded nextComment =comment0.next();
//获取当前批注(回复)的上一条批注(回复),如果已经是最后一条,返回null
ICommentThreaded preComment = comment0.previous();
//获取回复的顶级批注
ICommentThreaded parent = replay01.getParent();


bakefish 发表于 2022-1-28 10:36:50

这个功能很有用,我们自己做了一个前后端结合的,期待spreadjs早点能上去

Clark.Pan 发表于 2022-1-28 14:59:32

您的建议我们会反馈给产品部门,感谢您的宝贵建议。

树上摇摆的猪 发表于 2022-2-15 15:28:35

Clark.Pan 发表于 2022-1-28 14:59
您的建议我们会反馈给产品部门,感谢您的宝贵建议。

ICommentsThreaded和IComment两个有什么关系?

Clark.Pan 发表于 2022-2-15 16:30:23

ICommentsThreaded是有上下文的批注,IComment是普通批注,没有上下文
页: [1]
查看完整版本: GCExcel5.0新特性 - 上下文批注(Threaded Comments)