मुझे निम्नलिखित अनुक्रम करने की आवश्यकता है:

  1. एक्सेल वर्कबुक खोलें
  2. R डेटाफ़्रेम में विशिष्ट कार्यपत्रक पढ़ें
  3. डेटाफ़्रेम अपडेट करने वाले डेटाबेस से पढ़ें
  4. डेटाफ़्रेम को वर्कशीट पर वापस लिखें

मेरे पास BERT टूल का उपयोग करके चरण 1-3 ठीक काम कर रहा है। (आर स्क्रिप्टिंग इंटरफ़ेस) चरण 2 के लिए मैं BERT से range.to.data.frame का उपयोग करता हूं

चरण 4 कैसे करें इस पर कोई संकेतक? कोई data.frame.to.range नहीं है मैंने range$put_Value(df) की कोशिश की लेकिन कोई त्रुटि वापस नहीं आई और एक्सेल में कोई अपडेट नहीं हुआ मैं put_Value का उपयोग करके R से एकल सेल को अपडेट कर सकता हूं - जिसे मैं प्रलेखित नहीं देख सकता

#
# manipulate status data using R BERT tool
#

wb <- EXCEL$Application$get_ActiveWorkbook()
wbname = wb$get_FullName()

ws <- EXCEL$Application$get_ActiveSheet()
topleft = ws$get_Range( "a1" )
rng = topleft$get_CurrentRegion()

#rngbody = rng$get_Offset(1,0)

ssot = rng$get_Value()

ssotdf = range.to.data.frame( ssot, headers=T )
# emulate data update on 2 columns
ssotdf$ServerStatus = "Disposed"
ssotdf$ServerID = -1

# try to write df back
retcode = rng$put_Value(ssotdf)
2
mikecro2 23 जुलाई 2018, 19:29

4 जवाब

यह उत्तर आर एक्सेल बर्ट का उपयोग नहीं करता है। openxlsx लाइब्रेरी आज़माएं। आप शायद उस पुस्तकालय का उपयोग करके सभी कदम उठा सकते हैं। चरण 4 के लिए, openxlsx लाइब्रेरी स्थापित करने के बाद, निम्न कोड एक फ़ाइल लिखेगा:

openxlsx::write.xlsx(ssotdf, 'Dataframe.xlsx',asTable = T)
0
JeanVuda 23 जुलाई 2018, 20:57
यह बहुत मददगार है। शुक्रिया। एक्सेल को सरल पढ़ने/लिखने के अलावा, ओपनएक्सएलएस में कॉलम इत्यादि में हेरफेर करने की क्षमता है। आदर्श रूप से मैं वीबीए से अपना आर कोड कॉल करने में सक्षम होना चाहता हूं - जैसे आप बीईआरटी के साथ कर सकते हैं। क्या यह संभव है?
 – 
mikecro2
24 जुलाई 2018, 11:42

मुझे लगता है कि आपकी समस्या यह है कि आप सीमा का आकार नहीं बदल रहे हैं, इसलिए आप अपने नए कॉलम नहीं देख पाएंगे। डेटा डालने से पहले एक नई श्रेणी बनाने का प्रयास करें जिसमें दो अतिरिक्त कॉलम हों।

0
duncan 24 जुलाई 2018, 21:10
अच्छा विश्लेषण - लेकिन स्रोत कोड में संदर्भित 2 कॉलम एक्सेल शीट में पहले से मौजूद हैं (जिन्हें आप नहीं जान सकते थे)
 – 
mikecro2
25 जुलाई 2018, 16:12

मेरे पास बस एक ही सवाल था और कॉल में data.frame को एक मैट्रिक्स में बदलकर put_value करके इसे हल करने में सक्षम था। मैंने इसे excel-functions.r में पुराने संस्करण के साथ खेलने के बाद समझ लिया। कुछ ऐसा प्रयास करें:

retcode = rng$put_Value(as.matrix(ssotdf))
0
Jim 31 अक्टूबर 2018, 01:59

हो सकता है कि आपने पहले ही अपनी समस्या का समाधान कर लिया हो, लेकिन यदि नहीं, तो निम्नलिखित स्ट्रिप डाउन आर फ़ंक्शन वह करता है जो मुझे लगता है कि आपको चाहिए:

testDF <- function(rng1,rng2){
  app <- EXCEL$Application
  ref1 <- app$get_Range( rng1 ) # get source range reference
  data <- ref1$get_Value()      # get source range data
  #
  ref2 <- app$get_Range( rng2 ) # get destination range reference
  ref2$put_Value( data )        # put data in destination range
}

मैंने स्पीडशीट की सीमा "D4:F6" में मान सेट करके डेटाफ़्रेम का अनुकरण किया:

col1    col2    col3
 1       2      txt1
 7       3      txt2

फिर भागा

testDF("D4:F6","H10:J12")

बर्ट कंसोल में। तब डेटाफ़्रेम "H10:J12" की सीमा में दिखाई देता है।

0
Graham G 3 अप्रैल 2019, 13:18
क्या पहले से परिणामी आउटपुट के आयामों को जाने बिना एक्सेल में आर आउटपुट को प्रिंट करना संभव है?
 – 
charliealpha
26 फरवरी 2020, 14:14
मुझे यकीन नहीं है कि यह कैसे किया जा सकता है।
 – 
Graham G
27 फरवरी 2020, 17:21