2013-12-18 5 views
5

आर (3.0.2)/MSOffice 2013/Win7निर्यात डेटा: सूत्रों पुनर्गणना नहीं है

मान लें हम एक दो चादर के साथ मौजूद हों data.xlsx फ़ाइल - "डेटा" और "calc"।

"डाटा" चादर आर के माध्यम से से भर जाता है:

require(XLConnect) 
df <- data.frame(c(1,2,3,4,5), c(2,3,4,5,6)) 
wb <- loadWorkbook("data.xlsx", create=F) 
setStyleAction(wb, type=XLC$"STYLE_ACTION.NONE") 
writeWorksheet(wb, data=df, sheet="data", startRow=1, startCol=1, header=F) 
saveWorkbook(wb) 

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

एक्सेल में गणना विकल्प स्वचालित रूप से चालू हो गया है, यहां तक ​​कि मैन्युअल रूप से इसे चालू करने और पुन: गणना के लिए बल देने के लिए F9 दबाकर ' टी काम नहीं

मुझे यह काम करने के कुछ अजीब तरीके मिल गए हैं: 1. उस विशेष सेल का चयन करें जिसमें इसमें उचित सूत्र है और एंटर दबाएं (प्रत्येक और प्रत्येक सेल के लिए) 2. फिर से खराब होने वाली कोशिकाओं पर सूत्रों को खींचें (फ़ॉर्मूला को ओवरराइट करें सटीक एक ही सूत्र ..) 3. अन्य फ़ाइल से डेटा शीट को रेफर करना (कहें, data2.xlsx) काम करता है लेकिन यह मेरे लिए एक अंतिम उपाय विकल्प है। मैं अलग-अलग डेटा फ़ाइलों के साथ फ़ाइल संरचना को फूट नहीं करना चाहता हूं। इसके अलावा, इसे काम करने के लिए दोनों फाइल खोलने की इस भयानक आवश्यकता पर विचार करें।

अग्रिम धन्यवाद।

+0

एक यह कर बचाने करता है? – pnuts

+1

नहीं, ऐसा नहीं है। –

+0

मैं Win7 पर Excel2010 के साथ इस सटीक समस्या को पुन: उत्पन्न कर सकता हूं। मेरी सिफारिश XLConnect के लेखक के साथ एक बग रिपोर्ट दर्ज करना है और इसके दौरान 'xlsx' पैकेज के साथ काम करने का प्रयास करने के लिए। बीटीडब्लू, मैंने परिणामों में कोई बदलाव नहीं होने के साथ आपकी 'सेट स्टाइलएक्शन' लाइन को छोड़ने का प्रयास किया।मुझे लगता है कि एक्सएलकनेक्ट में कुछ भी जो भी एक्सेल अपने संदर्भित कोशिकाओं में "लिंक" सूत्रों के लिए उपयोग करता है तोड़ रहा है। –

उत्तर

2

कि इस लिंक कुछ क्लिक प्रदान करता है और समाधान टिप्पणी अनुभाग में छिपा हुआ है देख रहे हैं, यहाँ जवाब है:

wb$setForceFormulaRecalculation(T)

इस संकुल के अधिकांश के लिए काम करना चाहिए इस जावा के रूप में (कम से कम rJava के आधार पर लोगों पर) विधि एक्सेल के भीतर पारित की जाती है, इसलिए आर भाषा द्वारा निर्धारित नहीं किया जाता है।

-1

आप अपने एक्सेल दस्तावेज़ के मॉड्यूल में यह वीबीए मैक्रो डाल सकते हैं और अपने डेटा ट्रांसफर के बाद इसे एक्सेल से चला सकते हैं।

Sub RefreshCalculations() 
     Calculate 
    End Sub 

यहां तक ​​कि सबसे सरल: एक्सेल में F9 दबाएं, यह सभी सूत्रों की गणना को बल देता है।

मुझे अपने पिछले उत्तर के लिए खेद है।

मेरे लिए इस मैक्रो काम करता है, बस का परीक्षण किया:

Sub refresh2() 
Dim sht As Worksheet 

Dim rng0 As Range 
Dim rng1 As Range 
Dim c As Range 

'loop through the sheets 
For Each sht In ActiveWorkbook.Worksheets 

    'limit the search to the UsedRange 
    Set rng0 = sht.UsedRange 
    On Error Resume Next ' in case of no formulas 

    'reduce looping further 
    Set rng1 = rng0.SpecialCells(xlCellTypeFormulas) 

    For Each c In rng1 'loop through the SpecialCells only 
     c.Formula = c.Formula 
    Next 

Next 
End Sub 
+0

ओपी ने यही नहीं कहा: उसने पहले ही यह कोशिश की है, जैसा कि मैंने किया था। समस्या सिर्फ एक पुनर्मूल्यांकन से गहरी है। –

+0

मुझे संदेह है कि मैक्रो एफ 9 दबाकर काफी समान है। और ... मुझे लगता है कि मैंने पहले ही इस पोस्ट में कोशिश करने का उल्लेख किया है। –

+0

यह एक बहुत ही रचनात्मक काम है, लेकिन मेरे पास दो आपत्तियां हैं। सबसे पहले, वर्कशीट में अन्य सूत्र होने पर यह अमोक चलाने की संभावना है। दूसरा, क्योंकि यह स्पष्ट है कि 'एक्सएलकनेक्ट' कुछ ऐसा कर रहा है जो' xlsx'-type वर्कबुक पसंद नहीं करता है, यह 'आर' पैकेज है जिसे गलती करने की अनुमति देने के बजाय, तय किया जाना चाहिए। –

0

मैं जानता हूँ कि इस पोस्ट 2.5 साल पुराना है, लेकिन मैं तो बस आप के साथ ठीक उसी समस्या हुई। मुझे संदेह है कि एक्सएलकनेक्ट के साथ कुछ मुद्दे हैं। मैंने write.csv का उपयोग किया और यह काम किया। write.csv के साथ मेरी समस्या यह है कि मेरे डेटाफ्रेम में 16384 से अधिक कॉलम हैं और मैं फ़ाइल में एक और शीट नहीं जोड़ सकता।

+0

हाँ मैं इसे भी अनुभव कर रहा हूं – user2981639

1

कार्यपुस्तिका लोड करने और डेटा में लिखने के बाद, कार्यपुस्तिका को किसी निर्देशिका में सहेजने से पहले फ़ॉर्मूला पुनर्मूल्यांकन को मजबूर करें।

यह आप के लिए काम करना चाहिए:

writeWorksheet(wb, data=df, sheet="data", startRow=1, startCol=1, header=F) 
setForceFormulaRecalculation(wb,"data",TRUE) 
saveWorkbook(wb) 
संबंधित मुद्दे