麒麟、UOS系统在线打开word文件并提取修订痕迹

麒麟、UOS系统在线打开word文件并提取修订痕迹

注意

本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

在实际应用中,为了方便查找和定位当前页面的某个痕迹,通常采用将当前文档中的所有痕迹遍历,并以列表方式显示到当前页面某个位置。

一般需要显示的痕迹属性包括:痕迹的用户名,痕迹的内容,痕迹的日期时间等。PageOffice 客户端控件提供了 RevisionsAsJson 对象来实现对痕迹的遍历。

RevisionsAsJson

  • author 代表当前痕迹的用户名
  • date 代表当前痕迹的日期
  • type 代表痕迹的类型
  • GetTextFromRevision 代表痕迹的文本内容

后端代码

本示例无后端关键代码。

前端代码

javascript 复制代码
//获取痕迹列表,返回一组痕迹的<li>标签`
`function`  `getRevisionList`(``){
	`var` revisionList = `""`;
	`var` revisionsJson=pageofficectrl.`word`.`RevisionsAsJson`;
	`var` revisionObj = `JSON`.`parse`(revisionsJson);
	`//遍历痕迹`
	`for`(`var` key `in` revisionObj){
		`let` str = `''`;
		`let` revisionAuthor = revisionObj[key].`author`; `//author属性为当前痕迹的用户名`
		`let` revisionDate = revisionObj[key].`date`; `//date属性为当前痕迹的日期`
		str = `dateFormat`(revisionDate, `'[yyyy-MM-dd HH:mm]'`) + revisionAuthor + `':'`;
		`if` (revisionObj[key].`type` === `1`) { `//type代表当前痕迹的类型为"插入"类型`
			`let` revisionType = `'插入'`;
			`let` revisionTxt = pageofficectrl.`word`.`GetTextFromRevision`(`parseInt`(revisionObj[key].`id`));`//获取当前痕迹的文本内容`
			str = str + revisionType +`':'` + revisionTxt;
		}
		`else` `if` (revisionObj[key].`type` === `2`) { `//type代表当前痕迹的类型为"删除"类型`
			`let` revisionType = `'删除'`;
			`let` revisionTxt = pageofficectrl.`word`.`GetTextFromRevision`(`parseInt`(revisionObj[key].`id`));
			str = str + revisionType +`':'` + revisionTxt;
		}
		`else` {
			`let` revisionType = `'调整格式或样式。'`;
			str = str + revisionType ;
		}
		revisionList += `"<li><a href='#' onclick='goToRevision("` + key + `")'>"` + str + `"</a></li>"`;
	}
	`return` revisionList;
}
`//定位到一个痕迹`
`function` `goToRevision`(`key`) {
	pageofficectrl.`word`.`SelectRevision`(key);
}
`function` `dateFormat`(`date, format`) {
	date = `new` `Date`((date-`25569`)*`86400`*`1000`);
	date = `roundTimeToSeconds`(date);
	date.`setHours`(date.`getHours`() - `8`);
	`var` o = {
		`'M+'`: date.`getMonth`() + `1`, `//month`
		`'d+'`: date.`getDate`(), `//day`
		`'H+'`: date.`getHours`(), `//hour`
		`'m+'`: date.`getMinutes`(), `//minute`
		`'s+'`: date.`getSeconds`(), `//second`
		`'q+'`: `Math`.`floor`((date.`getMonth`() + `3`) / `3`), `//quarter`
		`'S'`: date.`getMilliseconds`() `//millisecond`
	};
	`if` (`/(y+)/`.`test`(format))
		format = format.`replace`(`RegExp`.`$1`, (date.`getFullYear`() + `''`).`substr`(`4` - `RegExp`.`$1`.`length`));
	`for` (`var` k `in` o)
		`if` (`new` `RegExp`(`'('` + k + `')'`).`test`(format))
			format = format.`replace`(`RegExp`.`$1`, `RegExp`.`$1`.`length` == `1` ? o[k] : (`'00'` + o[k]).`substr`((`''` + o[k]).`length`));
	`return` format;
}
`function` `roundTimeToSeconds`(`date`) {
	`var` seconds = date.`getSeconds`();
	`if` (seconds < `30`) {
		date.`setSeconds`(`0`);
	} `else` {
		date.`setSeconds`(`0`);
		date.`setMinutes`(date.`getMinutes`() + `1`);
	}
	`return` date;
}
`// 把所有痕迹的<li>标签放到一个<ul>中`
`function` `refreshList`(``) {
	`document`.`getElementById`(`"ul_Comments"`).`innerHTML` = `getRevisionList`();
}
`

效果:

参考链接:https://www.pageoffice.cn/pages/a124a0/

相关推荐
taller_200024 分钟前
VBA之正则表达式(45)-- 拆分材料和规格
正则表达式·正则·数据清洗·提取数据·材料规格
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 59: 字母大小写全排列、优美的排列
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
workflower1 小时前
将图片中的图形转换为可编辑的 PPT 图形
java·开发语言·tomcat·powerpoint·个人开发·结对编程
卡戎-caryon2 小时前
【Java SE】06. 数组
java·开发语言
想躺平的咸鱼干2 小时前
Spring AI Alibaba
java·人工智能·spring
老华带你飞3 小时前
学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生信息管理系统
聪明的笨猪猪3 小时前
Java SE “泛型 + 注解 + 反射”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
磨十三3 小时前
C++ 类型转换全面解析:从 C 风格到 C++ 风格
java·c语言·c++
Zzzzmo_3 小时前
Java数据结构:ArrayList与顺序表2
java·数据结构
Fency咖啡3 小时前
Spring 基础核心 - SpringMVC 入门与请求流程
java·后端·spring·mvc