Phím tắt Google Bảng tính tùy chỉnh: di chuyển (các) hàng đã chọn Lên / Xuống / Trên / Kết thúc


8

Như tiêu đề đã nói, tôi di chuyển hàng rất nhiều và việc thiếu phím tắt mặc định làm phức tạp mọi thứ cho tôi ...

Tùy chọn kéo không thực tế khi tôi cần di chuyển một số hàng xuống dưới cùng của một bảng lớn!

Tôi đã cố gắng cho chúng tôi AutoHotKey, nhưng thật đau đớn vì nó di chuyển một hàng tại một thời điểm và mất nhiều thời gian để chạm đáy.

Vì vậy, tôi đang tìm kiếm một giải pháp JavaScript, có thể nếu ai đó có thể đưa tôi đi đúng hướng với mã ví dụ / tham chiếu cơ bản mà tôi có thể chỉnh sửa / mở rộng sau này để phù hợp với nhu cầu của mình ...

Ngoài ra, bất kỳ giải pháp thay thế nào tôi không nghĩ đến đều được chào đón.

Chỉnh sửa: Từ tiêu đề:

  • Lên: di chuyển hàng lên một hàng
  • Xuống: di chuyển hàng xuống một hàng
  • Trên cùng: di chuyển hàng lên trên cùng của trang tính (tất cả đường lên)
  • Kết thúc: di chuyển (các) hàng xuống cuối trang tính (tất cả các đường xuống, ở cuối các hàng không trống)

Các hàng có được di chuyển liên tiếp hay không? Ngoài ra, tiêu đề đề cập đến "lên / xuống / trên / kết thúc", nhưng trong bài viết bạn chỉ viết về việc di chuyển xuống dưới cùng. Tôi có thể đoán "top" đề cập đến điều gì, nhưng không biết về tăng / giảm,

@Norma: Tôi đã thêm một số giải thích. Đối với các hàng, giả sử đơn giản chúng là các hàng liên tiếp (ngay cả khi chúng không có, sẽ không phức tạp khi nhóm chúng trước khi di chuyển)
Enissay

Câu trả lời:


5

Kịch bản sau đây di chuyển các hàng liên tiếp được chọn theo một trong bốn cách được mô tả trong câu hỏi. Nó được kích hoạt bởi các mục menu tùy chỉnh (Tùy chỉnh> Di chuyển hàng ...) được tạo bởi onOpenchức năng bất cứ khi nào bảng tính được mở. Thật không may, không có cách nào để gán phím tắt cho các chức năng của tập lệnh.

Cấu trúc của các hàm rất đơn giản: chèn các hàng, sao chép phạm vi (bao gồm các công thức và định dạng), xóa bản sao cũ của phạm vi. Hàm trợ giúp getDataloại bỏ sự cần thiết phải lặp lại việc thu thập dữ liệu giống nhau trong mỗi bốn chức năng.

function onOpen() {
  var menu = [{name: "Move rows up", functionName: "moveUp"}, {name: "Move rows down", functionName: "moveDown"}, {name: "Move rows to top", functionName: "moveTop"}, {name: "Move rows to bottom", functionName: "moveBottom"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

function moveDown(){
  var d = getData(); 
  d.sheet.insertRowsAfter(d.row+d.height, d.height);
  d.selection.copyTo(d.sheet.getRange(d.row+d.height+1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row, d.height);
}

function moveBottom(){
  var d = getData(); 
  d.sheet.insertRowsAfter(d.last, d.height);
  d.selection.copyTo(d.sheet.getRange(d.last+1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row, d.height);
}

function moveUp(){
  var d = getData();
  d.sheet.insertRowsBefore(d.row-1, d.height);
  d.sheet.getRange(d.row+d.height, 1, d.height, d.width).copyTo(d.sheet.getRange(d.row-1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row+d.height, d.height);
}

function moveTop(){
  var d = getData(); 
  d.sheet.insertRowsBefore(1, d.height);
  d.sheet.getRange(d.row+d.height, 1, d.height, d.width).copyTo(d.sheet.getRange(1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row+d.height, d.height);
}              

function getData() {              
  var d = {};
  d.sheet = SpreadsheetApp.getActiveSheet();
  d.selection = d.sheet.getActiveRange();
  d.row = d.selection.getRowIndex();
  d.height = d.selection.getHeight();
  d.width = d.selection.getWidth();
  d.last = d.sheet.getLastRow();
  return d;
}

Mã ma thuật của bạn hoạt động như một lá bùa; Tuy nhiên, tôi đã tự hỏi nếu có một cách để đạt được những điều sau đây: 1.các hàng được di chuyển vẫn nên tập trung (được chọn) sau khi được di chuyển, bây giờ không phải là trường hợp đó; 2.khi các hàng được di chuyển, sẽ rất tuyệt nếu cửa sổ cuộn xuống / lên để theo dõi chúng; Câu hỏi chính đã được trả lời nhưng sẽ rất tuyệt nếu bạn làm cho nó hoàn hảo bằng cách thêm chúng (khá chắc chắn nhiều người cũng sẽ thấy nó hữu ích)
Enissay 3/2/2016

Được đánh dấu là đã chấp nhận, được miễn phí để thêm các điểm bổ sung sau nếu bạn cảm thấy thích :-)
Enissay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.