经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
如何利用Python批量处理行、列和单元格详解
来源:jb51  时间:2021/9/6 13:21:18  对本文有异议

精确调整工作表的行高和列宽

步骤

  1. 打开工作簿。
  2. 遍历所有工作表

核心代码

  1. for i in workbook.sheets:
  2. value = i.range('A1').expand('table')
  3. value.column_width = 12
  4. value.row_height = 20
  5. workbook.save()

批量更改多个工作簿的数据格式

步骤:

  1. 列出文件夹中所有子文件
  2. 遍历打开子文件
  3. 遍历工作表
  4. 获取工作表的最后一行
  5. 将指定列从上到下修改

核心代码

  1. #遍历工作表
  2. for j in workbook.sheets:
  3. # 获取最后一行
  4. row_num = j['A1'].current_region.last_cell.row
  5. # 数据格式修改
  6. j['A2:A{}'.format(row_num)].number_format = 'm/d'
  7. j['D2:D{}'.format(row_num)].number_format = '¥#,##0.00'
  8. workbook.save()
  9. workbook.close()

使用xwings模块中的number format属性来设置单元格区域中数据的格式。该属性的取值为一个代表特定格式的字符串,与Excel的“设置单元格格式”

对话框中“数字”选项卡下设置的格式对应。

批量更改工作簿的外观格式

难点应该是外观格式如何更改了吧,这里介绍一些常用的外观格式。

j 是工作表

设置字体格式

修改字体为宋体

  1. j['A1:H1'].api.Font.Name = '宋体'

修改字号

  1. j['A1:H1'].api.Font.Size= 10 # 10磅

字体加粗

  1. j['A1:H1'].api.Font.Bold= True

字体颜色

  1. # 白色
  2. j['A1:H1'].api.Font.Color= xw.utils.rgb_to_int((255,255,255))

单元格填充颜色

  1. # 填充颜色为黑色
  2. j['A1:H1'].Color= xw.utils.rgb_to_int((0,0,0))

对齐方式

  1. # 水平对齐方式为 居中
  2. j['A1:H1'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter
  3.  
  4. # 垂直对齐方式为 居中
  5. j['A1:H1'].api.VerticalAlignment= xw.constants.VAlign.xlVAlignCenter

以上是一列的如果是正文,j['A1:H1']变成 j['A2'].expand('table') 就可以了

添加合适粗细的边框

  1. # 遍历所有的单元格
  2. for cell in j['A1'].expand('table'):
  3. for b in range(7,12):
  4. # 设置单元格的边框线型
  5. cell.api.Borders(b).LineStyle = 1
  6. # 设置单元格的边框粗细
  7. cell.api.Borders(b).Weight = 2

替换工作簿的行数据

核心代码

  1. # 遍历工作表
  2. for j in eorkbook.sheets:
  3. # 获取工作表数据
  4. value = j['A2'].expand('table').value
  5. #按行遍历工作表数据
  6. for index,val in enumerate(value):
  7. # 判断行数据是否是这个
  8. if val == ['背包',16,65]:
  9. # 是的话替换为新数据
  10. value[index] = ['双肩包',36,79]
  11. #将完成替换的数据写入工作表中
  12. j['A2'].expand('table').value = value
  13. workbook.save()

enumerate()是Python的内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,可同时得到数据对象的索引及对应的值,一般用在for语句当中。该函数的语法格式和常用参数含义如下。

  1. enumerate(sequenxe,[start=0])
  2. # start 是索引的起始位置

如果是修改指定行什么办呢?因为列是在行的第几个单元格中我们可以按如下代码进行修改

  1. #按行遍历工作表数据
  2. for index,val in enumerate(value):
  3. # 修改第三个单元格,即第index行,第 3列,下标是从0开始的
  4. val[2] = val[2] + 1
  5. # 替换整行数据
  6. value[index] = val

提取指定数据

  1. import xlwings as xw
  2. import pandas as pd
  3. app = xw.App(visible = False, add_book = False)
  4. workbook = app.books.open('采购表.xlsx')
  5. worksheet = workbook.sheets
  6. data = []
  7. for i in worksheet:
  8. values = i.range('A1').expand().options(pd.DataFrame).value
  9. # 一次性提取工作表中所有符合条件的行数据
  10. filtered = values[values['采购物品'] == '复印纸']
  11. if not filtered.empty:
  12. data.append(filtered)
  13. new_workbook = xw.books.add()
  14. new_worksheet = new_workbook.sheets.add('复印纸')
  15. new_worksheet.range('A1').value = pd.concat(data, ignore_index = False)
  16. new_workbook.save('复印纸.xlsx')
  17. workbook.close()
  18. app.quit()

提取列数据

  1. import xlwings as xw
  2. import pandas as pd
  3. app = xw.App(visible = False, add_book = False)
  4. workbook = app.books.open('采购表.xlsx')
  5. worksheet = workbook.sheets
  6. column = ['采购日期', '采购金额']
  7. data = []
  8. for i in worksheet:
  9. values = i.range('A1').expand().options(pd.DataFrame, index = False).value
  10. filtered = values[column]
  11. data.append(filtered)
  12. new_workbook = xw.books.add()
  13. new_worksheet = new_workbook.sheets.add('提取数据')
  14. new_worksheet.range('A1').value = pd.concat(data, ignore_index = False).set_index(column[0])
  15. new_workbook.save('提取表.xlsx')
  16. workbook.close()
  17. app.quit()
  18.  

追加行数据

  1. import os
  2. import xlwings as xw
  3. newContent = [['双肩包', '64', '110'], ['腰包', '23', '58']]
  4. app = xw.apps.add()
  5. file_path = '分部信息'
  6. file_list = os.listdir(file_path)
  7. for i in file_list:
  8. if os.path.splitext(i)[1] == '.xlsx':
  9. workbook = app.books.open(file_path + '\\' + i)
  10. worksheet = workbook.sheets['产品分类表']
  11. values = worksheet.range('A1').expand()
  12. number = values.shape[0]
  13. worksheet.range(number + 1, 1).value = newContent
  14. workbook.save()
  15. workbook.close()
  16. app.quit()
  17.  

提取所有工作表的唯一值

  1. import xlwings as xw
  2. app = xw.App(visible = True, add_book = False)
  3. workbook = app.books.open('上半年销售统计表.xlsx')
  4. data = []
  5. for i, worksheet in enumerate(workbook.sheets):
  6. values = worksheet['A2'].expand('down').value
  7. data = data + values
  8. data = list(set(data))
  9. data.insert(0, '书名')
  10. new_workbook = xw.books.add()
  11. new_worksheet = new_workbook.sheets.add('书名')
  12. new_worksheet['A1'].options(transpose = True).value = data
  13. new_worksheet.autofit()
  14. new_workbook.save('书名.xlsx')
  15. workbook.close()
  16. app.quit()

总结

到此这篇关于如何利用Python批量处理行、列和单元格的文章就介绍到这了,更多相关Python批量处理行、列和单元格内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号