上个星期六把第12章看完了,主要讲的是Excel文档的处理,使用第三方库是openpyxl。不过这本书毕竟是2015年写的,openpyxl团队对库进行了更新,导致一些函数无法使用了。好在作者针对12章节重新更改了一些例子写,附上12章节的链接:https://automatetheboringstuff.com/chapter12/#calibre_link-72
12.13.1:从命令行中取一个N,并在Excel电子表格中创建一个N × N乘法表
- from openpyxl.styles import Font
复制代码- [/code][code]wb = openpyxl.Workbook()
复制代码- myfont = Font(bold =True)#设置表格文字为粗体
复制代码- [/code][code]for r in range(1,n+1):#设置行数字
复制代码- sheet.cell(row=1,column=r+1).font = myfont
复制代码- sheet.cell(row=1,column=r+1).value = r
复制代码- for c in range(1,n+1):#设置列数字
复制代码- sheet.cell(row=c+1,column=1).font = myfont
复制代码- sheet.cell(row=c+1,column=1).value = c
复制代码- for i in range(2,n+2):#补全每一行每一列的数字
复制代码- sheet.cell(row=i,column=j).value = int(sheet.cell(row=i,column=j-1).value)
复制代码- sheet.cell(row=i,column=j).value = int(sheet.cell(row=i,column=j-1).value) + int(sheet.cell(row=i,column=1).value)
复制代码- [/code][code]wb.save('ex12_13_1.xlsx')
复制代码 12.13.2:接受两个整数M、N和一个文件名字符串作为命令行参数。从第N行开始,程序应该在电子表格中插入M个空白行
- from openpyxl.cell.cell import get_column_letter
复制代码- [/code][code]posRow = sys.argv[1]
复制代码- [/code][code]# posRow = '3'
复制代码- wb = openpyxl.load_workbook(file)
复制代码- [/code][code]rows = sheet.max_row
复制代码- columns = sheet.max_column
复制代码- [/code][code]downcolumnWord = get_column_letter(columns)
复制代码- [/code][code]#倒着将数据下移两行,正着会导致报错
复制代码- downSheet = list(sheet['A' + posRow:downcolumnWord + str(rows)])[::-1]
复制代码- for rowOfCellObj in downSheet:
复制代码- for cellObj in rowOfCellObj:
复制代码- sheet.cell(row = cellObj.row + int(blankRow),column=cellObj.column).value = cellObj.value
复制代码- [/code][code]#将这两行的值设置为空字符串
复制代码- delSheet = sheet['A' + posRow:downcolumnWord + str(int(posRow) + int(blankRow) -1)]
复制代码- for rowOfCellObj in delSheet:
复制代码- for cellObj in rowOfCellObj:
复制代码 12.13.3:编写一个程序,反转电子表格中行和列的单元格
- [/code][code]fileName = 'ex.xlsx'
复制代码- [/code][code]wb = openpyxl.load_workbook(fileName)
复制代码- [/code][code]maxRow = sheet.max_row#总行数
复制代码- maxColumn = sheet.max_column#总列数
复制代码- [/code][code]for row in range(1,maxRow+1):
复制代码- for col in range(1,maxColumn+1):
复制代码- sheet.cell(col,row).value,sheet.cell(row,col).value = sheet.cell(row,col).value,sheet.cell(col,row).value
复制代码- [/code][code]print('Saving a another file...')
复制代码- wb.save('another_'+fileName)
复制代码 12.13.4:编写一个程序来读取几个文本文件的内容(您可以自己创建文本文件)并将这些内容插入到电子表格中,每行一行文本。第一个文本文件的行将位于列A的单元格中,第二个文本文件的行将位于列B的单元格中,依此类推
- [/code][code]fileNameList = ['ex1.txt','ex2.txt','ex3.txt','ex4.txt']
复制代码- [/code][code]for fe in fileNameList:
复制代码- col = fileNameList.index(fe) + 1#取得下标,但是在xlsx中要+1
复制代码- linesText = [line.strip() for line in fo.readlines()]#去掉空白符
复制代码- lenTotalLines = len(linesText)
复制代码- for row,line in zip(range(1,lenTotalLines+1),linesText):
复制代码- sheet.cell(row,col).value = line
复制代码- [/code][code]print('Saving the file...')
复制代码 12.13.5:编写一个程序,以相反的顺序执行上一个程序的任务:程序应打开一个电子表格,并将A列的单元格写入一个文本文件,将B列的单元格写入另一个文本文件,依此类推
- [/code][code]fileName = 'ex.xlsx'
复制代码- outToFileName = ['ex5_1.txt','ex5_2.txt','ex5_3.txt','ex5_4.txt','ex5_5.txt']
复制代码- [/code][code]wb = openpyxl.load_workbook(fileName)
复制代码- [/code][code]maxRow = sheet.max_row
复制代码- [/code][code]for file in outToFileName:
复制代码- col = outToFileName.index(file)+1
复制代码- for row in range(1,maxRow+1):
复制代码- fo.write(str(sheet.cell(row,col).value)+'\n')
复制代码- [/code][code]print('Done.')
复制代码
|
|