38

मैं Google डॉक स्प्रेडशीट्स के साथ अपनी कुछ Microsoft Excel स्प्रैडशीट्स को बदलने की व्यवहार्यता की भावना प्राप्त करने का प्रयास कर रहा हूं। मैं Google डॉक्स स्प्रैडशीट में Google ऐप स्क्रिप्ट फ़ंक्शन में कस्टम कीबोर्ड शॉर्टकट कैसे बना सकता हूं? यह कुछ ऐसा है जो मैं आमतौर पर वीबीए और एक्सेल के साथ करता हूं।Google ऐप स्क्रिप्ट फ़ंक्शंस के लिए कस्टम कीबोर्ड शॉर्टकट कैसे बनाएं?

उत्तर

19

ऐप्स स्क्रिप्ट केवल server side events का खुलासा करता है। दुर्भाग्यवश, आप आज क्लाइंट साइड इवेंट जैसे कीबोर्ड स्ट्रोक पंजीकृत नहीं कर सकते हैं। कृपया हमारे issue tracker

+1

समस्या ट्रैकर पर सबसे नज़दीकी मुद्दा [मुद्दा 306] (https://code.google.com/p/google-apps-script-issues/issues/detail?आईडी = 306) जो कुछ और सितारों/अपवॉट्स के साथ कर सकता है लेकिन इस पर ऐप टीम से एक बेवकूफ चुप्पी है :( –

+0

किसी ने [मुद्दा 306 पोस्ट 33] पर एक समाधान समाधान जोड़ा (https://code.google। com/p/google-apps-script-issues/issues/detail? id = 306 # c33)! –

9

में एक समस्या लॉग इन करें जैसा कि @ अरुण कहते हैं, यह अभी तक समर्थित नहीं है। यह issue देखें और तारांकित करें।

+1

आपका उत्तर वास्तव में क्या जोड़ता है? – CodyBugstein

+0

@Imray इसे समझना मुश्किल नहीं है;) – nawfal

+1

@nawfal यह हो सकता है एक टिप्पणी – CodyBugstein

0

मैं एक ऐसी ही समस्या से और यद्यपि मैं बहुत अभी तक हल हो गया नहीं किया है मुझे लगता है कि आगे का रास्ता इस keypress event handler under Class Textbox

के माध्यम से पाया जा सकता है अगर इस सर्वर की समस्या को हल हो जाता है मैं नहीं जानता कि संघर्ष कर रहा हूँ तरफ केवल अरुण ने बताया लेकिन मुझे यकीन है कि ऐसा उम्मीद है। इससे पहले कि मैं इसे आजमाने में बहुत समय बर्बाद कर दूं, कृपया मेरी तर्क को सही करने के लिए स्वतंत्र महसूस करें! :)

+0

यह विधि यूआईएपी सेवा का हिस्सा है, यह किसी दस्तावेज़ या स्प्रेडशीट यूआई से किसी फ़ंक्शन को कॉल करने का समाधान प्रदान नहीं करती है। यूआईएपी या एचटीएमएल सेवा में आप निश्चित रूप से घटनाओं को ट्रिगर करने के लिए कीप्रेस का उपयोग कर सकते हैं –

+0

ठीक है। तो क्या Google डॉक्स पर ऐप्स स्क्रिप्ट में लिखे गए मैक्रो को कॉल करने से यूआईएपी या एचटीएमएल सेवा (जो मुझे लगता है कि एक विस्तार कहने का हिस्सा हो सकता है) रखने के बाद कुछ भी है जो कुंजीपटल शॉर्टकट सीधे किए गए आवश्यक चरणों को कर सकता है? –

+0

वास्तव में कुछ नहीं ... कोई साइडबार के साथ ऐसी स्कीमा का उपयोग कर सकता है ... साइडबार में यूई में ऐसे बटन होंगे जो स्क्रिप्ट फ़ंक्शंस को कॉल कर सकते हैं। कुछ नए ऐड-ऑन कॉन्फ़िगरेशन का उपयोग बहुत ही सुरुचिपूर्ण तरीके से करते हैं। –

0

लंबी कहानी लघु: एक एचटीएमएल सेवा लिखें जो कुंजीपटल घटनाओं को कैप्चर करने के लिए एक कुंजी प्रेस इवेंट हैंडलर का उपयोग करती है और उन्हें आपके द्वारा इच्छित हॉटकी शॉर्टकट से तुलना करती है, फिर ऐप स्क्रिप्ट में सर्वर की तरफ उचित उप रूटीन को इनलाइन करने के लिए कॉल करती है कीस्ट्रोक, प्रारूप या दस्तावेज़ परिवर्तन के लिए बुलाया जाता है।

जहां तक ​​व्यवहार्यता चलती है, उतनी आसान नहीं है जितनी वीबीए आप पहले ही परिचित हैं, लेकिन एक बार जब आप चीजों को करने के अलग-अलग तरीके से पीछे हट जाते हैं तो वास्तव में यह बहुत कठिन नहीं होता है।

+0

मुझे नहीं लगता कि मुझे लगता है कि आप किस बारे में बात कर रहे हैं। क्या आपके पास किसी लेख या कुछ दस्तावेज़ों का लिंक है या आप एक उदाहरण दिखा सकते हैं? – User

+1

क्षमा करें, नहीं। एक दोस्त के लिए एक ही समस्या का अध्ययन करते समय मैंने संबंधित दस्तावेज पढ़ा। दुर्भाग्य से मुझे यह स्वीकार करना होगा कि मेरा जवाब अब गलत लगता है। मुझे इसकी पुष्टि नहीं मिल सकती है लेकिन निकटतम मैं डॉक्स टेक्स्ट इनपुट पैनल पर हैंडल प्राप्त करने की क्षमता को अवरुद्ध कर सकता हूं। मैं एक HTML सेवा साइडबार लिख सकता हूं लेकिन मुख्य दस्तावेज़ पैनल के लिए एक कुंजीपटल ईवेंट हैंडलर बनाने के लिए मैं आवश्यक ऑब्जेक्ट प्राप्त नहीं कर सकता। मैं अनुमान लगाता हूं कि शायद वे किसी को एक कीलॉगर या कुछ लिखने से रोकने की कोशिश कर रहे हैं। –

2

बस अपडेट करना, अब यह संभव है कि गाय का उल्लेख किया गया है, गड़बड़ IFRAME, आप एक साइडबार बना सकते हैं, बस कीबोर्ड कमांड दर्ज करने के लिए एक STUB बना सकते हैं, उन्हें jquery के साथ व्यवहार कर सकते हैं, और अनुचित फ़ंक्शन चला सकते हैं, पहले से ही इसका उपयोग कर रहे हैं ।

5

एक समाधान issue 306 पर पोस्ट किया गया है! आलसी के लिए, यहाँ यह है:

HtmlService में नए IFRAME मोड कुंजी कोड के लिए अनुमति नहीं है एड-ऑन को पारित किए जाने की ...

$(document).keydown(function(e){ 
    //CTRL + V keydown combo 
    if(e.ctrlKey && e.keyCode == 86){ 
    $('#output').html("I've been pressed!"); 
    } 
}) 

पर क्लिक करें/पहले साइडबार सक्रिय करने के लिए है ऐसा होने के लिए।

+2

इसे लागू करने के लिए पूर्ण कोड [यहां] पाया जा सकता है (https://stackoverflow.com/a/44345522/3154274) – Enora

1

इसके लिए एक संभावित कार्य "ट्रिगर टेक्स्ट" के लिए एक कॉलम समर्पित करना होगा, प्रत्येक क्रिया के लिए अलग-अलग पाठ आधारित ट्रिगर्स को परिभाषित करना होगा, और उसके बाद एक फ़ंक्शन बनाएं जो मान की जांच करता है और एक क्रिया करता है "ट्रिगर टेक्स्ट" के आधार पर। फिर आप अपने हॉटकी फ़ंक्शन के लिए स्क्रिप्ट संपादक में "संसाधन" के तहत प्रोजेक्ट के ट्रिगर में एक एडिट ईवेंट ट्रिगर सेट कर सकते हैं।

इस दृष्टिकोण का सबसे बड़ा नकारात्मक पक्ष यह है कि परिवर्तन को पकड़ने और अद्यतन करने के लिए एडिट ट्रिगर के लिए लगभग 7 पूर्ण सेकंड लगते हैं (कम से कम मेरे लिए)। यदि आपको अधिक तेज़ी से संसाधित करने के लिए कुछ चाहिए तो आपको वैकल्पिक दृष्टिकोण की तलाश करनी पड़ सकती है।

मैंने नामित "ट्रिगर" कॉलम में ट्रिगर टेक्स्ट के आधार पर पंक्ति रंग बदलने के लिए नीचे एक उदाहरण दिया है। आप ट्रिगर टेक्स्ट इनपुट की जांच के बाद स्क्रिप्ट पर स्क्रिप्टिंग जैसे सेट वैल्यू, फ़ॉन्ट वेट सेट, कॉपी डेटा या अन्य फ़ंक्शंस चलाने के माध्यम से शीट पर कुछ भी करने के लिए इसका उपयोग कर सकते हैं।

/*you will need to add an onEdit trigger to your project 
    for this to run when you edit the cell*/ 


//function to update row color using entered text in a specified "trigger" column 

function hotKey(){ 

    //get the cell you edited and the associated column and row number 
    var cell = sheet.getActiveCell(); 
    var thisCol = cell.getColumn(); 
    var thisRow = cell.getRow(); 

    //set a range variable for the entire row 
    var colorRow = sheet.getRange(thisRow,thisCol,1,Cols); 

    //get the edited value for the cell as a string 
    var val = cell.getValue().toString(); 

    //check that the edited cell is in the trigger column 
    if (thisCol = 1){ 

    //update the row color based on the entered value 
    if(val == "g"){ 
     colorRow.setBackground("#00ff00"); //sets row color to green 
     cell.clearContent(); //delete the trigger cell value 

    }else if(val == "r"){ 
     colorRow.setBackground("#ff0000"); 
     cell.clearContent(); 
    }else if(val == "fd"){ 
     colorRow.setBackground("#fff2cc"); 
     cell.clearContent(); 
    }else if(val == "pr"){ 
     colorRow.setBackground("#ffff00"); 
     cell.clearContent(); 
    }else if(val == "cn"){ 
     colorRow.setBackground("#6fa8dc"); 
     cell.clearContent(); 
    } 
    } 
} 
संबंधित मुद्दे