2009-12-03 15 views
8

पर होस्ट की गई स्प्रेडशीट को प्रोग्रामेटिक रूप से अपडेट करना मुझे Google डॉक्स पर होस्ट की गई एक पूर्व-मौजूदा स्प्रेडशीट मिली है। प्रत्येक महीने मैं इस दस्तावेज़ को अद्यतन करता हूं। मुझे स्प्रेडसेट में टेम्पलेट वर्कसेट मिला है जिसे मैं क्लोन करना चाहता हूं और फिर अपडेट करना चाहता हूं।Google डॉक्स

मैं इसे स्क्रैच से बनाने के बजाय वर्कशीट को क्लोन करना पसंद करूंगा क्योंकि इसमें कुछ जटिल जटिल सूत्र हैं।

मैं गूगल डॉक्स यहाँ पायथन एपीआई का उपयोग कर रहा:

http://code.google.com/apis/spreadsheets/data/1.0/developers_guide_python.html

किसी को भी पता है कि कैसे क्लोन और एक पूर्व मौजूदा दस्तावेज़ में किसी कार्यपत्रक नकल के लिए?

संपादित

मैं उलझन में एक पाठक के लिए लग रहा था। मेरे पास एक्सेल स्प्रैडशीट नहीं है। मेरे पास केवल एक Google डॉक्स स्प्रैडशीट है जिसमें टेम्पलेट वर्कशीट है।

मैं इस वर्कशीट को क्लोन करना चाहता हूं, इसका नाम बदलना चाहता हूं और फिर इसे प्रोग्रामिक रूप से संपादित करना चाहता हूं।

+1

@Priyank बोलिया। मुझे नहीं लगता कि आप Google डॉक्स को समझते हैं। मेरे पास एक्सेल स्प्रेडशीट बिल्कुल नहीं है। मेरे पास सिर्फ Google डॉक्स स्प्रेडशीट है। इस शीट में मेरे पास एक टेम्पलेट वर्कशीट है जिसे मैं प्रतिलिपि बनाना, नाम बदलना और फिर संपादित करना चाहता हूं। मैं इसे प्रोग्रामिक रूप से करना चाहता हूं। – chollida

+0

आपने इस समस्या को कैसे हल किया? – Tyug

+0

@Tyug मैंने इसे हल नहीं किया है। – chollida

उत्तर

6
  1. क्लोन अपने टेम्पलेट कार्यपत्रक पर Copying Documents
  2. पहुँच list of worksheets क्लोन दस्तावेज़ के भीतर निर्देशों का उपयोग कर और आवश्यक स्प्रेडशीट के माध्यम से पुनरावृति।
  3. अपनी स्प्रेडशीट में उपयुक्त सेल प्राप्त करने के लिए cell feed का उपयोग करें, फिर update मान।
2

यह वास्तव में जटिल है। मैं समझता हूं कि आप अपनी एपीआई का उपयोग करके पाइथन के साथ अपनी स्प्रैडशीट्स को संपादित कर सकते हैं, Google अपनी कई वेब सेवाओं पर उस क्षमता की पेशकश करता है और यह किसी भी तरह से एक्सएमएल से किए गए HTTP पोस्ट अनुरोधों को भेजकर किया जाता है, मुझे उम्मीद है कि आप उस हिस्से को जानते हैं, मैं नहीं हूं ' टी।

this के अनुसार आप कम से कम वर्कशीट जोड़ सकते हैं, अन्य वर्कशीट्स से पंक्तियां पढ़ सकते हैं और वर्कशीट पर पंक्तियां लिख सकते हैं। यदि आपको जरूरी है, तो आप एक समय में एक पंक्ति की प्रतिलिपि बना सकते हैं, हालांकि प्रत्येक पंक्ति के लिए एक अतिरिक्त POST अनुरोध भेजना एक भयानक विचार की तरह लगता है।

संपादित करें:

मैं इस बारे में अधिक से अधिक सीख रहा हूँ, लेकिन अभी भी अपने मूल समस्या को हल करने से एक लंबा रास्ता बंद। यह overview of REST principles वेब पर प्रोग्राम के बीच चलने वाली इंटरैक्शन की मूल शैली पर जाता है। ऐसा लगता है कि Google इसे धार्मिक रूप से पालन कर रहा है।

यह सब HTTP प्रोटोकॉल के भीतर होता है, जिसे मैं आज से पहले कुछ भी नहीं जानता था। इस HTTP specification में मूल खेल वर्तनी है। यह उतना सूखा नहीं है जितना दिखता है, और शायद मैं सिर्फ एक विशाल गीक हूं, लेकिन मुझे यह एक प्रेरक पढ़ा जाता है। संयुक्त राज्य अमेरिका के संविधान के विपरीत नहीं।

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

हो रही करीब :)

1

आप एक xls के रूप में अपनी स्प्रेडशीट निर्यात कर सकता है नहीं किया जा सका है और फिर एक (थोड़ा) भिन्न नाम के साथ एक नया दस्तावेज़ के रूप में अपलोड, XML मेटाडाटा में नए नाम निर्दिष्ट?

http://code.google.com/apis/documents/overview.html पर दस्तावेज़ अनुभाग डाउनलोड और बनाएं/अपलोड करना फायदेमंद होना चाहिए।

मैं पाइथन एपीआई दस्तावेज़ों में तुरंत कोई आयात/निर्यात कार्यक्षमता नहीं देख सकता, लेकिन कुछ http अनुरोध भेजना इतना बुरा नहीं है।

+0

मैंने आपके द्वारा पोस्ट किए गए डाउनलोड दस्तावेज़ देखे हैं :) आपकी मदद के लिए धन्यवाद। – chollida

2

सबसे पहले, मैंने पहले कभी पाइथन के साथ काम नहीं किया है - लेकिन मैं आपको बताउंगा कि मैंने इसे सी ++ में कैसे किया।

मैंने google documents API पर एक GET अनुरोध करने के लिए curl का उपयोग किया है। फ़ाइल का बाइनरी डेटा वापस कर दिया गया था और मैंने इसे एक फाइल में लिखा था। अब मेरे पास एक्सएलएस फ़ाइल थी और फिर मैंने एक सी/सी ++ लाइब्रेरी का उपयोग किया जो डाउनलोड की गई फ़ाइल में हेरफेर करने के लिए एक्सएलएस फाइलें पढ़ सकता था। जिस एपीआई का मैंने उपयोग किया वह विभिन्न विकल्पों का समर्थन करता था; आप एक्सेल में कुछ भी कर सकते हैं जो आप कर सकते हैं। संशोधन के बाद मैंने इसे फिर से Google डॉक्स पर अपलोड किया।

+0

यक, यही वह है जिसे मैं डरता था। मुझे लगता है कि यह काम करेगा अगर मैं संशोधित स्थानीय प्रति को मूल नाम के समान नाम से अपलोड कर सकता हूं। आपकी मदद के लिए धन्यवाद। – chollida

4

वाह !!! ट्रक को वापस करो।

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

Google डॉक्स में बहुत सारे एपीआई और डॉक्स के साथ काम करने से संबंधित समान शब्द हैं जो चीजें थोड़ा भ्रमित हो सकती हैं। यदि आप पहले से ही नहीं जानते हैं, तो अपने सिर में यह तथ्य स्थापित करें कि जीएएस (Google Apps स्क्रिप्टिंग) और जीएई (Google ऐप इंजन) दो पूरी तरह से अलग चीजें हैं। भले ही वे वही बात सुनते हैं, वे जावा के समान हैं जावास्क्रिप्ट के लिए।

जीएएस Google डॉक्स में एम्बेड किए गए स्क्रिप्स हैं (जो भविष्य में स्टैंड अकेले स्टैंड मॉड्यूल के रूप में आयात योग्य होंगे) जो सत्यापन और गतिशील दस्तावेजों जैसी चीजें चलाते हैं लेकिन वे सबसे संदिग्ध से अधिक शक्तिशाली हैं (वे चीजें कर सकते हैं जैसे बाहरी दस्तावेज़ों और ऑटो-ईमेल प्रतिक्रियाओं को संशोधित/अपडेट करना)। ध्यान रखें कि इन्हें हल्के वजन की आवश्यकता है क्योंकि वे Google के सर्वर पर चल रहे हैं। यदि आपकी स्क्रिप्ट को पूरा करने में लंबा समय लगता है तो इसका निष्पादन समय-समय पर समाप्त हो जाएगा (सीमाओं को खोजने के लिए चारों ओर Google)। इसका मतलब है कि आपको केवल वेनिला जेएस (jQuery की तरह कोई ढांचा नहीं) और जहां भी संभव हो, प्रदर्शन ट्विक का उपयोग करना चाहिए।

दूसरी ओर, GAE एक वेब सर्वर (उपलब्ध डेटाबेस परत के साथ) की तरह है जो क्लाउड में कहीं रहता है। यह अधिक भारी उठाने के लिए कस्टम ऐप्स बनाने के लिए व्यवसाय/रुचियों के लिए एक सुविधाजनक (और पहले से तैनात) मिडलवेयर परत के रूप में मौजूद है। दुर्भाग्यवश, बाहरी स्प्रेडशीट का एपीआई पूरा करने के लिए बहुत सीमित है जो हम अपने आप पर काम कर रहे हैं, इसलिए यह एक गैर-विकल्प है।

Google Apps स्क्रिप्टिंग और समय-आधारित चलाता

यह दृष्टिकोण चाहिए काम का उपयोग कर स्वचालन लेकिन इसके लिए थोड़ी hackish दृष्टिकोण की आवश्यकता है।

अपनी रिपोर्ट शीट वाली कार्यपुस्तिका खोलें। [टूल्स] -> [स्क्रिप्ट संपादक ...] पर क्लिक करें। एक बार वहाँ [Triggers] -> [वर्तमान लिपि के ट्रिगर ...]।

यदि आपके पास कोई ट्रिगर मौजूद नहीं है, तो एक जोड़ें। फिर, 'ईवेंट' ड्रॉपडाउन मेनू के तहत 'टाइम-संचालित' चुनें।

सर्वर-साइड इवेंट हैंडलर की दुनिया में आपका स्वागत है। क्लाउड-आधारित दस्तावेज़ों के साथ आपको प्राप्त होने वाली सुन्दर विशेषताओं में से एक है सीधे आपके दस्तावेज़ में क्रॉन नौकरियों को ट्रिगर करने की क्षमता। कोई बाहरी मिडलवेयर आवश्यक नहीं है।

आप अब तक देखा नहीं है अगर वहाँ 'माह टाइमर' के लिए कोई ट्रिगर है। यह वह जगह है जहां यह हैकी हो जाता है। इस सुविधा की कमी के आसपास काम करने के लिए यह आवश्यक है कि हम ट्रिगर को दैनिक आधार पर आग लगा दें और पिछले दिन की तारीख के साथ वर्तमान तिथि से मेल खाने के लिए कुछ जावास्क्रिप्ट का उपयोग करें।

[कोड यहाँ जाना होगा]

सबसे पहले, समारोह उस समय ट्रिगर ईवेंट हैंडलर से जुड़ी हो जाता है आता है। कोड का यह ब्लॉक बस तारीख को पार करता है, इसे पिछली तारीख से तुलना करता है, और अगले दिन की तुलना के लिए एक छिपी हुई शीट (जिसे हम दृढ़ता परत के रूप में उपयोग करते हैं) में मूल्य संग्रहीत करते हैं। यदि नई महीने की स्थिति पूरी हो जाती है तो कोड का अगला ब्लॉक चलता है।

[कोड यहाँ जाना होगा]

तुम्हारा खदान से एक सा है, लेकिन मूल अवधारणा अलग जाहिर जाएगा:

  • लोड स्प्रेडशीट वस्तु (एक शीट वस्तु के साथ भ्रमित होने की नहीं)
  • टेम्पलेट शीट वस्तु यह एक उचित समय अवधि वाली आधारित नाम
देने का पता लगाएँ
  • क्लोन टेम्पलेट शीट

    मेरा, मेरा अगला कदम महीने से डेटा निकालने के लिए एक स्टैक्ड लाइन ग्राफ़ उत्पन्न करने के लिए होगा जो मेरे उच्च-अप की वर्तमान स्थिति की रिपोर्ट करेगा।

    नोट: किए गए दस्तावेज़ों की बहु उपयोगकर्ता सहयोग प्रकृति के कारण, घटनाओं निकाल दिया जा करने के लिए सर्वर साइड की है। यह हमारे लिए एक बड़ी समस्या पैदा करता है। चूंकि कोड त्रुटियों को इवेंट कोड कहीं और चलाता है, इसलिए हमें हमारे ब्राउज़र से कोई प्रतिक्रिया नहीं मिलती है। इसका एकमात्र समाधान ट्रिगर पर अधिसूचना सेट करना है जब आपको स्क्रिप्ट दोष पर तत्काल ईमेल करें।

    अद्यतन: हालांकि यह शोध, मैं एक शांत तकनीक मिल गया। अगर मैं बिना किसी बग के काम कर रहा हूं, तो मैं Google कैलेंडर पर चिह्नित दिनांक का उपयोग करके ट्रिगर को आमंत्रित करने का प्रयास कर सकता हूं।

  • 0

    (फ़र, 2017) वर्तमान शब्दावली के साथ सवाल अलग ढंग से व्यक्त: आप एक Google शीट टेम्पलेट की प्रतिलिपि कैसे करूं, तो यह (कॉपी) को संशोधित प्रोग्राम के रूप में? लघु जवाब: यह विशेष रूप से Google Drive v3 API और Google Sheets v4 API वर्तमान Google API के साथ बहुत आसान है, है, और आप Google APIs Client Libraries द्वारा समर्थित किसी भी भाषा के साथ यह कर सकते हैं।

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

    आप अनुमान लगा सकते हैं, शीट एपीआई प्रोग्राम के रूप में ऊपर वर्णित के रूप में स्प्रेडशीट संचालन & कार्यक्षमता तक पहुँचने के लिए मुख्य रूप से है, चार्ट बनाने आदि,, लेकिन फ़ाइल स्तर पहुँच प्रदर्शन करने के लिए इस तरह के रूप टेम्पलेट शीट की प्रतिलिपि बनाकर, Google Drive API का उपयोग करें।

    स्यूडोकोड (अजगर) एक फ़ाइल (शीट) ड्राइव एपीआई का उपयोग कर कॉपी करने के लिए (यह मानते हुए हम पहली टेम्पलेट नाम के साथ हाल ही में संशोधित फ़ाइल के लिए खोज, इसलिए orderBy और पहला परिणाम नीचे [0] के चयन):

    TMPLFILE = 'my Sheets template' 
    tmpl = DRIVE.files().list(q="name='%s'" % TMPLFILE).execute().get('files')[0] 
    NEW_SHEET = {'name': 'Sheets data, Feb 2017'} 
    SHEET_ID = DRIVE.files().copy(body=NEW_SHEET, fileId=tmpl['id']).execute().get('id') 
    

    एसक्यूएल डेटाबेस (एसक्यूएलएइट) से मूल्यों को पढ़ने के लिए स्यूडोकोड और उन्हें ऊपर बनाई गई नई शीट (सेल 'ए 1' से "ऊपरी-बाएं" से शुरू करना) जैसे कि उपयोगकर्ता ने यूआई से मूल्यों में प्रवेश किया है (इसलिए सूत्रों को लागू किया जा सकता है, आदि):

    cxn = sqlite3.connect('db.sqlite') 
    cur = cxn.cursor() 
    rows = cur.execute('SELECT * FROM data').fetchall() 
    cxn.close() 
    DATA = {'values': rows} 
    SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID, 
        range='A1', body=DATA, valueInputOption='USER_ENTERED').execute() 
    

    यदि आप आधुनिक Google एपीआई के लिए अपेक्षाकृत नए हैं, तो मेरे पास आपके लिए कुछ (कुछ हद तक दिनांकित) उपयोगकर्ता के अनुकूल intro video है। इसके बाद 2 वीडियो भी उपयोगी हो सकते हैं, जिनमें से एक ड्राइव एपीआई का उपयोग करके प्रदर्शित करता है। वे this playlist में वीडियो 2, 3, और 4 हैं। वीडियो 23 & 25 ड्राइव और शीट्स एपीआई की एक और जोड़ी है।

    सभी नए वीडियो) के बजाय this playlist जहां वीडियो ऊपर शीट्स एपीआई प्लस "टेम्पलेट नकल" कोड का एक दोहराव की विशेषता है, लेकिन एक स्लाइड टेम्पलेट जो तब Slides API साथ संशोधित किया गया है को कॉपी करने की एक और जोड़ी मिल जाएगा में पाया जा सकता (वीडियो 2)।

    जैसा कि किसी अन्य उत्तर में बताया गया है, आप कुछ ऐसा करने के लिए Google Apps Script का उपयोग भी कर सकते हैं यदि आप आरईएसटी एपीआई का उपयोग कर पर्यावरण बनाम पसंद करते हैं, हालांकि ऐप स्क्रिप्ट वर्तमान में पुराने एपीआई का उपयोग करता है। इसके अलावा कुछ बकाया बग हैं जो इसे थोड़ा और चुनौतीपूर्ण बना सकते हैं (विशेष रूप से this one और this one)।

    संबंधित मुद्दे