当前位置:编程学堂 > 用python处理excel表格

用python处理excel表格

  • 发布:2023-10-07 11:47

-->

xlrd

安装xlrd

pip 安装 xlrd

excel结构分析

​ Excel 电子表格包含多个工作表

​ 一张表包含多行多列

​ 每个单元格都有唯一的行号和列号

常用功能

导入xlrd #读取文件
work_book = www.sychzs.cn_workbook("/Users/jerry/Desktop/公司机密数据.xlsx")
# 选择一个表 # 获取所有表名
打印(工作簿.sheet_names()) # 选择从0
开始的第二个索引 工作表 = work_book.sheet_by_index(1) #表名
print(工作表.名称) # 行数
打印(sheet.nrows)
#列数
打印(sheet.ncols) #批量读取行数据
# 取出第6行的全部内容,包括数据类型
打印(表.行(6))
# 取出第6行内容,从第3列开始获取数据类型
打印(sheet.row_slice(6,start_colx = 3)) # 取出第6行内容,从第3列开始获取数据类型
打印(sheet.row_slice(6,start_colx = 4,end_colx = 5)) # 获取该行的所有数据类型。数字代表
# print(sheet.row_types(6))
# 打印(sheet.row_values(6)) #细胞处理
print(sheet.cell(0,0).value) # 获取值
print(sheet.cell(0,0).ctype) # 获取类型
print(sheet.cell_value(2,0)) # 直接获取值 print(sheet.row(0)[0]) # 先获取行,然后获取单元格
print(sheet.col(0)) # 第 0 列中的所有数据
print(sheet.col(0)) # 先获取列,然后获取单元格 打印(sheet.cell_type(0,0)) # 单元格位置转换
print(xlrd.cellname(2,1))
打印(xlrd.cellnameabs(0,2))
打印(xlrd.colname(5)) # 时间类型转换
# print(sheet.cell(6,5).value)
# print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))

案例:

阅读第二个工作表包含合并单元格的引文

文件地址:https://www.sychzs.cn/5GaLY2m

导入xlrd
sheet = www.sychzs.cn_workbook("报价单.xlsx").sheet_by_index(1)
def get_text(行,列):
# 判断坐标是否为合并单元格。合并单元格的数据都在合并区域的第一个位置
对于sheet.merged_cells中的ces:
if (row >= ces[0] and row < ces[1]) and (col >= ces[2] and col < ces[3]):
returnsheet.cell(ces[0],ces[2]).value # 取出合并区域的第一个数据
returnsheet.cell(row,col).value #正常检索对应数据 keys = Sheet.row_values(1) # 获取所有列标题
数据 = []
对于范围(2,sheet.nrows)中的行:
迪克 = {}
对于范围内的列(sheet.ncols):
k = 键[col] #确定键
res = get_text(行,列)
dic[k] = res # 确定值并存储
data.append(dic)
打印(数据)
# 序列化为json
导入json
json.dump(data,open("test.json","wt"),ensure_ascii=False)

xlwt 模块

​是python中的第三方模块,用于将excel数据写入表格

​ 用代码写excel效率非常低,所以理解这个模块就可以了。

导入xlwt
#创建工作簿
工作 = xlwt.Workbook()
#创建一个表
sheet = work.add_sheet("员工信息数据") #创建字体对象
字体 = xlwt.Font()
www.sychzs.cn = "Times New Roman" # 字体名称
font.bold = True # 粗体
font.italic = True # 斜体
font.underline = True # 下划线 #创建样式对象
样式 = xlwt.XFStyle()
样式.字体=字体 #写标题
对于键中的 k:
sheet.write(0,keys.index(k),k,style)
# 写入数据
for i in infos:
  for k in keys:
    sheet.write(1 + infos . index(i),keys.index(k),label = i[k])
# 保存到文件
www.sychzs.cn("test.xls") #重要:xlwt写入excel,单元格对写入的字符串长度超过32767的字符有长度限制
解决办法是使用openpyxl模块替换(默认支持.xlsx格式)

面试问题:

#读取文件
work_book = www.sychzs.cn_workbook("/xxx/xxx.xlsx")
# 选择桌子
工作表 = work_book.sheet_by_index(0) # 遍历表数据
数据 = []
对于范围(1,sheet.nrows)中的行:
temp_list =[]
对于范围内的列(sheet.ncols):
值=sheet.cell_value(行,列)
temp_list.append(值)
datas.append(temp_list) #打开数据库连接
db = pymysql.connect(主机='localhost',端口=3306,
user='用户名', passwd='密码', db='数据库名', charset='utf8') # 使用cursor()方法获取操作光标
光标 = db.cursor() #SQL插入语句
sql = "INSERT INTO SHOP(商店代码, 商店名称, 月份) 值 (%s,%s,%s)"
尝试一下:
#执行sql语句
游标.executemany(sql, 数据)
# 提交到数据库执行
db.commit()
除了:
# 如果发生错误则回滚
db.rollback()
#关闭光标
光标.close()
#关闭数据库连接
db.close()


-->

相关文章