ฉันมีสเปรดชีตของ Google ที่ซับซ้อนซึ่งมีแผ่นงานหลายรายการและสารบัญ มีวิธีในการสร้างลิงค์ไปยังชื่อชีตเพื่อให้การคลิกสามารถไปที่ชีทได้โดยตรงหรือไม่? นั่นคือ: การคลิกที่เซลล์ "sheet5" จะเปลี่ยนเป็น sheet5 หรือไม่
ฉันมีสเปรดชีตของ Google ที่ซับซ้อนซึ่งมีแผ่นงานหลายรายการและสารบัญ มีวิธีในการสร้างลิงค์ไปยังชื่อชีตเพื่อให้การคลิกสามารถไปที่ชีทได้โดยตรงหรือไม่? นั่นคือ: การคลิกที่เซลล์ "sheet5" จะเปลี่ยนเป็น sheet5 หรือไม่
คำตอบ:
เมื่อคุณเปลี่ยนไปใช้ชีตอื่นใน Google Spreadsheets ให้ใส่ใจ URL ในแถบที่อยู่ของเบราว์เซอร์ ในตอนท้ายของ URL คุณควรเห็นสิ่งต่อไปนี้:
#gid=0
หมายเลขนี้จะเปลี่ยนแปลงเมื่อคุณสลับแผ่นงานและระบุว่าจะแสดงแผ่นงานใด คัดลอก URL ทั้งหมดและสร้างการเชื่อมโยงไปยัง URL ด้วยสูตรนี้:
=hyperlink("https://docs.google.com/spreadsheet/ccc?key=0AsaQpHJE_LShcDJ0dWNudHFZWVJqS1dvb3FLWkVrS0E#gid=0", "LINK TEXT")
ฉันคิดถึงคำถามนี้มากตั้งแต่ครั้งแรกที่ฉันเขียนคำตอบนี้และฉันพบวิธีแก้ปัญหาที่เกี่ยวข้องกับสคริปต์
ด้วยการเปิดสเปรดชีตให้คลิกที่เครื่องมือเมนูแล้วแก้ไขสคริปต์ ... วางรหัสนี้ทั้งหมดลงในเครื่องมือแก้ไข:
function onOpen(event) {
var ss = event.source;
var menuEntries = [];
menuEntries.push({name: "Go to sheet...", functionName: "showGoToSheet"});
ss.addMenu("Tasks", menuEntries);
}
function showGoToSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var allsheets = ss.getSheets();
var app = UiApp.createApplication();
app.setTitle("Go to sheet...").setWidth(800).setHeight(600);
var table = app.createFlexTable();
table.setCellPadding(5).setCellSpacing(0);
var goToSheetClick = app.createServerHandler('handleGoToSheetClick');
var widgets = [];
for (var i = 0; i < allsheets.length; i++) {
var sheet_name = allsheets[i].getName();
widgets[i] = app.createHTML(sheet_name).setId(sheet_name).addClickHandler(goToSheetClick);
table.setWidget(i, 1, widgets[i])
}
var panel = app.createSimplePanel();
panel.add(table);
app.add(panel);
ss.show(app);
}
function handleGoToSheetClick(e) {
var sheet_name = e.parameter.source;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheet_name);
sheet.activate();
var app = UiApp.getActiveApplication();
app.close();
return app;
}
บันทึกสคริปต์จากนั้นรีเฟรชสเปรดชีต หลังจากที่สองหรือสองเมนูใหม่, งานจะปรากฏหลังจากช่วยเหลือ มีหนึ่งรายการในเมนูนี้: ไปที่แผ่นงาน ...
รายการเมนูนี้จะเปิดพาเนลที่มีรายการชื่อของชีตทั้งหมดในสเปรดชีตปัจจุบัน มันดูไม่เหมือน แต่ถ้าคุณคลิกที่ชื่อแผ่นงานแผ่นใดแผ่นหนึ่งจะปรากฏขึ้นด้านหน้า
เป็นคำตอบสำหรับคำถามอื่นสคริปต์นี้ได้รับการปรับปรุงให้มีมุมมองและปุ่มที่เลื่อนได้
gid=7
และที่
gid=7
ควรเป็นชีตที่แปดจากทางซ้าย
gid
Sheet5 เป็นเพียงด้วยตนเอง หากเป็นการเปลี่ยนแปลงตำแหน่งการเปลี่ยนแปลงก็จะgid
เปลี่ยนไปและคุณจะไม่สามารถลิงก์ไปยังการเชื่อถือได้อีกต่อไป
วิธีที่ดีที่สุดในการทำเช่นนี้จากประสบการณ์ของฉันคือการผูกฟังก์ชั่นกับปุ่ม / ภาพ ข้อเสียเปรียบเพียงอย่างเดียวคือคุณไม่สามารถส่งพารามิเตอร์พร้อมกับสคริปต์ที่กำหนดให้กับปุ่ม ด้วยเหตุนี้คุณจะต้องทำให้ฟังก์ชั่นเฉพาะสำหรับแต่ละการนำทาง แต่พวกเขาสามารถเรียกได้ว่าเป็นไฟล์สคริปต์เดียว
ขั้นตอน:
สร้างภาพ (แทรก -> ภาพ) และจัดรูปแบบตามที่คุณต้องการ
สร้างฟังก์ชั่นที่กำหนดเองดังต่อไปนี้:
function showSheetByName(Name) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(Name);
SpreadsheetApp.setActiveSheet(sheet);
}
จากนั้นฟังก์ชั่นเฉพาะสำหรับปุ่มของคุณ
function showSheet5() {
showSheetByName("Sheet5");
}
ในที่สุดก็กำหนดฟังก์ชั่นนี้ให้กับปุ่มของคุณ
Assign Script...
showSheet5
ตอนนี้คุณควรจะสามารถคลิกที่ปุ่มของคุณและไปที่ "Sheet5" นอกจากนี้ยังสามารถปรับเปลี่ยนเพื่อไปยังพื้นที่เฉพาะของแผ่นงานได้เช่นกัน
var sheet = ss.getSheetByName(ss.getActiveCell().getValue());
- คุณสามารถใส่ "ปุ่ม" บนตำแหน่งคงที่บนหน้าจอ และติดป้ายกำกับ "ข้ามไปยังแผ่นงานในเซลล์ปัจจุบัน" และกำหนด "showSheetByName" (ซึ่งตอนนี้ไม่ต้องการพารามิเตอร์) หากต้องการใช้เพียงไฮไลต์เซลล์ด้วยชื่อชีต (เช่น Sheet5) และคลิกที่ปุ่ม มันเป็นทางอ้อมเล็กน้อย แต่ใช้งานได้เนื่องจากการคลิกที่ปุ่มไม่ได้เป็นการเอาโฟกัสออกจากเซลล์ที่ไฮไลต์