赵灵越 2023-10-03 11:01 采纳率: 99.3%
浏览 5
已结题

python操作Excel表格单元格,输入3,2,怎么就能够知道我要在第3行第2列输入文字?还有横着竖写每个单元格?

# 原提问:

input输入表头
(input内除了/,空格 回车 标点符号等
全部作为单元格分隔符)

由我设置input输入的是行or列
给选项
1. 行
2. 列

默认回车或没输入值是列

由我设置起始位置行列
例如 3,2 表示32列

当我输入3,2
就表示在第3行第2列excel的单元格输入数据

保存/storage/emulated/0/代码文件/
没有就创建

文件名命名方法:编号. 库  时间戳
# 最终流程呈现:

python/表格操作行列1.1.py" && exit       < 请选择输入方式:
1.2. 列
(默认为 2):
请输入表格起始位置(格式为:行,列,如1,3, 不输入则默认为 1,1):4,2
请输入表头数据:3 9 8 5
表头数据是否要将除了/,之外的标点符号作为单元格分隔符
(默认是)
1.2. 是
input然后接下来输入下一条数据
(如果输入方式为行,则横着输入行
否则为列,纵向)
输出文件保存在:
没有就创建
(默认保存在:)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-03 12:07
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7705953
    • 这篇博客你也可以参考下:Python新建Excel之后,表格打开报格式错误
    • 您还可以看一下 曾贤志老师的【曾贤志】用Python处理Excel数据 - 第3季 正则篇课程中的 2.19 贪婪与非贪婪(惰性)小节, 巩固相关知识点
    • 除此之外, 这篇博客: python提取excel表格数据中的 3、结合1和2的问题解决,弄个自动化识别开始数据的行并且提取数据。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      1、获取开始提取数据的行数
      2、自动化提取数据

      import xlrd
      
      
      def get_excel(file_path,row_start_num):
          apply_dic = []
          with xlrd.open_workbook(file_path) as workbook :
              name_sheets = workbook.sheet_names() #获取Excel的sheet表列表,存储是sheet表名
              for index in name_sheets: #for 循环读取每一个sheet表的内容
                  sheet_info = workbook.sheet_by_name(index) #根据表名获取表中的所有内容,sheet_info也是列表,列表中的值是每个单元格里值
                  first_line = sheet_info.row_values(row_start_num) #获取第三行,我这里的第三行是表头,我打算用表头作为字典的key,每一行数据对应表头的value,每一行组成一个字典
                  values_merge_cell = merge_cell(sheet_info) #这里是调用处理合并单元格的函数
                  # print("values_merge_cell",values_merge_cell)
                  for i in range(row_start_num+1, sheet_info.nrows): #开始为组成字典准备数据(跳过前三行)
                      other_line = sheet_info.row_values(i)
                      # print("other_line", i, other_line)
                      for key in values_merge_cell.keys():
                          # 将合并的单元格,空字符串进行一个填充
                          if key[0] == i:
                              other_line[key[1]] = values_merge_cell[key]
                      dic = list_dic(first_line,other_line)  #调用组合字典的函数,传入key和value,字典生成
                      apply_dic.append(dic)
                  return apply_dic
      
      
      def list_dic(list1,list2):
          '''
          合并俩个list为json
          '''
          dic = dict(map(lambda x,y:[x,y], list1,list2))
          return dic
      
      
      def merge_cell(sheet_info):
          '''
          这个地方就是读取所有的合并表格的值,以及可以拆分表格之后的坐标。
          返回的是将合并表格拆分之后的,所有单元格的对应的合并的值填充的json。
          '''
          merge = {}
          merge_cells = sheet_info.merged_cells
          # print("merge_cells",merge_cells)
          for (rlow, rhigh, clow, chigh) in merge_cells:
              value_mg_cell = sheet_info.cell_value(rlow, clow)
              # print("value_mg_cell",value_mg_cell,(rlow, rhigh, clow, chigh))
              if rhigh-rlow == 1:
                  # 横向单元格
                  for n in range(chigh-clow-1):
                      merge[(rlow, clow+n+1)] = value_mg_cell
              elif chigh-clow == 1:
                  # 垂直合并单元格
                  for n in range(rhigh-rlow-1):
                      merge[(rlow+n+1, clow)] = value_mg_cell
              else:
                  # 处理 横向 + 垂直单元格
                  c_cha = chigh - clow
                  r_cha = rhigh - rlow
                  for i in range(c_cha):
                      for j in range(r_cha):
                          # print("rlow",rlow,clow,i,j,value_mg_cell)
                          merge[rlow+j,clow+i] = value_mg_cell
                  # print("需要单独处理",(rlow, rhigh, clow, chigh))
          # print("merge",merge)
          return merge
      
      
      
      def get_start_row_num(file_path):
          """获取真正数据开始的行"""
          data = xlrd.open_workbook(file_path)
          sheets = data.sheets()
          for table in sheets:
              # print("dir table",dir(table))
              nrows = table.nrows
              ncols = table.ncols
              for nrows_i in range(nrows):
                  row_values = table.row_values(nrows_i)
                  # print("row_values",row_values)
                  set_row_values = set(row_values)
                  if len(set_row_values) == ncols:
                      return nrows_i
      
      
      
      if __name__ == '__main__':
          file_path = '2W020200804533376201881.xlsx'
          row_start_num = get_start_row_num(file_path)
          apply_dic = get_excel(file_path,row_start_num)
          print("apply_dic",apply_dic)
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 修改了问题 10月3日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?