python openpyxl 操作excel表格并插入到mysql中

最近公司扔给了我一堆Excel 数据 让我按照规定要求进行数据整理,并写入到我们的数据库中,起初我没在意,但是当我打开文件夹看到一大堆表格时,顿时都蒙了。这,,,,,也太多了吧!!!
粗略看了一下,这得整一个月都不止吧,然后就开始了我的码表格之路,忙忙碌碌一整天也就整了几千条数据插入到我们的数据库,这效率不行啊,我不能一个月都只干这个啊,然后就想到了万能的python,哈哈 经过一天的写程序,终于也是写出了一个程序来自动的读取写入数据,
ok,废话不多说,欢乐时光就要开始了
在这里插入图片描述
先来看一下我的表格数据
在这里插入图片描述
这里就截取一点点,
然后我要的格式:
在这里插入图片描述
前五个数据如果为空就将上面的数据放到下面,后面多的就方到箭头指向的位置。
然后来看我的python程序:
先是一些基础的读写操作 ,这里是导入的openpyxl 的这个依赖吧
在这里插入图片描述
输入要导入的名称 添加点击ok就算导入成功了
简单的读取添加操作这里不详讲吧
简单的操作流程请看这个

import openpyxl

# # row column cell 行列单元格
wb = openpyxl.load_workbook('unuse.xlsx')
# # 获取表单名字 sheet
# print(wb.sheetnames)
# # 循环便利表单sheet 数据
# for sheet in wb:
#     print(sheet.title)
# # 新建一个表单 但是表中不显示新创建的表单sheet
# mysheet = wb.create_sheet('wodiua')
# print(wb.sheetnames)
# # #拿到想要操作的表单
# sheet2 = wb.get_sheet_by_name('20200404')
# # #等同于
# sheet2 = wb['20200404']
#
#
# # 活跃的表单默认为第一张
# ws = wb.active
# # 拿到当前活跃的表单
# print(ws)
# print(ws['B1'].value)
#
# c = ws['B1']
# # 行列值
# print('Row {},Column {} is {}'.format(c.row, c.column, c.value))
# if ws['D2'].value is None:
#     print("我是空的啊")
# else:
#     print("你输入错误了")
#
# print(ws['D2'].value)

############################write
# 产生一个新的工作簿
# wb = openpyxl.Workbook()
# sheet = wb.active
# 改变表单sheet 的名字
# print(sheet.title)
# sheet.title = 'Happy2020'
# print(wb.sheetnames)

# 读取一个文件 写入到另一个文件中且上一个文件的数据保存
#
# wb = openpyxl.load_workbook('news.xlsx')
# sheet2 = wb['20200404']
# sheet2['D2'].value = '12345678910'
# print(sheet2['D2'].value)
# wb.save('wodiudiu.xlsx')
#
# print('Openning workbook')
# wb = openpyxl.load_workbook('news.xlsx')
# sheet2 = wb['20200404']
# 拿到每一列的数据

# for row in range(1, sheet2.max_row + 1):
#     # 具体某一行列的数据
#     state = sheet2['B' + str(row)].value
#
#     if sheet2['B' + str(row)].value is None: sheet2['B' + str(row)].value = sheet2['B' + str(row-1)].value
#
#     state = sheet2['B' + str(row)].value
#     print(state)
# print(sheet2.max_column)

# for row in sheet2.iter_rows(min_row=1,max_row=sheet2.max_row,max_col=sheet2.max_column):
#     for cell in row:
#         print(cell.value)

# sheet2.insert_rows(2)
# wb.save('wodiudiu.xlsx')

# sheet2.delete_cols(3, 6)

# wb.save("wos.xlsx")

这个你可以自己放到自己的项目中就可以了 这里的打开工作簿的路径就是放到你程序的路径下,不然无法读取到,并且如果当一个已经存在的xlsx格式的文件 我打开显示的是错误,这里建议你新建一个新的xlsx文件放入你想要的数据就可以读取了,然后将处理好的数据你可以使用代码新建一个文件放到里面,还有当你进行写入操作时,确定你的文件没有在另一个程序中打开,不然运行也报错。
然后就是主要的实现程序代码:

import openpyxl

wb = openpyxl.load_workbook('news.xlsx')


# step 1 init ABCD numbers
def func_test(letter, sheet)://实现的主要方法体
    a = 0
    for row in range(1, sheet.max_row + 1)://循环遍历当前表单中的所有数据 从第二行开始到表单总行数
        if sheet['A' + str(row)].value == 711: sheet['A' + str(row)].value = 'HGM7110'//判断数据A列是否有711这个值进行替换成另外数据
        
        if sheet['A' + str(row)].value is None: sheet['A' + str(row)].value = sheet['A' + str(row - 1)].value//判断当前A具体列是否有数据,如果没有就将上一个A列数据放到当前列

        if sheet['B' + str(row)].value is None: sheet['B' + str(row)].value = sheet['B' + str(row - 1)].value

        if sheet['C' + str(row)].value is None: sheet['C' + str(row)].value = sheet['C' + str(row - 1)].value

        if sheet['D' + str(row)].value is None: sheet['D' + str(row)].value = sheet['D' + str(row - 1)].value//同上

        # step two importtant foreach F-N numbers insert next row
        if sheet[letter + str(row)].value is None:
            print('写入中,,,,')
        else:
           //指定列有值 a+1  
            a += 1

    else:
        print('数据已初始化完成')
        print(a)
        //for循环结束
        //循环当前表单数据行数加上a 就是加上要插入的个数 获得最后总行数
        for narrows in range(2, sheet.max_row + 1 + a):
            if sheet[letter + str(narrows)].value is None:
                print('值写入中,,,,')
            else:
            //指定行数有值的话新增一行数据 将上一行的ABCD写入,E的值为指定行的值
                sheet.insert_rows(narrows + 1)
                sheet['A' + str(narrows + 1)].value = str(sheet['A' + str(narrows)].value)
                sheet['B' + str(narrows + 1)].value = str(sheet['B' + str(narrows)].value)
                sheet['C' + str(narrows + 1)].value = str(sheet['C' + str(narrows)].value)
                sheet['D' + str(narrows + 1)].value = str(sheet['D' + str(narrows)].value)
                sheet['E' + str(narrows + 1)].value = str(sheet[letter + str(narrows)].value)

    return sheet.max_row


for sheet in wb://循环遍历文件的表单数据,将表单中的值进行读取写入
    func_test('F', sheet)
    func_test('G', sheet)
    func_test('H', sheet)
    func_test('I', sheet)
    func_test('J', sheet)
    func_test('K', sheet)
    func_test('L', sheet)
    func_test('M', sheet)
    func_test('N', sheet)
else:
    print('已全部加载完成!')

wb.save('wodiudiu.xlsx')  //写入另一个文件

ok,详细的注释已经加到代码中,
来看一下运行效果:
在这里插入图片描述
我的数据量过大 所以消耗的时间有点长
运行完成效果:
在这里插入图片描述
表格数据(原数据和程序改过的数据对比):
在这里插入图片描述
在这里插入图片描述
ok ,数据操作就完成了,然后插入到我们的数据库中
新建一个xls的文件,将想要的数据复制到里面
在这里插入图片描述
点击文件或者文件右边的小箭头 点击文件 另存为
在这里插入图片描述
存为csv格式 文件名可以建议换一个 不然会覆盖当前文件,点击报存就会多一个csv的文件
然后右击选择打开方式,选择记事本打开
在这里插入图片描述
选择另存为:
在这里插入图片描述
该为UTF_8的格式,这里的数据库我使用的DBEAVER
选择你要导入的数据库名称右击,导入数据,选择csv格式然后点击下一步选择你的csv文件 然后点击下一步 然后格式选择 点击完成 就导入成功了
ok这就完成了

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安东尼肉店

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值