本人最近被一些幽默的要求手写的作业烦恼,看到网上类似的脚本都是用VB实现的,对于初学者可能不太友好,所以自己学了几个小时的WPS宏,写了个脚本来仿制手写体
首先展示下效果:
修改前:
修改后:
需要的代码自取,粘贴到开发者工具就行,具体怎么用开发者工具自行百度:
function editAllTableText()
{
//default字体config树
//1.单逻辑变化权重(grow:shrink = 1:1)
var fontSize = [1000,1000];
//2.字体种类
var fontType = ["还原手写现场","冬草体","还原手写现场","小楼又雨君知否","冬草体"];
//3.字体间距
var lineDiv = [12,13,20,7,12];
//----->遍历文档的每个字符和段落,并随机设置它们的字体、大小和间距
let count = Application.ActiveDocument.Tables.Count;
for(let i = 1;i<=count;i++){
//获取每一个表格
let table = Application.ActiveDocument.Tables.Item(i);
let rowCount = table.Rows.Count;
//获取每一行
for(let j=1;j<=rowCount;j++){
let rowContent = table.Rows.Item(j);
let cellCount = table.Rows.Item(j).Cells.Count;
for (let k=1;k<=cellCount;k++){
// 获取每一行的cells
let cell = table.Rows.Item(j).Cells.Item(k);
//获取每一个cell中的文本集合
let textVal = cell.Range.Characters;
//随机修改文字大小,实现模仿手写的随机大小
//同时随机修改文字字体,实现模仿手写时候的字体变化
var textCount = textVal.Count;
var growTimer = 0;
for(let m=1;m<textCount;m++){
//获取文本集合中的每一个文字
let character = textVal.Item(m);
character.Font.Name = fontType[Math.floor(Math.random()*3)+1];
if(Math.floor(Math.random()*2000)+1>=1000){
if(growTimer>2){
m--;
growTimer--;
continue;
}
character.Font.Grow();
growTimer++;
}
else if(Math.floor(Math.random()*2000)+1<1000)
{
if(growTimer<=0){
m--;
growTimer++;
continue;
}
character.Font.Shrink();
growTimer--;
}
/*if(Math.floor(Math.random()*2000)+1>=1000){
character.Font.Spacing += lineDiv[Math.floor(Math.random()*3)+1];
}
else {
character.Font.Spacing -= lineDiv[Math.floor(Math.random()*3)+1];
}*/
}
}
}
}
}
常见问题解答:
1.我想用其他字体怎么办:
自行下载,然后把代码开头数组里的名字换成你的字体名字就行
2.实现的效果不明显怎么办:
多跑几遍,代码很垃圾,之后修改好了会分享更完善的版本
3.我想修改其他地方怎么办:
改一下遍历的逻辑就行,需要改什么就遍历什么,后面也会发布更加完善的版本,毕竟这个东西一开始弄出来就是服务我自己的