本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件。
【最近一些朋友反映个别代码无法调试(但是在我这里没问题),这里代码我都是调试过的,之前一年也没有朋友反馈过这些问题,所以大概率是版本问题。
我的版本如下: xlrd 1.1.0 、xlwt 1.3.0 、openpyxl 2.5.4 】
目录
1、使用xlrd模块对xls文件进行读操作
假设我们的表如下,是一个“农村居民家庭人均纯收入和农村居民家庭人均消费情况”的表格。后缀为.xls。里面包含两个工作表,“各省市”和“测试表”。
提一下,一个Excel文件,就相当于一个“工作簿”(workbook),一个“工作簿”里面可以包含多个“工作表(sheet)”

1.1 获取工作簿对象
引入模块,获得工作簿对象。
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      import xlrd  
      #引入模块
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #打开文件,获取excel文件的workbook(工作簿)对象
     
    
- 
    
     
    
    
     
      workbook=xlrd.open_workbook(
      "DataSource/Economics.xls")  
      #文件路径
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
1.2 获取工作表对象
我们知道一个工作簿里面可以含有多个工作表,当我们获取“工作簿对象”后,可以接着来获取工作表对象,可以通过“索引”的方式获得,也可以通过“表名”的方式获得。
  
   - 
    
     
    
    
     
      '''对workbook对象进行操作'''
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #获取所有sheet的名字
     
    
- 
    
     
    
    
     
      names=workbook.sheet_names()
     
    
- 
    
     
    
    
     
      print(names) 
      #['各省市', '测试表'] 输出所有的表名,以列表的形式
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #通过sheet索引获得sheet对象
     
    
- 
    
     
    
    
     
      worksheet=workbook.sheet_by_index(
      0)
     
    
- 
    
     
    
    
     
      print(worksheet)  
      #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #通过sheet名获得sheet对象
     
    
- 
    
     
    
    
     
      worksheet=workbook.sheet_by_name(
      "各省市")
     
    
- 
    
     
    
    
     
      print(worksheet) 
      #<xlrd.sheet.Sheet object at 0x000001B98D99CFD0>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #由上可知,workbook.sheet_names() 返回一个list对象,可以对这个list对象进行操作
     
    
- 
    
     
    
    
     
      sheet0_name=workbook.sheet_names()[
      0]  
      #通过sheet索引获取sheet名称
     
    
- 
    
     
    
    
     
      print(sheet0_name)  
      #各省市
     
    
- 
    
     
    
    
      
     
    
1.3 获取工作表的基本信息
在获得“表对象”之后,我们可以获取关于工作表的基本信息。包括表名、行数与列数。
  
   - 
    
     
    
    
     
      '''对sheet对象进行操作'''
     
    
- 
    
     
    
    
     
      name=worksheet.name  
      #获取表的姓名
     
    
- 
    
     
    
    
     
      print(name) 
      #各省市
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      nrows=worksheet.nrows  
      #获取该表总行数
     
    
- 
    
     
    
    
     
      print(nrows)  
      #32
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      ncols=worksheet.ncols  
      #获取该表总列数
     
    
- 
    
     
    
    
     
      print(ncols) 
      #13
     
    
1.4 按行或列方式获得工作表的数据
有了行数和列数,循环打印出表的全部内容也变得轻而易举。
  
   - 
    
     
    
    
     
      for i 
      in range(nrows): 
      #循环打印每一行
     
    
- 
    
     
    
    
     
          print(worksheet.row_values(i))  
      #以列表形式读出,列表中的每一项是str类型
     
    
- 
    
     
    
    
     
      #['各省市', '工资性收入', '家庭经营纯收入', '财产性收入', ………………]
     
    
- 
    
     
    
    
     
      #['北京市', '5047.4', '1957.1', '678.8', '592.2', '1879.0,…………]
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      col_data=worksheet.col_values(
      0)  
      #获取第一列的内容
     
    
- 
    
     
    
    
     
      print(col_data)
     
    
- 
    
     
    
    
      
     
    
1.5 获取某一个单元格的数据
我们还可以将查询精确地定位到某一个单元格。
在xlrd模块中,工作表的行和列都是从0开始计数的。
  
   - 
    
     
    
    
     
      #通过坐标读取表格中的数据
     
    
- 
    
     
    
    
     
      cell_value1=sheet0.cell_value(
      0,
      0)
     
    
- 
    
     
    
    
     
      cell_value2=sheet0.cell_value(
      1,
      0)
     
    
- 
    
     
    
    
     
      print(cell_value1)  
      #各省市
     
    
- 
    
     
    
    
     
      print(cell_value2)   
      #北京市
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      cell_value1=sheet0.cell(
      0,
      0).value
     
    
- 
    
     
    
    
     
      print(cell_value1) 
      #各省市
     
    
- 
    
     
    
    
     
      cell_value1=sheet0.row(
      0)[
      0].value
     
    
- 
    
     
    
    
     
      print(cell_value1)  
      #各省市
     
    
2、使用xlwt模块对xls文件进行写操作
2.1 创建工作簿
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 导入xlwt模块
     
    
- 
    
     
    
    
     
      import xlwt
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #创建一个Workbook对象,相当于创建了一个Excel文件
     
    
- 
    
     
    
    
     
      book=xlwt.Workbook(encoding=
      "utf-8",style_compression=
      0)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      Workbook类初始化时有encoding和style_compression参数
     
    
- 
    
     
    
    
     
      encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。
     
    
- 
    
     
    
    
     
      style_compression:表示是否压缩,不常用。
     
    
- 
    
     
    
    
     
      '''
     
    
2.2 创建工作表
创建完工作簿之后,可以在相应的工作簿中,创建工作表。
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
     
    
- 
    
     
    
    
     
      sheet = book.add_sheet(
      'test01', cell_overwrite_ok=
      True)
     
    
- 
    
     
    
    
     
      # 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
     
    
2.3 按单元格的方式向工作表中添加数据
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 向表test中添加数据
     
    
- 
    
     
    
    
     
      sheet.write(
      0, 
      0, 
      '各省市')  
      # 其中的'0-行, 0-列'指定表中的单元,'各省市'是向该单元写入的内容
     
    
- 
    
     
    
    
     
      sheet.write(
      0, 
      1, 
      '工资性收入')
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #也可以这样添加数据
     
    
- 
    
     
    
    
     
      txt1 = 
      '北京市'
     
    
- 
    
     
    
    
     
      sheet.write(
      1,
      0, txt1)  
     
    
- 
    
     
    
    
     
      txt2 = 
      5047.4
     
    
- 
    
     
    
    
     
      sheet.write(
      1, 
      1, txt2)
     
    
最后被文件被保存之后,上文语句形成的“工作表”如下所示:

2.4 按行或列方式向工作表中添加数据
为了验证这个功能,我们在工作簿中,再创建一个工作表,上个工作表叫“test01”,那么这个工作表命名为“test02”,都隶属于同一个工作簿。在下面代码中test02是表名,sheet2才是可供操作的工作表对象。
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #添加第二个表
     
    
- 
    
     
    
    
     
      sheet2=book.add_sheet(
      "test02",cell_overwrite_ok=
      True)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      Province=[
      '北京市', 
      '天津市', 
      '河北省', 
      '山西省', 
      '内蒙古自治区', 
      '辽宁省',
     
    
- 
    
     
    
    
               
      '吉林省', 
      '黑龙江省', 
      '上海市', 
      '江苏省', 
      '浙江省', 
      '安徽省', 
      '福建省',
     
    
- 
    
     
    
    
               
      '江西省', 
      '山东省', 
      '河南省', 
      '湖北省', 
      '湖南省', 
      '广东省', 
      '广西壮族自治区',
     
    
- 
    
     
    
    
               
      '海南省', 
      '重庆市', 
      '四川省', 
      '贵州省', 
      '云南省', 
      '西藏自治区', 
      '陕西省', 
      '甘肃省',
     
    
- 
    
     
    
    
               
      '青海省', 
      '宁夏回族自治区', 
      '新疆维吾尔自治区']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      Income=[
      '5047.4', 
      '3247.9', 
      '1514.7', 
      '1374.3', 
      '590.7', 
      '1499.5', 
      '605.1', 
      '654.9',
     
    
- 
    
     
    
    
             
      '6686.0', 
      '3104.8', 
      '3575.1', 
      '1184.1', 
      '1855.5', 
      '1441.3', 
      '1671.5', 
      '1022.7',
     
    
- 
    
     
    
    
             
      '1199.2', 
      '1449.6', 
      '2906.2', 
      '972.3', 
      '555.7', 
      '1309.9', 
      '1219.5', 
      '715.5', 
      '441.8',
     
    
- 
    
     
    
    
             
      '568.4', 
      '848.3', 
      '637.4', 
      '653.3', 
      '823.1', 
      '254.1']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      Project=[
      '各省市', 
      '工资性收入', 
      '家庭经营纯收入', 
      '财产性收入', 
      '转移性收入', 
      '食品', 
      '衣着',
     
    
- 
    
     
    
    
              
      '居住', 
      '家庭设备及服务', 
      '交通和通讯', 
      '文教、娱乐用品及服务', 
      '医疗保健', 
      '其他商品及服务']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #填入第一列
     
    
- 
    
     
    
    
     
      for i 
      in range(
      0, len(Province)):
     
    
- 
    
     
    
    
     
          sheet2.write(i+
      1, 
      0, Province[i])
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #填入第二列
     
    
- 
    
     
    
    
     
      for i 
      in range(
      0,len(Income)):
     
    
- 
    
     
    
    
     
          sheet2.write(i+
      1,
      1,Income[i])
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #填入第一行
     
    
- 
    
     
    
    
     
      for i 
      in range(
      0,len(Project)):
     
    
- 
    
     
    
    
     
          sheet2.write(
      0,i,Project[i])
     
    
2.5 保存创建的文件
最后保存在特定路径即可。
  
   - 
    
     
    
    
     
      # 最后,将以上操作保存到指定的Excel文件中
     
    
- 
    
     
    
    
     
      book.save(
      'DataSource\\test1.xls')  
     
    
执行出来的工作表test02如下所示:

3、使用openpyxl模块对xlsx文件进行读操作
上面两个模块,xlrd和xlwt都是针对Excel97-2003操作的,也就是以xls结尾的文件。很显然现在基本上都是Excel2007以上的版本,以xlsx为后缀。要对这种类型的Excel文件进行操作要使用openpyxl,该模块既可以进行“读”操作,也可以进行“写”操作,还可以对已经存在的文件做修改。
3.1 获取工作簿对象
  
   - 
    
     
    
    
     
      import openpyxl
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #获取 工作簿对象
     
    
- 
    
     
    
    
     
      workbook=openpyxl.load_workbook(
      "DataSource\Economics.xlsx")
     
    
- 
    
     
    
    
     
      #与xlrd 模块的区别
     
    
- 
    
     
    
    
     
      #wokrbook=xlrd.open_workbook(""DataSource\Economics.xls)
     
    
3.2 获取所有工作表名
  
   - 
    
     
    
    
     
      #获取工作簿 workbook的所有工作表
     
    
- 
    
     
    
    
     
      shenames=workbook.get_sheet_names()
     
    
- 
    
     
    
    
     
      print(shenames)  
      #['各省市', '测试表']
     
    
- 
    
     
    
    
     
      #在xlrd模块中为 sheetnames=workbook.sheet_names()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #使用上述语句会发出警告:DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
     
    
- 
    
     
    
    
     
      #说明 get_sheet_names已经被弃用 可以改用 wb.sheetnames 方法
     
    
- 
    
     
    
    
     
      shenames=workbook.sheetnames
     
    
- 
    
     
    
    
     
      print(shenames)  
      #['各省市', '测试表']
     
    
3.3 获取工作表对象
上一小节获取的工作表名,可以被应用在这一节中,用来获取工作表对象。
  
   - 
    
     
    
    
     
      #获得工作簿的表名后,就可以获得表对象
     
    
- 
    
     
    
    
     
      worksheet=workbook.get_sheet_by_name(
      "各省市")
     
    
- 
    
     
    
    
     
      print(worksheet)  
      #<Worksheet "各省市">
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #使用上述语句同样弹出警告:DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
     
    
- 
    
     
    
    
     
      #改写成如下格式
     
    
- 
    
     
    
    
     
      worksheet=workbook[
      "各省市"]
     
    
- 
    
     
    
    
     
      print(worksheet)  
      #<Worksheet "各省市">
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #还可以通过如下写法获得表对象
     
    
- 
    
     
    
    
     
      worksheet1=workbook[shenames[
      1]]
     
    
- 
    
     
    
    
     
      print(worksheet1)  
      #<Worksheet "测试表">
     
    
3.4 根据索引方式获取工作表对象
上一小节获取工作表对象的方式,实际上是通过“表名”来获取,我们可以通过更方便的方式,即通过“索引”方式获取工作表对象。
  
   - 
    
     
    
    
     
      #还可以通过索引方式获取表对象
     
    
- 
    
     
    
    
     
      worksheet=workbook.worksheets[
      0]
     
    
- 
    
     
    
    
     
      print(worksheet) 
      #<Worksheet "各省市">
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #也可以用如下方式
     
    
- 
    
     
    
    
     
      #获取当前活跃的worksheet,默认就是第一个worksheet
     
    
- 
    
     
    
    
     
      ws = workbook.active
     
    
3.5 获取工作表的属性
得到工作表对象后,可以获取工作表的相应属性,包括“表名”、“行数”、“列数”
  
   - 
    
     
    
    
     
      #经过上述操作,我们已经获得了第一个“表”的“表对象“,接下来可以对表对象进行操作
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      name=worksheet.title  
      #获取表名
     
    
- 
    
     
    
    
     
      print(name)  
      #各省市
     
    
- 
    
     
    
    
     
      #在xlrd中为worksheet.name
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #获取该表相应的行数和列数
     
    
- 
    
     
    
    
     
      rows=worksheet.max_row
     
    
- 
    
     
    
    
     
      columns=worksheet.max_column
     
    
- 
    
     
    
    
     
      print(rows,columns)  
      #32 13
     
    
- 
    
     
    
    
     
      #在xlrd中为 worksheet.nrows worksheet.ncols
     
    
3.6 按行或列方式获取表中的数据
要想以行方式或者列方式,获取整个工作表的内容,我们需要使用到以下两个生成器:
sheet.rows,这是一个生成器,里面是每一行数据,每一行数据由一个元组类型包裹。
sheet.columns,同上,里面是每一列数据。
  
   - 
    
     
    
    
     
      for row 
      in worksheet.rows:
     
    
- 
    
     
    
    
         
      for cell 
      in row:
     
    
- 
    
     
    
    
     
              print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
- 
    
     
    
    
     
      """
     
    
- 
    
     
    
    
     
      各省市 工资性收入 家庭经营纯收入 财产性收入 转移性收入 食品 衣着 居住 家庭设备及服务 ……
     
    
- 
    
     
    
    
     
      北京市 5047.4 1957.1 678.8 592.2 1879.0 451.6 859.4 303.5 698.1 844.1 575.8 113.1 ……
     
    
- 
    
     
    
    
     
      天津市 3247.9 2707.4 126.4 146.3 1212.6 265.3 664.4 122.4 441.3 315.6 263.2 56.1 ……
     
    
- 
    
     
    
    
     
      ……
     
    
- 
    
     
    
    
     
      """
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      for col 
      in worksheet.columns:
     
    
- 
    
     
    
    
         
      for cell 
      in col:
     
    
- 
    
     
    
    
     
              print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      各省市 北京市 天津市 河北省 山西省 内蒙古自治区 辽宁省 吉林省 黑龙江省 上海市 江苏省 浙江省 ……
     
    
- 
    
     
    
    
     
      工资性收入 5047.4 3247.9 1514.7 1374.3 590.7 1499.5 605.1 654.9 6686.0 3104.8 3575.1 ……
     
    
- 
    
     
    
    
     
      家庭经营纯收入 1957.1 2707.4 2039.6 1622.9 2406.2 2210.8 2556.7 2521.5 767.7 2271.4 ……
     
    
- 
    
     
    
    
     
      ……
     
    
- 
    
     
    
    
     
      '''
     
    
我们可以通过查看sheet.rows 里面的具体格式,来更好的理解代码
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      for row 
      in worksheet.rows:
     
    
- 
    
     
    
    
     
          print(row)
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      (<Cell '各省市'.A1>, <Cell '各省市'.B1>, <Cell '各省市'.C1>, <Cell '各省市'.D1>, <Cell '各省市'.E1>,……
     
    
- 
    
     
    
    
     
      (<Cell '各省市'.A2>, <Cell '各省市'.B2>, <Cell '各省市'.C2>, <Cell '各省市'.D2>, <Cell '各省市'.E2>, ……
     
    
- 
    
     
    
    
     
      ……
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      #可知,需要二次迭代
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      for row 
      in worksheet.rows:
     
    
- 
    
     
    
    
         
      for cell 
      in row:
     
    
- 
    
     
    
    
     
              print(cell,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      <Cell '各省市'.A1> <Cell '各省市'.B1> <Cell '各省市'.C1> <Cell '各省市'.D1>……
     
    
- 
    
     
    
    
     
      <Cell '各省市'.A2> <Cell '各省市'.B2> <Cell '各省市'.C2> <Cell '各省市'.D2> ……
     
    
- 
    
     
    
    
     
      ……
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      #还需要cell.value
     
    
- 
    
     
    
    
     
      for row 
      in worksheet.rows:
     
    
- 
    
     
    
    
         
      for cell 
      in row:
     
    
- 
    
     
    
    
     
              print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
3.7 获取特定行或特定列的数据
上述方法可以迭代输出表的所有内容,但是如果要获取特定的行或列的内容呢?我们可以想到的是用“索引”的方式,但是sheet.rows是生成器类型,不能使用索引。所以我们将其转换为list之后再使用索引,例如用list(sheet.rows)[3]来获取第四行的tuple对象。
  
   - 
    
     
    
    
     
      #输出特定的行
     
    
- 
    
     
    
    
     
      for cell 
      in list(worksheet.rows)[
      3]:  
      #获取第四行的数据
     
    
- 
    
     
    
    
     
          print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
      print()
     
    
- 
    
     
    
    
     
      #河北省 1514.7 2039.6 107.7 139.8 915.5 167.9 531.7 115.8 285.7 265.4 166.3 47.0
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #输出特定的列
     
    
- 
    
     
    
    
     
      for cell 
      in list(worksheet.columns)[
      2]:  
      #获取第三列的数据
     
    
- 
    
     
    
    
     
          print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
      print()
     
    
- 
    
     
    
    
     
      #家庭经营纯收入 1957.1 2707.4 2039.6 1622.9 2406.2 2210.8 2556.7 2521.5 767.7 2271.4 3084.3……
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #已经转换成list类型,自然是从0开始计数。
     
    
3.8 获取某一块的数据
有时候我们并不需要一整行或一整列内容,那么可以通过如下方式获取其中一小块的内容。
注意两种方式的区别,在第一种方式中,由于生成器被转换成了列表的形式,所以索引是从0开始计数的。
而第二种方式,行和列都是从1开始计数,这是和xlrd模块中最大的不同,在xlrd中行和列都是从0计数的,openpyxl之所这么做是为了和Excel表统一,因为在Excel表,就是从1开始计数。
  
   - 
    
     
    
    
     
      for rows 
      in list(worksheet.rows)[
      0:
      3]:
     
    
- 
    
     
    
    
         
      for cell 
      in rows[
      0:
      3]:
     
    
- 
    
     
    
    
     
              print(cell.value,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      各省市 工资性收入 家庭经营纯收入 
     
    
- 
    
     
    
    
     
      北京市 5047.4 1957.1 
     
    
- 
    
     
    
    
     
      天津市 3247.9 2707.4 
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      for i 
      in range(
      1, 
      4):
     
    
- 
    
     
    
    
         
      for j 
      in range(
      1, 
      4):
     
    
- 
    
     
    
    
     
              print(worksheet.cell(row=i, column=j).value,end=
      " ")
     
    
- 
    
     
    
    
     
          print()
     
    
- 
    
     
    
    
     
      '''
     
    
- 
    
     
    
    
     
      各省市 工资性收入 家庭经营纯收入 
     
    
- 
    
     
    
    
     
      北京市 5047.4 1957.1 
     
    
- 
    
     
    
    
     
      天津市 3247.9 2707.4 
     
    
- 
    
     
    
    
     
      
     
    
- 
    
     
    
    
     
      '''
     
    
3.9 获取某一单元格的数据
有两种方式。
  
   - 
    
     
    
    
     
      #精确读取表格中的某一单元格
     
    
- 
    
     
    
    
     
      content_A1= worksheet[
      'A1'].value
     
    
- 
    
     
    
    
     
      print(content_A1)
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      content_A1=worksheet.cell(row=
      1,column=
      1).value
     
    
- 
    
     
    
    
     
      #等同于 content_A1=worksheet.cell(1,1).value
     
    
- 
    
     
    
    
     
      print(content_A1)
     
    
- 
    
     
    
    
     
      #此处的行数和列数都是从1开始计数的,而在xlrd中是由0开始计数的
     
    
4、使用openpyxl模块对xlsx文件进行写操作
4.1 创建工作簿和获取工作表
同样的workbook=openpyxl.Workbook() 中“W”要大写。
  
   - 
    
     
    
    
     
      import openpyxl
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      # 创建一个Workbook对象,相当于创建了一个Excel文件
     
    
- 
    
     
    
    
     
      workbook=openpyxl.Workbook()
     
    
- 
    
     
    
    
     
      #wb=openpyxl.Workbook(encoding='UTF-8')
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #获取当前活跃的worksheet,默认就是第一个worksheet
     
    
- 
    
     
    
    
     
      worksheet = workbook.active
     
    
- 
    
     
    
    
     
      worksheet.title=
      "mysheet"
     
    
4.2 创建新的工作表
  
   - 
    
     
    
    
     
      worksheet2 = workbook.create_sheet()   
      #默认插在工作簿末尾
     
    
- 
    
     
    
    
     
      #worksheet2 = workbook.create_sheet(0) #插入在工作簿的第一个位置
     
    
- 
    
     
    
    
     
      worksheet2.title = 
      "New Title"
     
    
4.3 将数据写入工作表
  
   - 
    
     
    
    
     
      #以下是我们要写入的数据
     
    
- 
    
     
    
    
     
      Province=[
      '北京市', 
      '天津市', 
      '河北省', 
      '山西省', 
      '内蒙古自治区', 
      '辽宁省',
     
    
- 
    
     
    
    
               
      '吉林省', 
      '黑龙江省', 
      '上海市', 
      '江苏省', 
      '浙江省', 
      '安徽省', 
      '福建省',
     
    
- 
    
     
    
    
               
      '江西省', 
      '山东省', 
      '河南省', 
      '湖北省', 
      '湖南省', 
      '广东省', 
      '广西壮族自治区',
     
    
- 
    
     
    
    
               
      '海南省', 
      '重庆市', 
      '四川省', 
      '贵州省', 
      '云南省', 
      '西藏自治区', 
      '陕西省', 
      '甘肃省',
     
    
- 
    
     
    
    
               
      '青海省', 
      '宁夏回族自治区', 
      '新疆维吾尔自治区']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      Income=[
      '5047.4', 
      '3247.9', 
      '1514.7', 
      '1374.3', 
      '590.7', 
      '1499.5', 
      '605.1', 
      '654.9',
     
    
- 
    
     
    
    
             
      '6686.0', 
      '3104.8', 
      '3575.1', 
      '1184.1', 
      '1855.5', 
      '1441.3', 
      '1671.5', 
      '1022.7',
     
    
- 
    
     
    
    
             
      '1199.2', 
      '1449.6', 
      '2906.2', 
      '972.3', 
      '555.7', 
      '1309.9', 
      '1219.5', 
      '715.5', 
      '441.8',
     
    
- 
    
     
    
    
             
      '568.4', 
      '848.3', 
      '637.4', 
      '653.3', 
      '823.1', 
      '254.1']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      Project=[
      '各省市', 
      '工资性收入', 
      '家庭经营纯收入', 
      '财产性收入', 
      '转移性收入', 
      '食品', 
      '衣着',
     
    
- 
    
     
    
    
              
      '居住', 
      '家庭设备及服务', 
      '交通和通讯', 
      '文教、娱乐用品及服务', 
      '医疗保健', 
      '其他商品及服务']
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #写入第一行数据,行号和列号都从1开始计数
     
    
- 
    
     
    
    
     
      for i 
      in range(len(Project)):
     
    
- 
    
     
    
    
     
          worksheet.cell(
      1, i+
      1,Project[i])
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #写入第一列数据,因为第一行已经有数据了,i+2
     
    
- 
    
     
    
    
     
      for i 
      in range(len(Province)):
     
    
- 
    
     
    
    
     
          worksheet.cell(i+
      2,
      1,Province[i])
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #写入第二列数据
     
    
- 
    
     
    
    
     
      for i 
      in range(len(Income)):
     
    
- 
    
     
    
    
     
          worksheet.cell(i+
      2,
      2,Income[i])
     
    
4.4 保存工作簿
workbook.save(filename='DataSource\\myfile.xlsx')最后运行结果如下所示:

5、修改已经存在的工作簿(表)
5.1 插入一列数据
将第四节中最后保存的myfile.xlsx作为我们要修改的表格,我们计划在最前面插入一列“编号”,如下所示:
  
   - 
    
     
    
    
     
      import openpyxl
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      workbook=openpyxl.load_workbook(
      "DataSource\myfile.xlsx")
     
    
- 
    
     
    
    
     
      worksheet=workbook.worksheets[
      0]
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #在第一列之前插入一列
     
    
- 
    
     
    
    
     
      worksheet.insert_cols(
      1)  
      #
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      for index,row 
      in enumerate(worksheet.rows):
     
    
- 
    
     
    
    
         
      if index==
      0:
     
    
- 
    
     
    
    
     
              row[
      0].value=
      "编号"  
      #每一行的一个row[0]就是第一列
     
    
- 
    
     
    
    
         
      else:
     
    
- 
    
     
    
    
     
              row[
      0].value=index
     
    
- 
    
     
    
    
     
      #枚举出来是tuple类型,从0开始计数
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      workbook.save(filename=
      "DataSource\myfile.xlsx")
     
    
运行结果如下:

5.2 修改特定单元格
  
   - 
    
     
    
    
     
      worksheet.cell(
      2,
      3,
      '0')
     
    
- 
    
     
    
    
     
      worksheet[
      "B2"]=
      "Peking"
     
    
运行结果如下:

5.3 批量修改数据
批量修改数据就相当于写入,会自动覆盖。在上一节中已经有介绍,不再赘述。
还有sheet.append()方法,可以用来添加行。
  
   - 
    
     
    
    
     
      taiwan=[
      32,
      "台湾省"]
     
    
- 
    
     
    
    
     
      worksheet.append(taiwan)
     
    
运行结果如下:

本文完。行笔匆忙,如有错误,还请指出。
转载:https://blog.csdn.net/sinat_28576553/article/details/81275650
