Python编程快速上手12.13实践项目

论坛 期权论坛 期权     
老Y的日常   2019-7-27 14:24   2846   0
    上个星期六把第12章看完了,主要讲的是Excel文档的处理,使用第三方库是openpyxl。不过这本书毕竟是2015年写的,openpyxl团队对库进行了更新,导致一些函数无法使用了。好在作者针对12章节重新更改了一些例子写,附上12章节的链接:https://automatetheboringstuff.com/chapter12/#calibre_link-72
    12.13.1:从命令行中取一个N,并在Excel电子表格中创建一个N × N乘法表
   
  1. import sys,openpyxl
复制代码
  1. from openpyxl.styles import Font
复制代码
  1. n = int(sys.argv[1])
复制代码
  1. [/code][code]wb = openpyxl.Workbook()
复制代码
  1. sheet = wb.active
复制代码
  1. myfont = Font(bold =True)#设置表格文字为粗体
复制代码
  1. [/code][code]for r in range(1,n+1):#设置行数字
复制代码
  1.     sheet.cell(row=1,column=r+1).font = myfont
复制代码
  1.     sheet.cell(row=1,column=r+1).value = r
复制代码
  1. for c in range(1,n+1):#设置列数字
复制代码
  1.     sheet.cell(row=c+1,column=1).font = myfont
复制代码
  1.     sheet.cell(row=c+1,column=1).value = c
复制代码
  1. for i in range(2,n+2):#补全每一行每一列的数字
复制代码
  1.     for j in range(2,n+2):
复制代码
  1.         if j == 2:
复制代码
  1.             sheet.cell(row=i,column=j).value = int(sheet.cell(row=i,column=j-1).value)
复制代码
  1.         if j >2 :
复制代码
  1.             sheet.cell(row=i,column=j).value = int(sheet.cell(row=i,column=j-1).value) + int(sheet.cell(row=i,column=1).value)
复制代码
  1. [/code][code]wb.save('ex12_13_1.xlsx')
复制代码
  1. print('Done!')
复制代码
   12.13.2:接受两个整数M、N和一个文件名字符串作为命令行参数。从第N行开始,程序应该在电子表格中插入M个空白行

  1. import sys
复制代码
  1. import openpyxl
复制代码
  1. from openpyxl.cell.cell import get_column_letter
复制代码
  1. [/code][code]posRow = sys.argv[1]
复制代码
  1. blankRow = sys.argv[2]
复制代码
  1. file = sys.argv[3]
复制代码
  1. [/code][code]# posRow = '3'
复制代码
  1. # blankRow = '2'
复制代码
  1. # file = 'ex.xlsx'
复制代码
  1.   
复制代码
  1. wb = openpyxl.load_workbook(file)
复制代码
  1. sheet = wb.active
复制代码
  1. [/code][code]rows = sheet.max_row
复制代码
  1. columns = sheet.max_column
复制代码
  1. [/code][code]downcolumnWord = get_column_letter(columns)
复制代码
  1. [/code][code]#倒着将数据下移两行,正着会导致报错
复制代码
  1. downSheet = list(sheet['A' + posRow:downcolumnWord + str(rows)])[::-1]
复制代码
  1. for rowOfCellObj in downSheet:
复制代码
  1.     for cellObj in rowOfCellObj:
复制代码
  1.         sheet.cell(row = cellObj.row + int(blankRow),column=cellObj.column).value = cellObj.value
复制代码
  1. [/code][code]#将这两行的值设置为空字符串
复制代码
  1. delSheet = sheet['A' + posRow:downcolumnWord + str(int(posRow) + int(blankRow) -1)]
复制代码
  1. for rowOfCellObj in delSheet:
复制代码
  1.     for cellObj in rowOfCellObj:
复制代码
  1.         cellObj.value = ''
复制代码
12.13.3:编写一个程序,反转电子表格中行和列的单元格

  1. import openpyxl
复制代码
  1. [/code][code]fileName = 'ex.xlsx'
复制代码
  1. [/code][code]wb = openpyxl.load_workbook(fileName)
复制代码
  1. sheet = wb.active
复制代码
  1. [/code][code]maxRow = sheet.max_row#总行数
复制代码
  1. maxColumn = sheet.max_column#总列数
复制代码
  1. [/code][code]for row in range(1,maxRow+1):
复制代码
  1.     for col in range(1,maxColumn+1):
复制代码
  1.             if col >= row:
复制代码
  1.                     pass
复制代码
  1.             else:
复制代码
  1.                 sheet.cell(col,row).value,sheet.cell(row,col).value = sheet.cell(row,col).value,sheet.cell(col,row).value
复制代码
  1. [/code][code]print('Saving a another file...')
复制代码
  1. wb.save('another_'+fileName)
复制代码
  1. print('Done.')
复制代码
   12.13.4:编写一个程序来读取几个文本文件的内容(您可以自己创建文本文件)并将这些内容插入到电子表格中,每行一行文本。第一个文本文件的行将位于列A的单元格中,第二个文本文件的行将位于列B的单元格中,依此类推

  1. import openpyxl
复制代码
  1. [/code][code]fileNameList = ['ex1.txt','ex2.txt','ex3.txt','ex4.txt']
复制代码
  1. wb = openpyxl.Workbook()
复制代码
  1. sheet = wb.active
复制代码
  1. [/code][code]for fe in fileNameList:
复制代码
  1.     col = fileNameList.index(fe) + 1#取得下标,但是在xlsx中要+1
复制代码
  1.     fo = open(fe)
复制代码
  1.     linesText = [line.strip() for line in fo.readlines()]#去掉空白符
复制代码
  1.     lenTotalLines = len(linesText)
复制代码
  1.     for row,line in zip(range(1,lenTotalLines+1),linesText):
复制代码
  1.         sheet.cell(row,col).value = line
复制代码
  1.     fo.close()
复制代码
  1. [/code][code]print('Saving the file...')
复制代码
  1. wb.save('12_13_4.xlsx')
复制代码
  1. print('Done.')
复制代码
    12.13.5:编写一个程序,以相反的顺序执行上一个程序的任务:程序应打开一个电子表格,并将A列的单元格写入一个文本文件,将B列的单元格写入另一个文本文件,依此类推

  1. import openpyxl
复制代码
  1. [/code][code]fileName = 'ex.xlsx'
复制代码
  1. outToFileName = ['ex5_1.txt','ex5_2.txt','ex5_3.txt','ex5_4.txt','ex5_5.txt']
复制代码
  1. [/code][code]wb = openpyxl.load_workbook(fileName)
复制代码
  1. sheet = wb.active
复制代码
  1. [/code][code]maxRow = sheet.max_row
复制代码
  1. [/code][code]for file in outToFileName:
复制代码
  1.     col = outToFileName.index(file)+1
复制代码
  1.     for row in range(1,maxRow+1):
复制代码
  1.         fo = open(file,'a')
复制代码
  1.         fo.write(str(sheet.cell(row,col).value)+'\n')
复制代码
  1.     fo.close()
复制代码
  1. [/code][code]print('Done.')
复制代码

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:5
帖子:1
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP