web-dev-qa-db-fra.com

Comment puis-je ouvrir un fichier Excel en Python?

Comment ouvrir un fichier qui est un fichier Excel à lire en Python? 

J'ai ouvert des fichiers texte, par exemple, sometextfile.txt avec la commande de lecture. Comment faire cela pour un fichier Excel?

68
novak

Modifier: 
Dans la nouvelle version de pandas, vous pouvez passer le nom de la feuille en tant que paramètre. 

file_name =  # path to file + file name
sheet =  # sheet name or sheet number or list of sheet numbers and names

import pandas as pd
df = pd.read_Excel(io=file_name, sheet_name=sheet)
print(df.head(5))  # print first 5 rows of the dataframe

Vérifiez la documentation pour des exemples sur la façon de passer sheet_name
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_Excel.html

Ancienne version: 
vous pouvez aussi utiliser pandas package ....

Lorsque vous travaillez avec un fichier Excel à plusieurs feuilles, vous pouvez utiliser:

import pandas as pd
xl = pd.ExcelFile(path + filename)
xl.sheet_names

>>> [u'Sheet1', u'Sheet2', u'Sheet3']

df = xl.parse("Sheet1")
df.head()

df.head() imprimera les 5 premières lignes de votre fichier Excel

Si vous travaillez avec un fichier Excel avec une seule feuille, vous pouvez simplement utiliser:

import pandas as pd
df = pd.read_Excel(path + filename)
print df.head()
78
Rakesh Adhikesavan

Essayez la bibliothèque xlrd .

[Edit] - d'après ce que je peux voir de votre commentaire, quelque chose comme l'extrait de code ci-dessous pourrait faire l'affaire. Je suppose ici que vous recherchez simplement une colonne pour le mot 'john', mais vous pouvez en ajouter davantage ou en faire une fonction plus générique.

from xlrd import open_workbook

book = open_workbook('simple.xls',on_demand=True)
for name in book.sheet_names():
    if name.endswith('2'):
        sheet = book.sheet_by_name(name)

        # Attempt to find a matching row (search the first column for 'john')
        rowIndex = -1
        for cell in sheet.col(0): # 
            if 'john' in cell.value:
                break

        # If we found the row, print it
        if row != -1:
            cells = sheet.row(row)
            for cell in cells:
                print cell.value

        book.unload_sheet(name) 
31
Jon Cage

Ce n’est pas aussi simple que d’ouvrir un fichier texte et cela nécessitera une sorte de module externe puisque rien n’est intégré à cela. Voici quelques options: 

http://www.python-Excel.org/

Si possible, envisagez d'exporter la feuille de calcul Excel sous forme de fichier CSV, puis utilisez le module python csv intégré pour le lire:

http://docs.python.org/library/csv.html

16
Donald Miner

Il y a le paquet openpxyl :

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.get_sheet_names()
['Sheet2', 'New Title', 'Sheet1']

>>> worksheet1 = wb2['Sheet1'] # one way to load a worksheet
>>> worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet
>>> print(worksheet1['D18'].value)
3
>>> for row in worksheet1.iter_rows():
>>>     print row[0].value()
6
wordsforthewise

Cela peut aider:

Cela crée un nœud qui prend une liste 2D (liste d'éléments de liste) et les insère dans la feuille de calcul Excel. assurez-vous que les IN [] sont présents ou lanceront une exception.

il s'agit d'une réécriture du nœud de dynamo Revit Excel pour Excel 2013 en tant que nœud prédéfini par défaut. J'ai aussi un noeud de lecture similaire. La syntaxe Excel en Python est délicate.

thnx @CodingNinja - mise à jour:)

###Export Excel - intended to replace malfunctioning Excel node

import clr

clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
##AddReferenceGUID("{00020813-0000-0000-C000-000000000046}") ''Excel                            C:\Program Files\Microsoft Office\Office15\Excel.EXE 
##Need to Verify interop for version 2015 is 15 and node attachemnt for it.
from Microsoft.Office.Interop import  * ##Excel
################################Initialize FP and Sheet ID
##Same functionality as the Excel node
strFileName = IN[0]             ##Filename
sheetName = IN[1]               ##Sheet
RowOffset= IN[2]                ##RowOffset
ColOffset= IN[3]                ##COL OFfset
Data=IN[4]                      ##Data
Overwrite=IN[5]                 ##Check for auto-overwtite
XLVisible = False   #IN[6]      ##XL Visible for operation or not?

RowOffset=0
if IN[2]>0:
    RowOffset=IN[2]             ##RowOffset

ColOffset=0
if IN[3]>0:
    ColOffset=IN[3]             ##COL OFfset

if IN[6]<>False:
    XLVisible = True #IN[6]     ##XL Visible for operation or not?

################################Initialize FP and Sheet ID
xlCellTypeLastCell = 11                 #####define special sells value constant
################################
xls = Excel.ApplicationClass()          ####Connect with application
xls.Visible = XLVisible                 ##VISIBLE YES/NO
xls.DisplayAlerts = False               ### ALerts

import os.path

if os.path.isfile(strFileName):
    wb = xls.Workbooks.Open(strFileName, False)     ####Open the file 
else:
    wb = xls.Workbooks.add#         ####Open the file 
    wb.SaveAs(strFileName)
wb.application.visible = XLVisible      ####Show Excel
try:
    ws = wb.Worksheets(sheetName)       ####Get the sheet in the WB base

except:
    ws = wb.sheets.add()                ####If it doesn't exist- add it. use () for object method
    ws.Name = sheetName



#################################
#lastRow for iterating rows
lastRow=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
#lastCol for iterating columns
lastCol=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Column
#######################################################################
out=[]                                  ###MESSAGE GATHERING

c=0
r=0
val=""
if Overwrite == False :                 ####Look ahead for non-empty cells to throw error
    for r, row in enumerate(Data):   ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
        for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
            if col.Value2 >"" :
                OUT= "ERROR- Cannot overwrite"
                raise ValueError("ERROR- Cannot overwrite")
##out.append(Data[0]) ##append mesage for error
############################################################################

for r, row in enumerate(Data):   ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
    for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
        ws.Cells[r+1+RowOffset,c+1+ColOffset].Value2 = col.__str__()

##run macro disbled for debugging Excel macro
##xls.Application.Run("Align_data_and_Highlight_Issues")
1
Apsis0215

Vous pouvez utiliser le package xlpython qui requiert uniquement xlrd. Trouvez-le ici https://pypi.python.org/pypi/xlpython Et sa documentation ici https://github.com/morfat/xlpython

1
Morfat Mosoti