SpreadJS设置只允许粘贴值同时,允许粘贴图片
一些用户有一些业务需求,从外部excel复制一些单元格,粘贴到SpreadJS 时,只允许粘贴值,不允许粘贴格式等。这时候可以设置
spread.options.allowCopyPasteExcelStyle = false设置此行代码后,发现从excel中复制图片后,无法在SpreadJS中进行粘贴。
如果此时既想保持只复制值,又想可以粘贴图片。为此有两个解决方案
一、在window对象上添加paste事件监听,获取粘贴流,判断此时是否包含图片,如果是的话,将其进行转化,用SpreadJS进行添加图片
window.addEventListener("paste", function (e) {
var clipboardData = e.clipboardData;
var blob = void 0, items = clipboardData.items;
var text = clipboardData.getData('text/plain');
if (text) {
return;
}
for (var i = 0; i < items.length; i++) {
if (items.type.indexOf("image") === 0) {
blob = items.getAsFile();
if (blob) {
break;
}
}
}
if (blob) {
var reader = new FileReader();
reader.onload = function (event) {
var img = new Image();
img.src = event.target.result;
img.onload = function () {
var spread = GC.Spread.Sheets.findControl("ss");
var sheet = spread.getActiveSheet();
let imgName = "image" + new Date().valueOf();
sheet.shapes.addPictureShape(imgName, img.src, 0, 0, img.width, img.height);
var pic = sheet.shapes.get(imgName);
pic.startRow(sheet.getActiveRowIndex());
pic.startColumn(sheet.getActiveColumnIndex());
};
};
reader.readAsDataURL(blob);
}
}, true);但是此方案的弊端是:使用代码执行的添加图片的操作无法进行撤回,即使用ctrl+z 快捷键无法撤回粘贴图片操作。
第二种方案是:
不设置allowCopyPasteExcelStyle
然后从外部excel中ctrl+C复制带格式的单元格时,此时可以在粘贴事件ClipboardPasted中清除其格式。此方案较为简单。
spread.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
const {pasteData, cellRange, sheet} = args
if (!pasteData.image) {
sheet.getRange(cellRange.row, cellRange.col, cellRange.rowCount, cellRange.colCount).setStyle(new GC.Spread.Sheets.Style());
}
});但是此方案的弊端是:原有的SpreadJS粘贴区域如果设置有样式,执行上述操作,也会同时将SpreadJS中设置好的样式清除。
综上所述,两种方案各有利弊,可以按需选择。
您好,第一种实现方法,用户在excel中选中三张图片进行粘贴,粘贴到设计器中会合并成一张图片,有什么解决办法吗 您好,由于没有复现您的问题,
您可以新发一个帖子,对此问题进行详细描述,
页:
[1]