Bootstrap

python之xlrd、xlwd读写excel

Python需要读取Excel(.xls、.xlsx)时通常使用xlrd模块;如果要对其内容进行编辑的话稍稍有些麻烦,通常的做法是使用xlutils的copy模块对原文件进行复制,然后保存成新的文件。

前提摘要:1.安装好xlrd,cmd命令:pip install xlrd

                   2.引用xlrd模块 :import xlrd

1.使用xlrd模块读取Excel文件

Workbook = xlrd.open_workbook('excelFile.xls')

2.获取表单名

booknames=workbook.sheet_names()                   # 以列表的形式返回

3.打开表单

mySheet= Workbook.sheet_by_index(index)           #通过索引打开

mySheet=Workbook.sheet_by_name(bookname)    #通过表单名打开

4.或者表单行数和列数

    nrows = mySheet.nrows                          #获取总行数

    ncols = mySheet.ncols                            #获取总列数

5.获取一行和一列的数据

myRowValues = mySheet.row_values(i)          #i是行数,从0开始计数,返回list对象。 

myColValues =  mySheet.col_values(i)             #i是列数,从0开始计数,返回list对象。

6.读取单元格数据

myCell = mySheet.cell(i, j)                              #获取单元格,i是行数,j是列数,行数和列数都是从0开始计数。 

 myCellValue = myCell.value                        #通过单元格获取单元格数据。 

 myCellValue = mySheet.cell_value(i, j)        #直接获取单元格数据,i是行数,j是列数,行数和列数都是从0开始计数。

7.用xlrd写入数据

copy_workbook= copy(Workbook)         #简历写入的副本

wb=get_sheet(bookindex)                     #打开写入的表单

wb.write(row,col,value)                         #在单元格里写入对应的值

copy_workbook.save(self.filepath)       #保存文件

当然这种方法少量数据简单,数据多的话就要用xlwt了。

 

假如xlsx较复杂,夹杂着各种格式、规则、宏,可能就会遇到问题---普通读取会丢掉所有这些附带的信息。其实xlrd早就已经适配了这个功能,它提供的formatting_info参数取值为True时(为了节省内存,该参数默认为False),就会读取各种格式的信息。

 xlrd.open_workbook('A.xls',formatting_info=True)

但是我们会发现在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常,而读取xls类型的文件时不存在此问题。

raise NotImplementedError("formatting_info=True not yet implemented")

formatting_info=True时必须为xls类型,且必须为另存为,不可直接更改后缀,xlrd目前版本不支持xlsx。

classification = [
    {
        "id": "1",
        "name": "学生个人基础信息",
        "value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]},
    {
        "id": "2",
        "name": "学生个人辅助信息",
        "value": ["16", "17", "18"]},

    {
        "id": "3",
        "name": "学生学籍基本信息",
        "value": ["22", "23", "24", "25", "26", "27A"]},

    {"id": "4",
     "name": "学生个人联系信息",
     "value": ["28", "29", "30", "31", "32"]},
]
import xlrd,xlwt
import xlutils.copy
style = xlwt.XFStyle()
workbook = xlrd.open_workbook('A.xls',formatting_info=True)#添加formatting_info=True时必须为xls类型,且必须为另存为,不可直接更改后缀
wsr=workbook.sheet_by_name("Sheet1")
wb = xlutils.copy.copy(workbook)# 完成xlrd对象向xlwt对象转换
ws= wb.get_sheet(0)

for item in classification:
    for nmb in item['value']:
        for row in range(4, 53):
            for col in [0, 3]:
                try:
                    if str(int(wsr.cell(row,col).value)) == nmb:
                        ws.write(row,col+2,'中国',style)
                        # print(row,col)
                except:
                    if wsr.cell(row,col).value == nmb:
                        ws.write(row, col + 2, nmb)

wb.save('A2.xls')

# import shutil
# shutil.copyfile("A.xls", "005.xls")
# wb = xlrd.open_workbook('005.xlsx')

参考博客:

https://www.cnblogs.com/insane-Mr-Li/p/9092619.html

https://www.cnblogs.com/Detector/p/8709362.html

;