2012-11-08 15 views
6

है, मैं डेटा को मौजूदा एक्सेल (.xls) फ़ाइल को लिनक्स के अंतर्गत रूबी के साथ डालना चाहता हूं। इस फ़ाइल में पहले से ही डेटा है, इसमें कुछ प्रारूप गुण हैं और इसमें मैक्रोज़ हैं।एक मौजूदा एक्सेल .xls फ़ाइल में लिखें जिसमें मैक्रोज़

मैंने स्प्रेडशीट मणि के साथ फ़ाइल में डेटा डालने का प्रयास किया लेकिन जब मैं संशोधनों को सहेजता हूं, तो प्रारूप और फ़ाइल के सभी मैक्रोज़ खो जाते हैं।

यहाँ एक सरल संशोधन का एक उदाहरण है जहाँ मैं इस समस्या को पूरा है:

book = Spreadsheet.open('myOriginalFile.xls') 
sheet = book.worksheet 0 
sheet.write('C12','hello') 
book.write('myModifiedFile.xls') 

मैं चीजों के बहुत सारे करने की कोशिश की, मंचों और वेब पर अनुसंधान किया था, लेकिन मैं एक समाधान नहीं मिला ... करता है किसी के पास कोई विचार है?

+0

मैं xls के बारे में पता नहीं है, लेकिन मैं एक समय पहले odt से सफलता मिली। ओडीटी फाइल मूल रूप से अन्य चीजों के साथ, संपादन योग्य एक्सएमएल के साथ अभिलेखागार हैं। – jsj

+0

@ trideceth12: मैंने देखा कि यह odt (xlsx के साथ भी स्पष्ट रूप से) के साथ संभव था लेकिन मुझे बिल्कुल एक xls फ़ाइल के साथ काम करना है ... – Jerem

उत्तर

4

मैं एक समाधान मिल गया। पीओआई मौजूदा xls फ़ाइल के मैक्रोज़ और सूत्रों को रखने और इसे संशोधित करने की अनुमति देता है।

# JVM loading 
    apache_poi_path = File.dirname(__FILE__)+'/poi-3.8/poi-3.8-20120326.jar' 
    Rjb::load("#{apache_poi_path}", ['-Xmx512M']) 

    # Java classes import 
    @file_class = Rjb::import('java.io.FileOutputStream') 
    @workbook_class = Rjb::import('org.apache.poi.hssf.usermodel.HSSFWorkbook') 
    @poifs_class = Rjb::import('org.apache.poi.poifs.filesystem.POIFSFileSystem') 
    Rjb::import('org.apache.poi.hssf.usermodel.HSSFCreationHelper') 
    Rjb::import('org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator') 
    @cell_reference_class = Rjb::import('org.apache.poi.hssf.util.CellReference') 
    @cell_class = Rjb::import('org.apache.poi.hssf.usermodel.HSSFCell') 
    # You can import all java classes that you need 

    # Java classes utilisation : 
    @file_input_class = Rjb::import('java.io.FileInputStream') 
    @file_input = @file_input_class.new(model_file_path) 
    @fs = @poifs_class.new(@file_input) 
    @book = @workbook_class.new(@fs) 

    @worksheet = @book.getSheet('worksheet') 
    # ... 
    # You can use your objects like in Java but with a ruby syntax 
+0

आप वास्तव में एक्सेल फ़ाइल में डेटा लिखने के लिए 2 तकनीकों का उपयोग करना चाहते हैं ???? – bmalets

+0

आपने सी ++, पीएचपी, एरलांग, पायथन या बेसिक मॉड्यूल का उपयोग क्यों नहीं किया? : डी – bmalets

+0

क्यों -1? यह एकमात्र समाधान है जो इस समस्या के लिए काम करता है ... – Jerem

2

आपको संशोधित फ़ाइल को एक नए फ़ाइल नाम में लिखने की आवश्यकता है। देखें this

आप एक से अधिक चादर है, तो आप कई पत्रक के साथ अन्य पत्रक

XLS के पुनर्लेखन के लिए, लेकिन केवल शीट में से एक को संशोधित की जरूरत है (और स्पर्श अन्य डेटा नहीं है), वहाँ है कोई रास्ता नहीं, वह स्प्रेडशीट "याद करता है" अन्य चादरों में क्या है। आपको अनमोडिफाइड चादरें भी लिखनी होंगी या अन्यथा अनपेक्षित चीजें घटित होंगी।

एर्गो: संशोधित शीट लिखें और कई शीट्स के साथ स्प्रेडशीट के साथ एक्सएलएस को संशोधित करते समय पूरी तरह से असम्बद्ध चादरें फिर से लिखें।

+0

मुझे पहले से ही ऐसा करना है और यह काम नहीं करता है (यहां मूल फ़ाइल नाम है " myOriginalFile.xls "और नया फ़ाइल नाम" myModifiedFile.xls "है) – Jerem

+0

यदि आपके पास एक से अधिक शीट हैं तो आपको अन्य चादरों को फिर से लिखना होगा या यदि आपको उनकी आवश्यकता नहीं है तो बस उन्हें हटा दें। –

+0

आपकी मदद के लिए धन्यवाद। मैंने यह किया और इसने प्रारूप की समस्या का समाधान किया लेकिन मैक्रोज़ वैसे भी खो गए हैं ... – Jerem

1

Axlsx को देखना सुनिश्चित करना चाहेगा कि यह एक सादा .xls को संपादित करने में सक्षम होगा, लेकिन मैंने कुछ हफ्ते पहले इसके साथ कुछ काम किया था, यह xlsx के साथ काम कर रहा था, जिसके लिए मैं काम कर रहा था।

मैं जो rjb मणि (रूबी जावा पुल है, जो गहरे लाल रंग का साथ जावा पुस्तकालयों का उपयोग करने की अनुमति देता है) के साथ जावा में लिखा है अपाचे की POI पुस्तकालय का उपयोग करें:

+1

धन्यवाद @ यूजीन लेकिन मैंने एक्सक्सक्स के साथ कोशिश की और यह केवल साथ काम करता है।xlsx फ़ाइलें – Jerem

1

तुम सिर्फ मौजूदा फ़ाइल को खोलने, फ़ाइल में अपने परिवर्तनों को लिख सकते हैं और एक और नाम के साथ इसे बचाने की जरूरत है:

जो लोग जरूरत के लिए, यहाँ कैसे POI उपयोग करने के लिए rjb स्थापित करने के लिए है। उदाहरण के लिए सर्वर पर आपके पास template.xls फ़ाइल है।

सरल काम कर उदाहरण (अपने .rb फ़ाइल के पास template.xls की आवश्यकता है):

 

#edit_xls.rb 
require 'rubygems' 
require 'spreadsheet' 

book = Spreadsheet.open 'template.xls' 
sheet = book.worksheet 0 
sheet[0,0] = 'qweqeqw' 
book.write 'edited.xls' 
 
+0

यह वही है जो मैंने करने की कोशिश की और मैक्रोज़ इस तरह से खो गए – Jerem

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