ลิงก์ไปยังแผ่นงานเฉพาะใน Google สเปรดชีต


47

ฉันมีสเปรดชีตของ Google ที่ซับซ้อนซึ่งมีแผ่นงานหลายรายการและสารบัญ มีวิธีในการสร้างลิงค์ไปยังชื่อชีตเพื่อให้การคลิกสามารถไปที่ชีทได้โดยตรงหรือไม่? นั่นคือ: การคลิกที่เซลล์ "sheet5" จะเปลี่ยนเป็น sheet5 หรือไม่


1
ขณะนี้มีตัวเลือกดังกล่าวในสเปรดชีตของ Google - คุณสามารถเลือกแทรก -> ลิงค์และเลือกชีตในสเปรดชีตนี้ เสียใจฉันไม่ได้มีชื่อเสียงที่จำเป็นในการโพสต์นี้เป็นคำตอบ
Boris Strandjev

คำตอบ:


59

เมื่อคุณเปลี่ยนไปใช้ชีตอื่นใน 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;
}

บันทึกสคริปต์จากนั้นรีเฟรชสเปรดชีต หลังจากที่สองหรือสองเมนูใหม่, งานจะปรากฏหลังจากช่วยเหลือ มีหนึ่งรายการในเมนูนี้: ไปที่แผ่นงาน ...

งาน> ไปที่แผ่นงาน ...

รายการเมนูนี้จะเปิดพาเนลที่มีรายการชื่อของชีตทั้งหมดในสเปรดชีตปัจจุบัน มันดูไม่เหมือน แต่ถ้าคุณคลิกที่ชื่อแผ่นงานแผ่นใดแผ่นหนึ่งจะปรากฏขึ้นด้านหน้า


เป็นคำตอบสำหรับคำถามอื่นสคริปต์นี้ได้รับการปรับปรุงให้มีมุมมองและปุ่มที่เลื่อนได้


ใช่ฉันคิดว่านี่เป็นทางออกที่ทำงานได้เพียงอย่างเดียวในขณะนี้ แต่น่าเสียดายที่ผมไม่ได้พบวิธีที่จะแปลชื่อ "Sheet5" gid=7และที่
Simon East

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร ชีตจะถูกกำหนดหมายเลขตามลำดับจากด้านซ้ายเริ่มต้นที่ 0 ดังนั้นหากชีทชื่อ "ชีต 5" อยู่ที่gid=7ควรเป็นชีตที่แปดจากทางซ้าย
William Jackson

1
สิ่งที่ผมหมายถึงคือคุณไม่สามารถหาprogramaticallyสิ่งgidSheet5 เป็นเพียงด้วยตนเอง หากเป็นการเปลี่ยนแปลงตำแหน่งการเปลี่ยนแปลงก็จะgidเปลี่ยนไปและคุณจะไม่สามารถลิงก์ไปยังการเชื่อถือได้อีกต่อไป
Simon East

หากคุณหาวิธีเชื่อมโยงชื่อกรุณาโพสต์มัน!
Joe Casadonte

1
ตัวเลือกที่ดีกว่ามีให้ที่นี่: stackoverflow.com/a/18518779/1814867
Mandar Pandit

7

วิธีที่ดีที่สุดในการทำเช่นนี้จากประสบการณ์ของฉันคือการผูกฟังก์ชั่นกับปุ่ม / ภาพ ข้อเสียเปรียบเพียงอย่างเดียวคือคุณไม่สามารถส่งพารามิเตอร์พร้อมกับสคริปต์ที่กำหนดให้กับปุ่ม ด้วยเหตุนี้คุณจะต้องทำให้ฟังก์ชั่นเฉพาะสำหรับแต่ละการนำทาง แต่พวกเขาสามารถเรียกได้ว่าเป็นไฟล์สคริปต์เดียว

ขั้นตอน:

สร้างภาพ (แทรก -> ภาพ) และจัดรูปแบบตามที่คุณต้องการ

สร้างฟังก์ชั่นที่กำหนดเองดังต่อไปนี้:

function showSheetByName(Name) {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName(Name);
   SpreadsheetApp.setActiveSheet(sheet);
}

จากนั้นฟังก์ชั่นเฉพาะสำหรับปุ่มของคุณ

function showSheet5() {
   showSheetByName("Sheet5");
}

ในที่สุดก็กำหนดฟังก์ชั่นนี้ให้กับปุ่มของคุณ

Assign Script...
showSheet5

ตอนนี้คุณควรจะสามารถคลิกที่ปุ่มของคุณและไปที่ "Sheet5" นอกจากนี้ยังสามารถปรับเปลี่ยนเพื่อไปยังพื้นที่เฉพาะของแผ่นงานได้เช่นกัน


แทนที่จะเพิ่มฟังก์ชั่นเฉพาะสำหรับแต่ละปุ่มคุณสามารถฮาร์ดโค้ดมันเพื่อข้ามไปยังชีตที่มีชื่อใน "เซลล์ปัจจุบัน" เช่นเปลี่ยนบรรทัดที่ 2 เพื่ออ่านvar sheet = ss.getSheetByName(ss.getActiveCell().getValue()); - คุณสามารถใส่ "ปุ่ม" บนตำแหน่งคงที่บนหน้าจอ และติดป้ายกำกับ "ข้ามไปยังแผ่นงานในเซลล์ปัจจุบัน" และกำหนด "showSheetByName" (ซึ่งตอนนี้ไม่ต้องการพารามิเตอร์) หากต้องการใช้เพียงไฮไลต์เซลล์ด้วยชื่อชีต (เช่น Sheet5) และคลิกที่ปุ่ม มันเป็นทางอ้อมเล็กน้อย แต่ใช้งานได้เนื่องจากการคลิกที่ปุ่มไม่ได้เป็นการเอาโฟกัสออกจากเซลล์ที่ไฮไลต์
Motti Strom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.