एक्सेल स्प्रेडशीट में लिखना


149

मैं पायथन के लिए नया हूं। मुझे अपने प्रोग्राम से स्प्रेडशीट में कुछ डेटा लिखने की आवश्यकता है। मैंने ऑनलाइन खोज की है और वहाँ कई पैकेज उपलब्ध प्रतीत होते हैं (xlwt, XlsXcessive, openpyxl)। दूसरों को एक .csv फ़ाइल (कभी भी CSV का उपयोग नहीं करने और वास्तव में यह क्या है) नहीं लिखने का सुझाव देते हैं।

कार्यक्रम बहुत सरल है। मेरी दो सूची (फ्लोट) और तीन चर (स्ट्रिंग्स) हैं। मैं दो सूचियों की लंबाई नहीं जानता और वे शायद एक ही लंबाई नहीं होगी।

मैं चाहता हूं कि लेआउट नीचे दी गई तस्वीर में जैसा हो:

लेआउट का नमूना

गुलाबी कॉलम में पहली सूची के मान होंगे और हरे रंग के कॉलम में दूसरी सूची के मूल्य होंगे।

तो ऐसा करने का सबसे अच्छा तरीका क्या है?

PS मैं विंडोज 7 चला रहा हूं, लेकिन जरूरी नहीं कि इस प्रोग्राम को चलाने वाले कंप्यूटरों में ऑफिस स्थापित हो।

import xlwt

x=1
y=2
z=3

list1=[2.34,4.346,4.234]

book = xlwt.Workbook(encoding="utf-8")

sheet1 = book.add_sheet("Sheet 1")

sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")

sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)

sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")

i=4

for n in list1:
    i = i+1
    sheet1.write(i, 0, n)



book.save("trial.xls")

मैंने आपके सभी सुझावों का उपयोग करते हुए यह लिखा है। इससे काम हो जाता है लेकिन इसमें थोड़ा सुधार किया जा सकता है।

मैं लूप (सूची 1 मान) के लिए बनाई गई कोशिकाओं को वैज्ञानिक या संख्या के रूप में कैसे प्रारूपित करूं?

मैं मूल्यों को छिन्न-भिन्न नहीं करना चाहता। कार्यक्रम में उपयोग किए जाने वाले वास्तविक मानों में दशमलव के बाद लगभग 10 अंक होंगे।


यदि आप इसे एक पाठ संपादक में नोटपैड / वर्डपैड की तरह खोलते हैं तो आप समझ जाएंगे कि tsv फ़ाइल क्या है। Tsv का उपयोग करने का मुख्य लाभ यह है कि आप आश्वस्त हो सकते हैं कि मूल रूप से किसी भी स्प्रेडशीट प्रोग्राम का कोई भी संस्करण इसे खोल सकता है, और न केवल कार्यालय 2010 के एक्सेल
goncalopp

संख्यात्मक डेटा के प्रदर्शन को नियंत्रित करने के लिए अजगर में स्ट्रिंग प्रारूप का उपयोग करें।
फ्रेड मिशेल

Openpyxl को .xlsx फाइलों के साथ काम करने के लिए जांचें
सैंटियागो

जवाबों:


95
import xlwt

def output(filename, sheet, list1, list2, x, y, z):
    book = xlwt.Workbook()
    sh = book.add_sheet(sheet)

    variables = [x, y, z]
    x_desc = 'Display'
    y_desc = 'Dominance'
    z_desc = 'Test'
    desc = [x_desc, y_desc, z_desc]

    col1_name = 'Stimulus Time'
    col2_name = 'Reaction Time'

    #You may need to group the variables together
    #for n, (v_desc, v) in enumerate(zip(desc, variables)):
    for n, v_desc, v in enumerate(zip(desc, variables)):
        sh.write(n, 0, v_desc)
        sh.write(n, 1, v)

    n+=1

    sh.write(n, 0, col1_name)
    sh.write(n, 1, col2_name)

    for m, e1 in enumerate(list1, n+1):
        sh.write(m, 0, e1)

    for m, e2 in enumerate(list2, n+1):
        sh.write(m, 1, e2)

    book.save(filename)

अधिक स्पष्टीकरण के लिए: https://github.com/python-excel


13
आप उल्लेख करना चाहते हैं कि यदि आप विंडोज पर पायथन चला रहे हैं और एक्सेल को उसी मशीन पर स्थापित किया है, तो आप सीधे एक्सेल को नियंत्रित करने के लिए पायथन कॉम इंटरफेस का उपयोग कर सकते हैं।
माइकल डिलन

1
लिंक बहुत मददगार था। धन्यवाद
Jey

3
बस ध्यान दें कि इस कोड के साथ अधिकतम पंक्ति की सीमा 65536 पंक्तियों के रूप में है, .xls फ़ाइलें केवल उसी पंक्तियों का समर्थन करती हैं
श्रेयस पिंपलगांवकर

1
स्पष्ट होने के लिए, xlwtकेवल .xlsExcel 2003 या उससे पहले की पुरानी फ़ाइलों को लिखने के लिए है। यह पुराना हो सकता है (आपकी आवश्यकताओं के आधार पर)।
काउलिनेटर

आप .xlsx फ़ाइलों के साथ काम करने के लिए Openpyxl की जाँच कर सकते हैं
सैंटियागो

140

पांडा से DataFrame.to_excel का उपयोग करें । पंडों आपको कार्यात्मक रूप से समृद्ध डेटास्ट्रक्चर में अपने डेटा का प्रतिनिधित्व करने की अनुमति देता है और आपको एक्सेल फाइलों में भी पढ़ने देगा ।

आपको सबसे पहले अपने डेटा को डेटाफ्रेम में बदलना होगा और फिर इसे एक्सेल फाइल में सेव करना होगा जैसे:

In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]: 
   Reaction Time  Stimulus Time
0              1              1
1              2              2
2              3              3
3              4              4

In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)

और जो एक्सेल फाइल निकलती है वह इस प्रकार है:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि दोनों सूचियों की लंबाई समान होनी चाहिए अन्यथा पांडा को शिकायत होगी। इसे हल करने के लिए, सभी लापता मानों को बदलें None


धन्यवाद, लेकिन मेरी जरूरतों के लिए बहुत जटिल लगता है।
Jey

एक अच्छा है, लेकिन एक बिट overkill +1
बुरहान खालिद

2
बहुत यकीन है कि पांडा अपनी एक्सेल क्षमताओं के लिए xlrd / xlwt पुस्तकालयों का उपयोग करता है pandas.pydata.org/pandas-docs/stable/io.html#excel-files
mrmagooos

6
मैं इसे xlwtभी इस्तेमाल कर रहा था , लेकिन एक openpyxlत्रुटि हो रही थी । किसी और के लिए जो इससे भ्रमित हो जाता है - यह वह सब है जो आप चाहते हैं। पांडा (0.12) डॉक्स का कहना है कि " .xlsएक्सटेंशन वाली फाइलें xlwt का उपयोग करके लिखी जाएंगी और उन .xlsxएक्सटेंशन के साथ ओपनपीएक्सएल का उपयोग करके लिखा जाएगा"।
रेसिंग टैडपोल

5
यकीन नहीं होता कि लोग इसे ओवरकिल क्यों कह रहे हैं। मेरे उद्देश्यों के लिए यह वही था जो मैं देख रहा था। धन्यवाद!
अबे

35
  • xlrd / xlwt (मानक): पायथन में यह मानक लाइब्रेरी की कार्यक्षमता नहीं है, लेकिन मुझे लगता है कि xlrd / xlwt को एक्सेल फाइल पढ़ने और लिखने का "मानक" तरीका है। वर्कबुक बनाना, शीट जोड़ना, डेटा / फॉर्मूले लिखना, और फॉर्मेट सेल बनाना काफी आसान है। यदि आपको इन सभी चीजों की आवश्यकता है, तो आपको इस पुस्तकालय के साथ सबसे अधिक सफलता मिल सकती है। मुझे लगता है कि आप इसके बजाय ओपनपीएक्सएल चुन सकते हैं और यह काफी समान होगा, लेकिन मैंने इसका उपयोग नहीं किया है।

    Xlwt के साथ कोशिकाओं को प्रारूपित करने के लिए, ए को परिभाषित करें XFStyleऔर जब आप शीट पर लिखते हैं तो शैली को शामिल करें। यहाँ कई संख्या स्वरूपों के साथ एक उदाहरण है । नीचे उदाहरण कोड देखें।

  • तब्लीब (शक्तिशाली, सहज): सारणीबद्ध डेटा के साथ काम करने के लिए तबलीब एक अधिक शक्तिशाली अभी तक सहज ज्ञान युक्त पुस्तकालय है। यह एक्सेल वर्कबुक को कई शीट के साथ-साथ अन्य प्रारूपों, जैसे सीएसवी, जोंस और याम्ल के साथ लिख सकता है। यदि आपको स्वरूपित कोशिकाओं (जैसे पृष्ठभूमि रंग) की आवश्यकता नहीं है, तो आप अपने आप को इस पुस्तकालय का उपयोग करने के लिए एक एहसान करेंगे, जो आपको लंबे समय तक आगे ले जाएगा।

  • सीएसवी (आसान): आपके कंप्यूटर की फाइलें टेक्स्ट या बाइनरी हैं । टेक्स्ट फाइलें सिर्फ वर्ण हैं, जिनमें विशेष रूप से जैसे कि newlines और टैब शामिल हैं, और इन्हें आसानी से कहीं भी खोला जा सकता है (जैसे नोटपैड, आपका वेब ब्राउज़र या कार्यालय उत्पाद)। एक सीएसवी फ़ाइल एक पाठ फ़ाइल है जिसे एक निश्चित तरीके से स्वरूपित किया जाता है: प्रत्येक पंक्ति मानों की एक सूची है, जो अल्पविराम द्वारा अलग होती है। पायथन प्रोग्राम आसानी से पाठ पढ़ और लिख सकते हैं, इसलिए एक सीएसवी फ़ाइल आपके पायथन प्रोग्राम से एक्सेल (या किसी अन्य पायथन प्रोग्राम) में डेटा निर्यात करने का सबसे आसान और तेज़ तरीका है।

    एक्सेल फाइलें बाइनरी होती हैं और विशेष पुस्तकालयों की आवश्यकता होती है, जो फाइल फॉर्मेट को जानते हैं, यही कारण है कि आपको उन्हें पढ़ने / लिखने के लिए अजगर, या Microsoft एक्सेल, ग्नुमेरिक या लिब्रे ऑफिस जैसे विशेष कार्यक्रम के लिए एक अतिरिक्त लाइब्रेरी की आवश्यकता होती है।


import xlwt

style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'

...

for i,n in enumerate(list1):
    sheet1.write(i, 0, n, fmt)

2
यदि आप CSV फ़ाइल लिखने जा रहे हैं, तो आप शायद मानक लाइब्रेरी में शामिल csv मॉड्यूल का उपयोग करना चाहते हैं।
फ्लिम

1
ऐसा नहीं है कि यह विशेष रूप से मायने रखता है, लेकिन इतने सारे उच्च-स्तरीय पैकेजों की तरह टैलिब, एक्सेल फ़ाइलों को आउटपुट करने के लिए xlwt का उपयोग करता है।
जॉन वाई

13

मैंने पायथन के लिए कुछ एक्सेल मॉड्यूल का सर्वेक्षण किया, और ओपनपीएक्सएल को सबसे अच्छा पाया ।

फ्री बुक ऑटोमेटिक द बोरिंग स्टफ विथ पायथन में अधिक विवरण के साथ ओपनपीएक्सएल पर एक अध्याय है या आप रीड डॉक्स साइट की जांच कर सकते हैं । Openpyxl का उपयोग करने के लिए आपको Office या Excel स्थापित करने की आवश्यकता नहीं होगी।

आपका कार्यक्रम कुछ इस तरह दिखाई देगा:

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]

for i in range(len(stimulusTimes)):
    sheet['A' + str(i + 6)].value = stimulusTimes[i]
    sheet['B' + str(i + 6)].value = reactionTimes[i]

wb.save('example.xlsx')

मुझे यह कहते हुए एक त्रुटि मिलती है: int64 को excel
pnkjmndhl

11

CSV अल्पविराम से अलग किए गए मानों के लिए है। CSV एक पाठ फ़ाइल की तरह है और इसे केवल .CSV एक्सटेंशन जोड़कर बनाया जा सकता है

उदाहरण के लिए इस कोड को लिखें:

f = open('example.csv','w')
f.write("display,variable x")
f.close()

आप इस फ़ाइल को एक्सेल के साथ खोल सकते हैं।


5
आप CSV का उपयोग करके कॉलम पृष्ठभूमि को प्रारूपित नहीं कर सकते। यह केवल आयात और निर्यात के लिए एक डेटा प्रारूप है।
माइकल डिलन

5
यदि आप ऐसा करने जा रहे हैं तो आप शायद मानक पुस्तकालय में शामिल सीएसवी मॉड्यूल का उपयोग करना चाहते हैं। उदाहरण के लिए, यह बेहतर उद्धृत करता है।
फ्लिम

@ मुझे पता है कि मैं कैसे बस विभिन्न कोशिकाओं को लिखूं?
ओल्डबॉय

यदि आप पायथन 3 का उपयोग कर रहे हैं और फ़ाइल में गैर-एएससीआईआई अक्षर हैं, जैसे , éया , आप एक के f.write('\xEF\xBB\xBF')बाद एक सही करते हैं open()। वह BOM ( बाइट ऑर्डर मार्क , qv) है, जिसे UTF-8 एन्कोडिंग को पहचानने के लिए Microsoft सॉफ़्टवेयर की आवश्यकता है
Walter Tross

10
import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()

7

निम्नलिखित पुस्तकालयों पर भी एक नज़र लेने की कोशिश करें:

xlwings - पायथन से एक स्प्रेडशीट के डेटा को अंदर और बाहर करने के लिए, साथ ही वर्कबुक और चार्ट में हेरफेर करने के लिए

ExcelPython - VBA के बजाय पायथन में उपयोगकर्ता-परिभाषित फ़ंक्शन (UDF) और मैक्रोज़ लिखने के लिए एक एक्सेल ऐड-इन


2

OpenPyxl काफी अच्छी लाइब्रेरी है, जिसे एक्सेल 2010 xlsx / xlsm फाइल पढ़ने / लिखने के लिए बनाया गया है:

https://openpyxl.readthedocs.io/en/stable

अन्य उत्तर , इसे संदर्भित करते हुए विकृत फ़ंक्शन ( get_sheet_by_name) का उपयोग कर रहा है । यह इसके बिना कैसे करना है:

import openpyxl

wbkName = 'New.xlsx'        #The file should be created before running the code.
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close

1
उपरोक्त कोड त्रुटि उत्पन्न करता हैFileNotFoundError: [Errno 2] No such file or directory: 'New.xlsx'
Atinesh

@Atinesh - प्रतिक्रिया के लिए धन्यवाद - openpyxl.load_workbookएक कार्यपुस्तिका लोड करता है, जो पहले से मौजूद है। New.xlsxइस त्रुटि से बचने के लिए एक फ़ाइल बनाएँ ।
वित्रता

1
ठीक है सुझाव के लिए धन्यवाद
Atinesh

ध्यान दें कि Openpyxl पुराने 'xls' प्रारूप का समर्थन नहीं करता है।
टिमोथी सी। क्विन

2

xlsxwriterपुस्तकालय बनाने के लिए अच्छा है .xlsxफ़ाइलें। निम्नलिखित स्निपेट ऑर्डर और प्रदर्शित नामों.xlsx को बताते हुए एक फ़ाइल डिस्क्स की सूची से उत्पन्न करता है :

from xlsxwriter import Workbook


def create_xlsx_file(file_path: str, headers: dict, items: list):
    with Workbook(file_path) as workbook:
        worksheet = workbook.add_worksheet()
        worksheet.write_row(row=0, col=0, data=headers.values())
        header_keys = list(headers.keys())
        for index, item in enumerate(items):
            row = map(lambda field_id: item.get(field_id, ''), header_keys)
            worksheet.write_row(row=index + 1, col=0, data=row)


headers = {
    'id': 'User Id',
    'name': 'Full Name',
    'rating': 'Rating',
}

items = [
    {'id': 1, 'name': "Ilir Meta", 'rating': 0.06},
    {'id': 2, 'name': "Abdelmadjid Tebboune", 'rating': 4.0},
    {'id': 3, 'name': "Alexander Lukashenko", 'rating': 3.1},
    {'id': 4, 'name': "Miguel Díaz-Canel", 'rating': 0.32}
]

create_xlsx_file("my-xlsx-file.xlsx", headers, items)

यहाँ छवि विवरण दर्ज करें


💡 नोट 1 - मैं जानबूझकर ओपी द्वारा प्रस्तुत सटीक मामले का जवाब नहीं दे रहा हूं। इसके बजाय, मैं एक अधिक सामान्य समाधान IMHO प्रस्तुत कर रहा हूं जो अधिकांश आगंतुक चाहते हैं। इस सवाल का शीर्षक खोज इंजनों में अच्छी तरह से अनुक्रमित है और बहुत सारे ट्रैफ़िक को ट्रैक करता है

यहाँ छवि विवरण दर्ज करें

💡 नोट 2 - आप कर रहे हैं नहीं Python3.6 का उपयोग कर या नए, उपयोग करने पर विचार OrderedDictमें headers। Python3.6 से पहले के आदेश को dictसंरक्षित नहीं किया गया था।



0

सटीक संख्याओं को आयात करने का सबसे आसान तरीका यह है कि आप l1और आपके संख्याओं के बाद एक दशमलव जोड़ें l2। पायथन इस दशमलव बिंदु की व्याख्या सटीक संख्या को शामिल करने के लिए आपसे निर्देश के रूप में करता है। यदि आपको इसे कुछ दशमलव स्थान तक सीमित रखने की आवश्यकता है, तो आपको एक प्रिंट कमांड बनाने में सक्षम होना चाहिए जो आउटपुट को सीमित करता है, जैसे कुछ सरल:

print variable_example[:13]

यह दसवें दशमलव स्थान तक सीमित कर देगा, यह मानते हुए कि आपके डेटा में दशमलव के दो पूर्णांक बचे हैं।


0

आप XlsxWriter पर आधारित hfexcel ह्यूमन फ्रेंडली ऑब्जेक्ट ओरिएंटेड पायथन लाइब्रेरी आज़मा सकते हैं :

from hfexcel import HFExcel

hf_workbook = HFExcel.hf_workbook('example.xlsx', set_default_styles=False)

hf_workbook.add_style(
    "headline", 
    {
       "bold": 1,
        "font_size": 14,
        "font": "Arial",
        "align": "center"
    }
)

sheet1 = hf_workbook.add_sheet("sheet1", name="Example Sheet 1")

column1, _ = sheet1.add_column('headline', name='Column 1', width=2)
column1.add_row(data='Column 1 Row 1')
column1.add_row(data='Column 1 Row 2')

column2, _ = sheet1.add_column(name='Column 2')
column2.add_row(data='Column 2 Row 1')
column2.add_row(data='Column 2 Row 2')


column3, _ = sheet1.add_column(name='Column 3')
column3.add_row(data='Column 3 Row 1')
column3.add_row(data='Column 3 Row 2')

# In order to get a row with coordinates:
# sheet[column_index][row_index] => row
print(sheet1[1][1].data)
assert(sheet1[1][1].data == 'Column 2 Row 2')

hf_workbook.save()

0

यदि आपकी आवश्यकता किसी मौजूदा कार्यपुस्तिका को संशोधित करने की है, तो सबसे सुरक्षित तरीका प्यू का उपयोग करना होगा । आपको कुछ पुस्तकालयों को स्थापित करने की आवश्यकता है और इसके माध्यम से कूदने के लिए कुछ हुप्स लगते हैं लेकिन एक बार इसकी स्थापना के बाद, यह बुलेटप्रूफ होगा क्योंकि आप लिबरऑफिस / ओपनऑफिस के विस्तृत और ठोस एपीआई का लाभ उठा रहे हैं।

कृपया मेरी Gist देखें कि कैसे एक linux system सेट करें और pyoo का उपयोग करके कुछ बुनियादी कोडिंग करें।

यहाँ कोड का एक उदाहरण है:

#!/usr/local/bin/python3
import pyoo
# Connect to LibreOffice using a named pipe 
# (named in the soffice process startup)
desktop = pyoo.Desktop(pipe='oo_pyuno')
wkbk = desktop.open_spreadsheet("<xls_file_name>")
sheet = wkbk.sheets['Sheet1']
# Write value 'foo' to cell E5 on Sheet1
sheet[4,4].value='foo'
wkbk.save()
wkbk.close()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.