Browse Source

API setauto rowheight

master
Smillence 4 years ago
parent
commit
5c046ad894
  1. 2
      .gitignore
  2. 6
      src/global/api.js
  3. 51
      src/global/getRowlen.js
  4. 5
      src/global/rhchInit.js

2
.gitignore

@ -3,3 +3,5 @@ node_modules
package-lock.json package-lock.json
dist dist
docs/.vuepress/dist docs/.vuepress/dist
.idea

6
src/global/api.js

@ -1332,7 +1332,7 @@ export function showColumn(startIndex, endIndex, options = {}) {
/** /**
* 设置指定行的高度 * 设置指定行的高度优先级最高高于默认行高和用户自定义行高
* @param {Object} rowInfo 行数和高度对应关系 * @param {Object} rowInfo 行数和高度对应关系
* @param {Object} options 可选参数 * @param {Object} options 可选参数
* @param {Number} options.order 工作表索引默认值为当前工作表索引 * @param {Number} options.order 工作表索引默认值为当前工作表索引
@ -1363,11 +1363,15 @@ export function setRowHeight(rowInfo, options = {}) {
if(parseInt(r) >= 0){ if(parseInt(r) >= 0){
let len = rowInfo[r]; let len = rowInfo[r];
if (len === 'auto') {
cfg['rowlen'][parseInt(r)] = len
} else {
if(Number(len) >= 0){ if(Number(len) >= 0){
cfg['rowlen'][parseInt(r)] = Number(len); cfg['rowlen'][parseInt(r)] = Number(len);
} }
} }
} }
}
file.config = cfg; file.config = cfg;

51
src/global/getRowlen.js

@ -6,7 +6,15 @@ import { hasChinaword, isRealNull,checkWordByteLength } from './validate';
import { isInlineStringCell } from '../controllers/inlineString'; import { isInlineStringCell } from '../controllers/inlineString';
import Store from '../store'; import Store from '../store';
//计算范围行高 /**
* 计算范围行高
*
* @param d 原始数据
* @param r1 起始行
* @param r2 截至行
* @param cfg 配置
* @returns 计算后的配置
*/
function rowlenByRange(d, r1, r2, cfg) { function rowlenByRange(d, r1, r2, cfg) {
let cfg_clone = $.extend(true, {}, cfg); let cfg_clone = $.extend(true, {}, cfg);
if(cfg_clone["rowlen"] == null){ if(cfg_clone["rowlen"] == null){
@ -72,6 +80,46 @@ function rowlenByRange(d, r1, r2, cfg) {
return cfg_clone; return cfg_clone;
} }
//根据内容计算行高
function computeRowlenByContent(d, r) {
let currentRowLen = 0;
let canvas = $("#luckysheetTableContent").get(0).getContext("2d");
canvas.textBaseline = 'top'; //textBaseline以top计算
for(let c = 0; c < d[r].length; c++){
let cell = d[r][c];
if(cell == null || cell.mc != null){
continue;
}
if(cell != null && (cell.v != null || isInlineStringCell(cell)) ){
let cellWidth = colLocationByIndex(c)[1] - colLocationByIndex(c)[0] - 2;
let textInfo = getCellTextInfo(cell, canvas,{
r:r,
c:c,
cellWidth:cellWidth
});
let computeRowlen = 0;
if(textInfo!=null){
computeRowlen = textInfo.textHeightAll+2;
}
//比较计算高度和当前高度取最大高度
if(computeRowlen > currentRowLen){
currentRowLen = computeRowlen;
}
}
}
return currentRowLen;
}
//计算表格行高数组 //计算表格行高数组
function computeRowlenArr(rowHeight, cfg) { function computeRowlenArr(rowHeight, cfg) {
let rowlenArr = []; let rowlenArr = [];
@ -1614,6 +1662,7 @@ function drawLineInfo(wordGroup, cancelLine,underLine,option){
export { export {
rowlenByRange, rowlenByRange,
computeRowlenByContent,
computeRowlenArr, computeRowlenArr,
getCellTextSplitArr, getCellTextSplitArr,
getMeasureText, getMeasureText,

5
src/global/rhchInit.js

@ -1,4 +1,5 @@
import Store from '../store'; import Store from '../store';
import { computeRowlenByContent } from './getRowlen';
import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting'; import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';
export default function rhchInit(rowheight, colwidth) { export default function rhchInit(rowheight, colwidth) {
@ -20,6 +21,10 @@ export default function rhchInit(rowheight, colwidth) {
continue; continue;
} }
// 自动行高计算
if (rowlen === 'auto') {
rowlen = computeRowlenByContent(Store.flowdata, r);
}
Store.rh_height += Math.round((rowlen + 1) * Store.zoomRatio); Store.rh_height += Math.round((rowlen + 1) * Store.zoomRatio);
Store.visibledatarow.push(Store.rh_height); //行的临时长度分布 Store.visibledatarow.push(Store.rh_height); //行的临时长度分布

Loading…
Cancel
Save