Làm cách nào để chỉ định toàn bộ trang tính dưới dạng phạm vi trong Google Sheets?


27

Cách giải quyết tốt nhất mà tôi đã tìm thấy cho đến nay là:

worksheet_name!$A$1:$YY

nhưng lý tưởng là tôi muốn có thể viết đơn giản, vd:

worksheet_name!

Vì vậy, có ai biết: có một cú pháp để chỉ định toàn bộ trang tính là một phạm vi không?

Câu trả lời:


10

Tôi đã tạo một đoạn mã Google Apps Script (GAS) nhỏ để thực hiện công việc cho bạn.

function sheetRange(targetName,int) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var asName = ss.getActiveSheet().getSheetName();
  var tgSheet = ss.getSheetByName(targetName);
  var output;

  if(targetName == asName) {
    output = "Error: target sheet is active sheet !!";
  } else {
    switch(int) {
      case 1: 
        output = tgSheet.getDataRange().getValues();
        break;
      case 2:
        output = tgSheet.getSheetValues(1, 1, tgSheet.getMaxRows(),  
          tgSheet.getMaxColumns());
        break;
      default:
        output = "Choose int to be 1 or 2 !!";
    }
  }
  return output;
}

Trong menu bảng tính, chọn Công cụ> Trình chỉnh sửa tập lệnh và thêm mã. Đảm bảo nhấn nút lỗi:
nhập mô tả hình ảnh ở đây

Sử dụng

=sheetRange("sheetName",int)

Sử dụng inttùy chọn như được giải thích dưới nhận xét.

Thí dụ

Tôi đã tạo một tệp ví dụ cho bạn: Sheet as Range

Nhận xét

Trong trường hợp này, có hai cách để xác định phạm vi trong bảng tính thông qua GAS:

  1. int=1; Thông qua getDataRangephương pháp. Điều này sẽ lấy một phạm vi, trong đó cột cuối cùng là cột có dữ liệu trong đó. Các tài khoản tương tự cho số lượng hàng. Đây thường là con đường đơn giản nhất. Xem tờ thứ hai trong tập tin ví dụ.
  2. int=2; Thông qua getSheetValuesphương pháp. Điều này sẽ lấy ra một phạm vi "WYSIWYG". Xem tờ thứ ba trong tập tin ví dụ.
  3. Làm mới tốc độ của các loại chức năng tùy chỉnh này không phải là ngay lập tức, vì vậy hãy kiên nhẫn. Có thể mất vài giờ để dữ liệu được làm mới.

Tài liệu tham khảo


Tại sao phải mất vài giờ để chức năng này hiển thị dữ liệu được làm mới? Tôi nghĩ rằng toàn bộ quan điểm của việc sử dụng một chức năng như thế này sẽ luôn luôn có phạm vi chính xác?
ClearCloud8

1
Giải pháp sử dụng getSheetValues ​​() nhanh hơn 20% so với sử dụng getDataRange () với getValues ​​(). Đã thử nghiệm với tấm chứa 38k tế bào.
Mark Witczak

11

Bạn có thể sử dụng A: Z hoặc A: AB hoặc A: XX (với XX là cột cuối cùng của trang của bạn):

Ảnh chụp màn hình của việc sử dụng này để áp dụng định dạng có điều kiện cho các hàng dựa trên giá trị của một ô


1
Ist chết: "Denk Mal Neu"? Làm thế nào để trả lời câu hỏi này?
Jacob Jan Tuinstra

1
Mọi người ở đây đều biết cách chỉ định một phạm vi. Đây không phải là câu hỏi.

3

Google Sheets không có cú pháp phạm vi cho toàn bộ phạm vi trang tính.

Công thức sau đây sẽ trả về địa chỉ phạm vi của toàn bộ trang có tên Sheet1

="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)

Để sử dụng nó làm tài liệu tham khảo, hãy đặt nó bên trong INDIRECT. Công thức sau đây sẽ trả về một mảng của tất cả các giá trị trong Sheet1.

= ArrayFormula (
  GIÁN TIẾP(
    "Tờ1!"
    & ĐỊA CHỈ (1,1 ,, THẬT)
    & ":"
    & ĐỊA CHỈ (ROWS (Trang tính 1! A: A), CỘT (Trang tính 1! 1: 1) ,, THẬT)
    ,
    THẬT
  )
)

1

Tôi không biết một công cụ cụ thể, nhưng tôi nghĩ bạn có thể sử dụng một số công thức nếu bạn không biết số lượng hàng / cột:

indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))

Đây Sheetlà tên trang tính của bạn và @là một chuỗi tùy ý. Nếu trang tính bạn chọn có @trong một ô, nó sẽ không hoạt động. Bạn có thể thay thế nó bằng một ký tự khác nếu bao giờ trang tính chứa một ô như vậy.

COUNITFđây đếm số lượng hàng trong cột A: A không chứa @, sẽ là tất cả nếu không có ô nào chứa nó và INDIRECTbiến đổi Sheet!1:###(trong đó ###số lượng hàng) thành một phạm vi được chọn thực tế.


Tôi đánh giá cao nỗ lực này, nhưng theo như tôi có thể nói, đề xuất của bạn không mang lại lợi thế nào cho cách giải quyết mà tôi đã đề cập trong câu hỏi của mình, nhưng có nhược điểm là dài dòng hơn và yêu cầu người dùng nhập một ký tự sẽ không bao giờ xuất hiện trong tờ.
sampablokuper

@sampablokuper Về việc nó dài dòng, tôi không nghĩ mình có thể tìm ra giải pháp cho điều đó, vì phần thứ hai, tôi đã bỏ qua một cái gì đó mà bây giờ tôi đã thêm vào câu trả lời của mình. Ngoài ra, theo như tôi có thể thấy, lợi thế của nó so với cách giải quyết hiện tại của bạn là bạn không cần biết có bao nhiêu hàng hoặc cột mà trang tính có. Nhưng vâng, đó là tất cả những gì nó có được :( Có lẽ người ta có thể tạo ra một chức năng từ một kịch bản VBA.
Jerry

Cảm ơn, nhưng cách giải quyết hiện tại của tôi không yêu cầu người ta phải biết có bao nhiêu hàng, cũng như có bao nhiêu cột miễn là nó có <676 cột.
sampablokuper

1

Những câu trả lời tốt nhất đã được đưa ra cho những người đang hoạt động trong phần ứng dụng, nhưng nếu có ai đó đang làm việc trong Google Sheets, thì đây là một cách tiếp cận có thể phù hợp với nhu cầu của bạn:

"worksheet_name!1:" & ROWS(worksheet_name!A:A)

Giải thích : * Về cơ bản, bạn chỉ định phạm vi thông qua một chuỗi được nối với số lượng hàng trong sheet_name!

Một số ưu điểm của phương pháp này : * Đó là 'động' ... nếu bạn thêm hàng vào dưới cùng, phạm vi sẽ điều chỉnh tương ứng * Nhẹ - bạn có thể đưa điều này vào hàm nhập / truy vấn

Nhược điểm : * Không thử trong mọi trường hợp nên chỉ có thể hoạt động cho các trường hợp sử dụng cụ thể * Cá nhân tôi có sở thích làm cho mọi thứ trở nên năng động / sạch sẽ, do đó, một chức năng tùy chỉnh sắp xếp sẽ là điểm trung gian tốt giữa ứng dụng và phương pháp nhẹ này


1

Điều này làm việc cho tôi:

var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();

Được sử dụng trong tập lệnh bị ràng buộc, kết hợp tên trang tính với dấu "!" và sau đó nhận ký hiệu A1 của phạm vi dữ liệu trên trang tính đã chọn


0

Tôi đã có thể chọn toàn bộ trang tính bằng cách đặt tên cho phạm vi là trang tính mà không có dấu chấm than.

Tôi đã có một tab tên dữ liệu. Thay vì sử dụng dữ liệu! hoặc dữ liệu! A1: ZZ.


Khi chúng ta gán tên cho một phạm vi được đặt tên, tham chiếu phạm vi phải được chỉ định. Phạm vi tham chiếu nào bạn đã sử dụng?
Rubén

-1

Để chỉ định toàn bộ trang tính dưới dạng phạm vi, vui lòng sử dụng:

worksheet_name!A1:ZZ

bạn có thể dùng thử tại đây: https://developers.google.com/sheet/api/reference/rest/v4/siversesheet.values/clear

hoặc nếu bạn sử dụng Java (để xóa mọi thứ trong Trang tính 1):

Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();

hoặc nếu bạn chỉ muốn sử dụng nó trong một công thức (ví dụ: SUM) trên một trang tính khác (ví dụ: Trang tính 2), bạn có thể sử dụng tài liệu tham khảo sau:

=SUM(Sheet1!A1:ZZ)

^ Này sẽ tổng hợp tất cả các tế bào đang tồn tại trên Sheet1 và đặt giá trị trong một tế bào trên Sheet2, bạn có thể tìm thấy những ví dụ ở đây: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . Trong ví dụ này, chúng tôi có 3 cột và 5 hàng trên Sheet1, vì vậy công thức này = SUM (Sheet1! A1: ZZ) chọn tất cả chúng. Bạn có thể thêm hàng hoặc cột trên Sheet1 và giải pháp này vẫn sẽ chọn tất cả các ô.

PS: nếu bạn bỏ phiếu cho câu trả lời của tôi - vui lòng giải thích tại sao.


-2

Giả sử bạn biết số lượng hàng, bạn có thể đặt tên cho toàn bộ trang tính là "sheet_name":

CÁC BƯỚC:

  1. Chọn toàn bộ bảng tính
  2. Nhấp vào 'Dữ liệu' -> 'Phạm vi được đặt tên và được bảo vệ'
  3. Nhập "sheet_name" để đặt tên cho lựa chọn và nhấp Xong.

Bây giờ mỗi khi bạn sử dụng "sheet_name" trong một hàm, nó sẽ tham chiếu toàn bộ trang tính.


4
Phương pháp của bạn sẽ dẫn đến một phạm vi "ảnh chụp nhanh". Thêm cả hai cột hoặc hàng sẽ không thay đổi phạm vi được đặt tên !!
Jacob Jan Tuinstra
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.