วิธีแก้ปัญหาที่ดีที่สุดที่ฉันได้พบคือ:
worksheet_name!$A$1:$YY
แต่ความนึกคิดฉันต้องการที่จะสามารถเขียนเช่น:
worksheet_name!
ดังนั้นใครรู้: มีไวยากรณ์สำหรับการระบุทั้งแผ่นเป็นช่วงหรือไม่
วิธีแก้ปัญหาที่ดีที่สุดที่ฉันได้พบคือ:
worksheet_name!$A$1:$YY
แต่ความนึกคิดฉันต้องการที่จะสามารถเขียนเช่น:
worksheet_name!
ดังนั้นใครรู้: มีไวยากรณ์สำหรับการระบุทั้งแผ่นเป็นช่วงหรือไม่
คำตอบ:
ฉันได้สร้างข้อมูลโค้ด Google Apps Script (GAS) ขนาดเล็กเพื่อทำงานให้คุณ
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;
}
ในเมนูสเปรดชีตเลือกเครื่องมือ> ตัวแก้ไขสคริปต์และเพิ่มรหัส อย่าลืมกดปุ่มบั๊ก:
=sheetRange("sheetName",int)
ใช้int
ตัวเลือกตามที่อธิบายไว้ในหมายเหตุ
ฉันได้สร้างไฟล์ตัวอย่างคุณ: Sheet as Range
ในกรณีนี้มีสองวิธีในการกำหนดช่วงในสเปรดชีตผ่าน GAS:
int=1
; ผ่านgetDataRange
วิธีการ สิ่งนี้จะดึงช่วงซึ่งคอลัมน์สุดท้ายเป็นช่วงที่มีข้อมูลอยู่ บัญชีเดียวกันสำหรับจำนวนแถว นี่เป็นเส้นทางที่ตรงไปตรงมาที่สุด ดูชีตที่สองในไฟล์ตัวอย่างint=2
; ผ่านgetSheetValues
วิธีการ สิ่งนี้จะดึงข้อมูลช่วง "WYSIWYG" ดูแผ่นงานที่สามในไฟล์ตัวอย่างGoogle ชีตไม่มีไวยากรณ์ของช่วงสำหรับทั้งชีต
สูตรต่อไปนี้จะคืนค่าที่อยู่ช่วงของชีตทั้งหมดที่ชื่อ Sheet1
="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)
หากต้องการใช้เป็นข้อมูลอ้างอิงให้ใส่ไว้ด้านในของ INDIRECT สูตรต่อไปนี้จะส่งคืนอาร์เรย์ของค่าทั้งหมดใน Sheet1
= ARRAYFORMULA ( ทางอ้อม( "Sheet1!" และที่อยู่ (1,1, TRUE) และ ":" และที่อยู่ (แถว (Sheet1 A: A) คอลัมน์ (Sheet1 1: 1) ,, TRUE) , TRUE ) )
ฉันไม่รู้จักที่เฉพาะเจาะจง แต่ฉันคิดว่าคุณสามารถใช้สูตรบางอย่างได้หากคุณไม่ทราบจำนวนแถว / คอลัมน์:
indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))
นี่Sheet
คือชื่อชีตของคุณและ@
เป็นสตริงโดยพลการ หากแผ่นงานที่คุณเลือกมี@
อยู่ในเซลล์เดียวมันจะไม่ทำงาน คุณสามารถแทนที่ด้วยอักขระอื่นได้หากแผ่นงานมีเซลล์ดังกล่าว
COUNITF
นี่นับจำนวนแถวในคอลัมน์ A: A ไม่ได้มี@
ซึ่งควรจะทุกคนถ้ามีเซลล์ที่มีไม่มีมันและINDIRECT
การแปลงSheet!1:###
(ซึ่ง###
เป็นจำนวนแถว) เป็นช่วงที่เลือกที่เกิดขึ้นจริง
คำตอบที่ดีที่สุดได้รับการตอบรับแล้วสำหรับผู้ที่ใช้งานภายใน appcript แต่ถ้ามีใครที่ทำงานใน Google ชีทได้ถูกต้องแล้วนี่เป็นวิธีการที่เหมาะสมกับความต้องการของคุณ:
"worksheet_name!1:" & ROWS(worksheet_name!A:A)
คำอธิบาย : * คุณกำลังระบุช่วงโดยใช้สตริงที่ต่อเชื่อมกับจำนวนแถวในworksheet_name!
ข้อได้เปรียบบางประการของวิธีการนี้ : * เป็น 'ไดนามิก' ... หากคุณเพิ่มแถวที่ด้านล่างช่วงจะปรับตาม * จริงจัง - คุณสามารถตบมันให้เป็นฟังก์ชันการนำเข้า / แบบสอบถาม
ข้อเสีย : * ยังไม่ได้ลองในทุกกรณีดังนั้นอาจใช้ได้เฉพาะกรณีการใช้งานเท่านั้น * ฉันมีความชอบในการทำสิ่งต่าง ๆ แบบไดนามิก / ทำความสะอาดดังนั้นฟังก์ชั่นที่กำหนดเองจะเป็นพื้นกลางที่ดีระหว่าง
สิ่งนี้ใช้ได้กับฉัน:
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();
ใช้ในสคริปต์ที่ถูกผูกไว้รวมชื่อแผ่นงานกับ "!" จากนั้นรับสัญกรณ์ A1 ของช่วงข้อมูลบนแผ่นงานที่เลือก
ฉันสามารถเลือกทั้งแผ่นได้โดยตั้งชื่อช่วงเป็นแผ่นงานโดยไม่มีเครื่องหมายอัศเจรีย์
ฉันมีแท็บชื่อข้อมูล แทนที่จะใช้ข้อมูล! หรือ data! A1: ZZ
หากต้องการระบุทั้งชีทเป็นช่วงโปรดใช้:
worksheet_name!A1:ZZ
คุณสามารถลองได้ที่นี่: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear
หรือถ้าคุณใช้ Java (เพื่อล้างข้อมูลทุกอย่างใน Sheet1):
Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();
หรือถ้าคุณต้องการใช้ในสูตร (ตัวอย่างเช่น: SUM) ในชีตอื่น (เช่น: ชีต 2) คุณสามารถใช้การอ้างอิงต่อไปนี้:
=SUM(Sheet1!A1:ZZ)
^ นี้จะสรุปเซลล์ที่มีอยู่ทั้งหมดบน Sheet1 และใส่ค่าในเซลล์บน Sheet2 คุณสามารถหาตัวอย่างที่นี่: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing ในตัวอย่างนี้เรามี 3 คอลัมน์และ 5 แถวบน Sheet1 ดังนั้นสูตรนี้ = SUM (Sheet1! A1: ZZ) เลือกทั้งหมดของพวกเขา คุณสามารถเพิ่มแถวหรือคอลัมน์ใน Sheet1 และวิธีนี้จะยังคงเลือกเซลล์ทั้งหมด
PS: ถ้าคุณลงคะแนนคำตอบของฉัน - โปรดอธิบายว่าทำไม
สมมติว่าคุณรู้จำนวนแถวคุณสามารถตั้งชื่อชีตทั้งหมดเป็น "worksheet_name":
ขั้นตอน:
ตอนนี้ทุกครั้งที่คุณใช้ "worksheet_name" ในฟังก์ชั่นมันจะอ้างอิงทั้งแผ่นงาน