借助openpyxl模块,我们还可以在python中写入excel文件。
该过程有点类似于在python中读取Excel电子表格。
使用python Excel writer,我们将创建excel工作表,在单元格中写入文本,数字和公式。
修改后,我们将保存工作簿。
我们还将在excel工作簿中添加和删除工作表,应用设置,字体和样式,设置单元格和区域的宽度和高度,合并和取消合并单元格。
Python Excel创建和保存文件:import openpyxl as xl mywb = xl.Workbook() print(mywb.get_sheet_names()) # ['Sheet'] sheet = mywb.active title = sheet.title # 'Sheet' sheet.title = 'MyNewTitle' print(mywb.get_sheet_names()) # ['MyNewTitle'] mywb.save('NewExcelFile.xlsx')
借用已存在excel,修改生成新excel
import openpyxl as xl mywb = xl.load_workbook('bill.xlsx') sheet = mywb.active sheet.title = 'Working on Save as' mywb.save('example_filetest.xlsx')
在Excel中创建和删除工作表:
import openpyxl as xl mywb = xl.Workbook() # mywb.get_sheet_names() -> ['Sheet'] mywb.create_sheet() # <Worksheet "Sheet1"> # mywb.get_sheet_names() -> ['Sheet','Sheet1'] mywb.create_sheet(index=0, title='1st Sheet') # mywb.get_sheet_names() -> ['1st Sheet','Sheet','Sheet1'] mywb.create_sheet(index=2, title='2nd Sheet') # mywb.get_sheet_names() -> ['1st Sheet', 'Sheet', '2nd Sheet', 'Sheet1'] mywb.remove_sheet(mywb.get_sheet_by_name('1st Sheet')) mywb.remove_sheet(mywb.get_sheet_by_name('Sheet1')) # mywb.get_sheet_names() -> ['Sheet', '2nd Sheet'] mywb.save('savePath') ''' 很明显,从四张纸上删除两张纸后,只剩下两张纸了。 remove_sheet方法采用工作表对象而不是工作表名称, 而不是为该特定工作表创建对象,然后将其删除, 我们调用get_sheet_by_name()并将其传递给工作表名称, 它返回的值是remove_sheet( ) 方法。 最后,使用save()方法保存修改后的文件。 在这种情况下,请删除工作表。 '''
Python excel在单元格中写入值:现在,我们将看到如何在excel工作表中将值写入特定单元格。当然,我们应该知道我们要写入的单元格的地址。
>>> import openpyxl >>> mywb = openpyxl.Workbook() >>> mysheet = mywb.get_sheet_by_name('Sheet') >>> mysheet['F6'] = 'Writing new Value!' >>> mysheet['F6'].value 'Writing new Value'
将不同的样式应用于表格,强调或强调某些行或列。将某些统一样式应用于excel工作表非常重要,这样可以使读取数据时更加清晰。
但是请注意,首先应格外小心地设计样式,其次始终以不同的名称保存excel工作簿。
首先,我们将导入openpyxl,然后导入要在我们的代码中使用的字体和样式。
这是一个示例,该示例创建一个新工作簿并将单元格F6设置为具有32点斜体的字体。
>>> import openpyxl >>> from openpyxl.styles import Font, Style >>> mywb = openpyxl.Workbook() >>> mysheet = mywb.get_sheet_by_name('Sheet') >>> italic32Font = Font(size=32, italic=True) >>> sobj = Style(font=italic24Font) >>> mysheet['F6'].style = sobj >>> mysheet['F6'] = 'Applying Styles!' >>> mywb.save('Appliedstyle.xlsx') ''' 在openpyxl for excel工作表中, 每个单元格都有一个样式对象, 该对象位于该单元格的style属性中。 我们创建一个样式对象, 并将其分配给样式属性。 '''
字体对象有四个参数:
- 名称:使用字符串值,并引用字体名称,例如“ Arial”。
- 大小:一个整数值,引用大小。
- Bold:布尔值,Bold字体为True。
- 斜体:布尔值,斜体字体为True。
在下面的示例中,我们将调用Font()方法来创建Font对象并将其存储在变量中,
下一步将是将其作为参数传递给Style()方法。
我们将那个对象存储在另一个变量中,
并将其分配给特定的单元格对象。
>>> import openpyxl >>> from openpyxl.styles import Font, Style >>> mywb = openpyxl.Workbook() >>> mysheet = mywb.get_sheet_by_name('Sheet') >>> firstFontObj = Font(name='Arial', bold=True) >>> firstStyleObj = Style(font=firstFontObj) >>> mysheet['F6'].style = firstStyleObj >>> mysheet['F6'] = 'Bold Arial' >>> secondFontObj = Font(size=32, italic=True) >>> secondStyleObj = Style(font=secondFontObj) >>> mysheet['D7'].style = secondStyleObj >>> mysheet['D7'] = '32 pt Italic' >>> mywb.save('ApplicationofStyles.xlsx')
Python Excel编写公式:
# mysheet['F6'] = '=Sum(D7:D20)' >>> import openpyxl >>> mywb = openpyxl.Workbook() >>> mysheet = mywb.active >>> mysheet['F6'] = 500 >>> mysheet['F7'] = 800 >>> sheet['D3'] = '=SUM(F6:F7)' >>> mywb.save('Applyingformula.xlsx')
Excel调整工作表中的行和列:
'''我们可以使用openpyxl在excel电子表格中设置行高,列宽。我们还可以冻结行或列,使其始终显示。我们还可以隐藏行或列。''' >>> import openpyxl >>> mywb = openpyxl.Workbook() >>> mysheet = mywb.active >>> mysheet['F6'] = 'Tall row' >>> mysheet['D7'] = 'Wide column' >>> mysheet.row_dimensions[3].height = 65 >>>mysheet.column_dimensions['F'].width = 25 >>>mywb.save('Heightandwidth.xlsx') ''' excel电子表格中的默认行高为12.75点。其中1点等于1/72英寸。 您可以在0到409之间设置一个值。 列宽可以设置为0到255之间的值。 它可以是整数或浮点值(十进制数)。 如果将列的宽度设置为0或行的高度设置为0,则它将被隐藏。 '''
Excel合并和取消合并
'''merge_cells方法将两个单元格地址作为其参数。 第一个单元格是要合并的矩形区域的左上角,第二个单元格是右下角。 如果要设置该合并区域的值,则使用整个合并区域左上角单元格的地址。 ''' >>> import openpyxl >>>my wb = openpyxl.Workbook() >>> mysheet = mywb.active >>> mysheet.merge_cells('B2:D3') >>> mysheet['A1'] = 'cells merged together.' >>> mysheet.merge_cells('F6:F7') >>> mysheet['G5'] = 'Two merged cells.' >>> mywb.save('Mergingcells.xlsx')
如果要取消合并单元格,请使用以下思路。
>>> import openpyxl >>> mywb = openpyxl.load_workbook('Mergingcells.xlsx') >>> mysheet = mywb.active >>> mysheet.unmerge_cells('B2:D3') >>> mysheet.unmerge_cells('F6:F7') >>> mywb.save('unmerged.xlsx')