行高超过409不能显示全部内容的情况下,自动插入行并调整行高保证内容全部显示

半成品代码,对已经有合并单元格情况,未处理。

function Calculate_cell_text_height(end_row_index,end_columns_index){ //在没有合并单元格之前进行插入行操作。执行一次之后,再次执行,因为插入多余的行,会出现大面积空白区域		
let font_size_array = {9:7.7,10:9.2,11:10.7,12:12.2}  //9 10 11 12号字体对应的大小实 际  {9:7.5,10:9,11:10.5,12:12} ,数组中增加 0.2 余量,保证显示效果					
for(var rowindex=end_row_index;rowindex>=3;rowindex--){		
let cell_value2_array = [];	
let fontsizept = 0;
let require_cell_lines = 0; //按行计算每个单元格需要的最大行数
let maxrowlines = 0; // 记录最多的那个单元格还有多少行数没有显示出来
let rows_max_lines_array = [];
for(var columnindex =1;columnindex<=end_columns_index;columnindex++ ){	
let cell_value_rows = 0;  //每个单元格需要显示的行数	
//let matchs = ActiveWorkbook.wWorksheets.Item(1).Cells(rowindex,columnindex).Value2.match(new RegExp("\n","g"));
let ccell = Application.ActiveSheet.Cells.Item(rowindex,columnindex)	
fontsizept = font_size_array[ccell.Font.Size]+2;//每一个字猜测左右各有1磅空间,左右内边距合计2磅。上下内边距猜测也是2磅。
let maxlinechars =  Math.floor(ccell.Width /  fontsizept)           //每一行能显示的字符数	
console.log("第" +  rowindex + "行,第" + columnindex + "列能显示的最多字符数:"+maxlinechars)  
cell_value2_array = String(ccell.Value2).split("\n")   //每一个数组元素需要几行,从而计算出总共需要的行数	
for(var i=0;i<cell_value2_array.length;i++){	
cell_value_rows= cell_value_rows+ Math.ceil( cell_value2_array[i].length / maxlinechars) ; //单个单元格需要的总行数
}
console.log("第" +  rowindex + "行,第" + columnindex + "列单元格需要显示的最大行数:" + cell_value_rows)
require_cell_lines = Math.max(require_cell_lines,cell_value_rows)
let cell_maxrowlines = Math.floor(ccell.Height /  fontsizept)  //每一单元格能显示的最大行数	
console.log("第" +  rowindex + "行,第" + columnindex + "列单元格实际承载最大行数:" + cell_maxrowlines)	
if((require_cell_lines - cell_maxrowlines)>0 ){	
maxrowlines = Math.max(maxrowlines,require_cell_lines - cell_maxrowlines) //判断 还有多少行没有显示出来。只记录最多的那个单元格需要的行数	
}	 	
} //列循环结束	
console.log("第" +  rowindex + "行,最多未显示行数:" + maxrowlines)	
let crowheight = Application.ActiveSheet.Rows.Item(rowindex).RowHeight;
if((409.25 - crowheight) >= maxrowlines * fontsizept ){		 
Application.ActiveSheet.Cells.Rows.Item(rowindex).RowHeight = crowheight + maxrowlines * fontsizept;  //总行高不超过409,就直接调整行高	
}else{  //插入行,合并各单元格	
let mergecount = Application.Cells.Rows.Item(rowindex).Columns.Item(1).MergeArea.Count //判断 合并单元格的数量,后续功能需要自行完善。
let addlinescount = Math.ceil((maxrowlines * fontsizept) / 409.25 )	
console.log("addlinescount:"+addlinescount)	
Application.ActiveSheet.Cells.Rows.Item(rowindex+1).Resize(addlinescount).Insert();
for(var columnindex =1;columnindex<=end_columns_index;columnindex++ ){
Application.ActiveSheet.Range(Application.ActiveSheet.Cells.Item(rowindex,columnindex),Application.ActiveSheet.Cells.Item(rowindex+addlinescount,columnindex)).Merge()	
}		 
let pt = maxrowlines * fontsizept 	
for(var j =1 ; j<=addlinescount;j++ ){		
if(pt > 409.25 ){
Application.ActiveSheet.Cells.Rows.Item(rowindex+j).RowHeight = 409.25;
} else { 
Application.ActiveSheet.Cells.Rows.Item(rowindex+j).RowHeight = pt;
}
pt = pt-409.25;	
}		 
}		
} //行 循环结束		
}
function test(){	
Calculate_cell_text_height(16,8)	//少量行,执行速度还可以,大量的行,需要等待。
}
黑龙江省
浏览 204
收藏
4
分享
4 +1
3
+1
全部评论 3
 
亂雲飛渡
· 广东省
回复
 
HC.旋
点赞支持
· 福建省
回复
 
恰同学少年
执行效果。调整单元格列宽,让一部分内容不显示,就可以测试代码。因为代码不调整列宽,只调整行高。目前代码,在有插入行的情况下,对当前行的行高未做调整
· 黑龙江省
回复