Saya sangat merekomendasikan xlrd untuk membaca .xlsfile.
voyager menyebutkan penggunaan otomatisasi COM. Setelah melakukan ini sendiri beberapa tahun yang lalu, berhati-hatilah karena melakukan ini adalah PITA yang nyata. Jumlah peringatan sangat besar dan dokumentasinya kurang dan mengganggu. Saya menemukan banyak bug dan gotcha aneh, beberapa di antaranya membutuhkan waktu berjam-jam untuk mengetahuinya.
PEMBARUAN: Untuk .xlsxfile yang lebih baru , perpustakaan yang disarankan untuk membaca dan menulis tampaknya openpyxl (terima kasih, Ikar Pohorský).
Untuk file Excel 2007+ ( .xlsx) Anda mungkin akan menggunakan OpenPyXL .
Ikar Pohorský
48
Menggunakan panda:
import pandas as pd
xls = pd.ExcelFile("yourfilename.xls")
sheetX = xls.parse(2)#2 is the sheet number
var1 = sheetX['ColumnName']print(var1[1])#1 is the row number...
"Nilai sel baca" tidak berfungsi ... ini memunculkan TypeError: objek 'Sheet' tidak dapat dipanggil. Sisanya bekerja dengan baik.
Newbielp
13
Saya pikir Panda adalah cara terbaik untuk pergi. Sudah ada satu jawaban di sini dengan Pandas menggunakan ExcelFilefungsi, tapi tidak bekerja dengan baik untuk saya. Dari sini saya menemukan read_excelfungsi yang berfungsi dengan baik:
import pandas as pd
dfs = pd.read_excel("your_file_name.xlsx", sheet_name="your_sheet_name")print(dfs.head(10))
PS Anda harus xlrdmenginstal agar read_excelfungsi dapat bekerja
Pembaruan 21-03-2020: Seperti yang Anda lihat di sini , ada masalah dengan xlrdmesin dan itu akan ditinggalkan. The openpyxladalah pengganti terbaik. Jadi seperti yang dijelaskan di sini , sintaks kanonik harus:
def xlsx(fname):import zipfilefrom xml.etree.ElementTreeimport iterparse
z = zipfile.ZipFile(fname)
strings =[el.text for e, el in iterparse(z.open('xl/sharedStrings.xml'))if el.tag.endswith('}t')]
rows =[]
row ={}
value =''for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):if el.tag.endswith('}v'):# Example: <v>84</v>
value = el.textif el.tag.endswith('}c'):# Example: <c r="A3" t="s"><v>84</v></c> if el.attrib.get('t')=='s':
value = strings[int(value)]
letter = el.attrib['r']# Example: AZ22 while letter[-1].isdigit():
letter = letter[:-1]
row[letter]= value
value =''if el.tag.endswith('}row'):
rows.append(row)
row ={}return rows
Perbaikan yang ditambahkan adalah mengambil konten dengan nama sheet, menggunakan re untuk mendapatkan kolom dan memeriksa apakah string bersama digunakan.
def xlsx(fname,sheet):import zipfilefrom xml.etree.ElementTreeimport iterparseimport re
z = zipfile.ZipFile(fname)if'xl/sharedStrings.xml'in z.namelist():# Get shared strings
strings =[element.text for event, elementin iterparse(z.open('xl/sharedStrings.xml'))if element.tag.endswith('}t')]
sheetdict ={ element.attrib['name']:element.attrib['sheetId']for event,element in iterparse(z.open('xl/workbook.xml'))if element.tag.endswith('}sheet')}
rows =[]
row ={}
value =''if sheet in sheets:
sheetfile ='xl/worksheets/sheet'+sheets[sheet]+'.xml'#print(sheet,sheetfile)for event, element in iterparse(z.open(sheetfile)):# get value or index to shared stringsif element.tag.endswith('}v')or element.tag.endswith('}t'):
value = element.text# If value is a shared string, use value as an indexif element.tag.endswith('}c'):if element.attrib.get('t')=='s':
value = strings[int(value)]# split the row/col information so that the row leter(s) can be separate
letter = re.sub('\d','',element.attrib['r'])
row[letter]= value
value =''if element.tag.endswith('}row'):
rows.append(row)
row ={}return rows
Terima kasih telah menghidupkan kembali jawaban saya!
Collin Anderson
2
Anda dapat menggunakan salah satu pustaka yang tercantum di sini (seperti Pyxlreader yang didasarkan pada JExcelApi, atau xlwt ), ditambah otomatisasi COM untuk menggunakan Excel itu sendiri untuk membaca file, tetapi untuk itu Anda memperkenalkan Office sebagai ketergantungan perangkat lunak Anda, yang mungkin tidak selalu menjadi pilihan.
(1) pyxlreader adalah cacar mutlak. Anda pasti tidak pernah mencobanya. Lihat komentar saya di sini: stackoverflow.com/questions/1243545/… (2) xlwtfile WriTes; gunakan xlrduntuk ReaD file.
John Machin
2
Jika Anda membutuhkan format XLS lama. Di bawah kode untuk ansii 'cp1251'.
import xlrd
file=u'C:/Landau/task/6200.xlsx'try:
book = xlrd.open_workbook(file,encoding_override="cp1251")except:
book = xlrd.open_workbook(file)print("The number of worksheets is {0}".format(book.nsheets))print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3)))for rx in range(sh.nrows):print(sh.row(rx))
with open(csv_filename)as file:
data = file.read()with open(xl_file_name,'w')as file:
file.write(data)
Anda dapat mengubah CSV menjadi unggul seperti di atas dengan paket bawaan. CSV dapat ditangani dengan paket built-in dari dictreader dan dictwriter yang akan bekerja dengan cara yang sama seperti kamus python. yang membuatnya sangat mudah Saat ini saya tidak mengetahui adanya paket inbuilt untuk excel tetapi saya telah menemukan openpyxl. Itu juga cukup lurus ke depan dan sederhana Anda dapat melihat potongan kode di bawah ini berharap ini membantu
import openpyxl
book = openpyxl.load_workbook(filename)
sheet = book.active
result =sheet['AP2']print(result.value)
Jawaban:
Saya sangat merekomendasikan xlrd untuk membaca
.xls
file.voyager menyebutkan penggunaan otomatisasi COM. Setelah melakukan ini sendiri beberapa tahun yang lalu, berhati-hatilah karena melakukan ini adalah PITA yang nyata. Jumlah peringatan sangat besar dan dokumentasinya kurang dan mengganggu. Saya menemukan banyak bug dan gotcha aneh, beberapa di antaranya membutuhkan waktu berjam-jam untuk mengetahuinya.
PEMBARUAN: Untuk
.xlsx
file yang lebih baru , perpustakaan yang disarankan untuk membaca dan menulis tampaknya openpyxl (terima kasih, Ikar Pohorský).sumber
.xlsx
) Anda mungkin akan menggunakan OpenPyXL .Menggunakan panda:
sumber
Anda dapat memilih salah satu dari mereka http://www.python-excel.org/
Saya akan merekomendasikan pustaka python xlrd.
instal menggunakan
impor menggunakan
untuk membuka buku kerja
buka lembar dengan nama
buka lembar demi indeks
membaca nilai sel
sumber
Saya pikir Panda adalah cara terbaik untuk pergi. Sudah ada satu jawaban di sini dengan Pandas menggunakan
ExcelFile
fungsi, tapi tidak bekerja dengan baik untuk saya. Dari sini saya menemukanread_excel
fungsi yang berfungsi dengan baik:PS Anda harus
xlrd
menginstal agarread_excel
fungsi dapat bekerjaPembaruan 21-03-2020: Seperti yang Anda lihat di sini , ada masalah dengan
xlrd
mesin dan itu akan ditinggalkan. Theopenpyxl
adalah pengganti terbaik. Jadi seperti yang dijelaskan di sini , sintaks kanonik harus:sumber
Untuk xlsx saya suka solusi yang diposting sebelumnya sebagai https://web.archive.org/web/20180216070531//programming/4371163/reading-xlsx-files-using-python . Saya menggunakan modul dari perpustakaan standar saja.
Perbaikan yang ditambahkan adalah mengambil konten dengan nama sheet, menggunakan re untuk mendapatkan kolom dan memeriksa apakah string bersama digunakan.
sumber
Anda dapat menggunakan salah satu pustaka yang tercantum di sini (seperti Pyxlreader yang didasarkan pada JExcelApi, atau xlwt ), ditambah otomatisasi COM untuk menggunakan Excel itu sendiri untuk membaca file, tetapi untuk itu Anda memperkenalkan Office sebagai ketergantungan perangkat lunak Anda, yang mungkin tidak selalu menjadi pilihan.
sumber
xlwt
file WriTes; gunakanxlrd
untuk ReaD file.Jika Anda membutuhkan format XLS lama. Di bawah kode untuk ansii 'cp1251'.
sumber
Python Excelerator menangani tugas ini juga. http://ghantoos.org/2007/10/25/python-pyexcelerator-small-howto/
Ini juga tersedia di Debian dan Ubuntu:
sumber
Anda mungkin juga mempertimbangkan untuk menjalankan program (non-python) xls2csv. Beri makan file xls, dan Anda harus mendapatkan kembali csv.
sumber
xls2csv
, lalu menguraicsv
dari Python?Untuk file Excel yang lebih lama ada modul OleFileIO_PL yang dapat membaca format penyimpanan terstruktur OLE yang digunakan.
sumber
Anda dapat mengubah CSV menjadi unggul seperti di atas dengan paket bawaan. CSV dapat ditangani dengan paket built-in dari dictreader dan dictwriter yang akan bekerja dengan cara yang sama seperti kamus python. yang membuatnya sangat mudah Saat ini saya tidak mengetahui adanya paket inbuilt untuk excel tetapi saya telah menemukan openpyxl. Itu juga cukup lurus ke depan dan sederhana Anda dapat melihat potongan kode di bawah ini berharap ini membantu
sumber