मेरे पास एक प्रोग्राम है जो openpyxl
का उपयोग कर स्प्रेडशीट को लिखता है। कार्यक्रम के निष्पादन पर, कोशिकाओं को अपेक्षित रूप से भर दिया जाता है लेकिन स्प्रेडशीट क्षतिग्रस्त हो जाती है। एक्सेल स्प्रेडशीट की मरम्मत करता है और फिर मैं इसे फिर से देख सकता हूं।स्प्रेडशीट पर लिखने के लिए openpyxl मॉड्यूल का उपयोग एक क्षतिग्रस्त स्प्रेडशीट बनाता है, ज़िपफाइल मॉड्यूल के साथ कैसे ठीक करें?
import openpyxl
from openpyxl import load_workbook
amounts, row = [1, 2, 3, 4, 5], 2
book = load_workbook("output.xlsx")
sheet = book.active
for i, value in enumerate(amounts):
sheet.cell(column=i+1, row=row, value=value)
print ("Sheet updating complete.")
book.save("output.xlsx")
मैं Microsoft से ओपन एक्सएमएल एसडीके उत्पादकता उपकरण का उपयोग कर एक दूसरे के साथ एक अच्छे और बुरे फ़ाइल की तुलना करने की कोशिश की और पाया है कि styles.xml
याद आ रही है है। मैं इसे किसी अन्य प्रश्न से प्राप्त निम्न स्रोत कोड का उपयोग करके कॉपी करने का प्रयास करता हूं, लेकिन यह मेरे लिए समस्या का समाधान नहीं करता है।
import zipfile
with zipfile.ZipFile('outputcopy.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
with zipfile.ZipFile('output.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
मैं मरम्मत से पुष्टि कर सकते हैं लोग इन एक्सेल उत्पन्न करता है, कि समस्या xl/styles.xml
के साथ है। मुझे इस प्रतिलिपि फ़ाइल को अच्छी प्रतिलिपि से, खराब प्रतिलिपि में कॉपी करने की आवश्यकता है।
मैं xl/styles.xml
फ़ाइल की प्रतिलिपि कैसे प्राप्त कर सकता हूं ताकि प्रोग्राम output.xlsx
को नुकसान पहुंचाए बिना चलाया जा सके?
मैंने इस मुद्दे को ठीक करने का एक और प्रयास किया है। ऑफ मौके में styles.xml
को एक अलग एक्सेल फ़ाइल से कॉपी नहीं किया जा सकता है; मैंने book.save("output.xlsx")
से पहले output.xlsx
से styles.xml
खोला है। सहेजने के बाद, मैं सहेजने से पहले styles.xml
प्राप्त करता हूं, और इसे लिखता हूं। दुर्भाग्यवश, इसने कुछ भी नहीं बदला है और मुझे अभी भी एक क्षतिग्रस्त एक्सेल फ़ाइल मिल रही है। इस प्रयास के साथ, अपने परीक्षण कोड इस तरह दिखता है:
import openpyxl
import zipfile
from openpyxl import load_workbook
amounts, indexValue, row = [1, 2, 3, 4, 5], 0, 2
book = load_workbook("output.xlsx")
sheet = book.active
for i, value in enumerate(amounts):
sheet.cell(column=i+1, row=row, value=value)
print ("Sheet updating complete.")
with zipfile.ZipFile('output.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
book.save("output.xlsx")
with zipfile.ZipFile('output.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
मैं एक पूरी तरह से नए Excel फ़ाइल के रूप में सहेजना की कोशिश की है, लेकिन अभी भी एक ही समस्या है। मैंने output.xlsx
से खोलने और नई सहेजी गई फ़ाइल को लिखने के लिए zip file
का उपयोग करने का प्रयास किया, लेकिन अभी भी कोई परिणाम नहीं है।
import openpyxl
import zipfile
from openpyxl import load_workbook
amounts, indexValue, row, cell = [1, 2, 3, 4, 5], 0, 2, "A2"
book = load_workbook("output.xlsx")
sheet = book.active
while indexValue != 5:
sheet[cell] = amounts[indexValue]
indexValue += 1
cell = chr(ord(cell[0]) + 1) + str(cell[1])
print ("Sheet updating complete.")
book.save("test.xlsx")
with zipfile.ZipFile('output.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
with zipfile.ZipFile('test.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
हालांकि मैं पहले से ही इस मुद्दे को तय कर दी है, यह देखते हुए कि इस समस्या को केवल जब किसी कार्यपुस्तिका लोड हो रहा है तब हो रहा है लायक है। मैंने स्प्रैडशीट्स के साथ एक और प्रोग्राम बनाया है जो इसे लोड करने के बजाए कार्यपुस्तिका बनाता है। इसके परिणामस्वरूप, स्प्रेडशीट क्षतिग्रस्त नहीं बचा है।
माइक्रोसॉफ्ट एक्सेल का कौन सा संस्करण आप उपयोग कर रहे हैं? मैं एमएस एक्सेल 2010 का उपयोग कर रहा हूं और यह आपके उदाहरण का उपयोग करके कोई त्रुटि नहीं दिखाता है। – Brian
@ ब्रायन मैं माइक्रोसॉफ्ट एक्सेल, 2016 के नवीनतम संस्करणों का उपयोग कर रहा हूं। मैंने ओएस एक्स और विंडोज 10 दोनों पर एक्सेल फ़ाइल खोलने का प्रयास किया है। एक तरफ ध्यान दें, ऐप्पल के नंबर फ़ाइल को पूरी तरह से ठीक करने में सक्षम हैं। –