下面我就为你详细讲解“Python实现数据导出到Excel的示例–普通格式”的完整实例教程,包含以下内容:
-
准备工作:安装openpyxl库和创建Excel文件
-
创建Excel文件并写入数据
-
添加样式
-
示例1:将读取数据库中的数据导出至Excel
-
示例2:将从API接口获取的json数据导出至Excel
-
完整代码示例
-
准备工作:安装openpyxl库和创建Excel文件
在开始之前,需要对Python环境安装openpyxl库。可以使用pip进行安装:
pip install openpyxl
完成安装后,我们需要创建Excel文件。可以直接使用openpyxl库提供的Workbook类进行创建:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
我们先创建一个新的工作簿和一个新的工作表对象,后面将会用到。
- 创建Excel文件并写入数据
在我们创建好Excel文件和工作表之后,可以用openpyxl库提供的方法进行数据的写入。例如:
ws['A1'] = 'Name'
ws['B1'] = 'Age'
ws['C1'] = 'Gender'
ws['A2'] = 'Tom'
ws['B2'] = 25
ws['C2'] = 'Male'
ws['A3'] = 'Lisa'
ws['B3'] = 21
ws['C3'] = 'Female'
以上代码将数据写入了工作表的第一行和第二行,并赋值给相应的单元格。
- 添加样式
我们现在可以对Excel文件进行更多的调整和美化。比如,我们可以添加单元格字体、颜色、边框等样式。以下是一些基本的例子:
from openpyxl.styles import Font, colors, Border, Side, PatternFill, Alignment
# 单元格字体
font = Font(name='宋体', bold=True, italic=False, strike=False, color=colors.BLACK)
ws['A1'].font = font
# 单元格边框
border = Border(left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000'))
ws['A1'].border = border
# 单元格颜色
fill = PatternFill(fill_type='solid', fgColor=colors.YELLOW)
ws['A2'].fill = fill
# 单元格居中对齐
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
ws['A1'].alignment = alignment
- 示例1:将读取数据库中的数据导出至Excel
以下是一个简单的实例,用于从SQLite数据库中读取数据,然后将它们导出至Excel文件中。
import sqlite3
# 连接数据库
conn = sqlite3.connect('test.db')
c = conn.cursor()
# 查询数据
c.execute('SELECT * FROM users')
data = c.fetchall()
# 导出数据至Excel文件
for row_index, row in enumerate(data):
for cell_index, cell_value in enumerate(row):
ws.cell(row_index+1, cell_index+1, cell_value)
wb.save('data_exported.xlsx')
以上代码连接了SQLite数据库并读取了所有数据行。然后,我们使用双重for循环将数据写入工作表中。
- 示例2:将从API接口获取的json数据导出至Excel
以下是另一个示例,用于从API接口获取JSON格式的数据,然后将它们导出至Excel文件。
import requests
# 请求API接口数据
response = requests.get('https://api.github.com/users/github')
# 将结果转换为json
data = response.json()
# 导出数据至Excel文件
for row_index, row in enumerate(data):
for cell_index, key in enumerate(row.keys()):
# 写入表头
if row_index == 0:
ws.cell(row_index+1, cell_index+1, key)
ws.cell(row_index+2, cell_index+1, row[key])
wb.save('data_exported.xlsx')
以上代码使用requests库访问了Github API,并将返回的JSON数据转换为Python中的字典数据类型。后续代码中使用双重for循环将数据写入Excel工作表,其中第一行为表头,其余行为数据行。
- 完整代码示例
最后,以下是完整的代码示例,展示了如何将数据导出至Excel文件中。具体的细节和样式可以根据需求自行添加。
from openpyxl import Workbook
from openpyxl.styles import Font, colors, Border, Side, PatternFill, Alignment
# 创建Excel文件和工作表
wb = Workbook()
ws = wb.active
# 写入数据
ws['A1'] = 'Name'
ws['B1'] = 'Age'
ws['C1'] = 'Gender'
ws['A2'] = 'Tom'
ws['B2'] = 25
ws['C2'] = 'Male'
ws['A3'] = 'Lisa'
ws['B3'] = 21
ws['C3'] = 'Female'
# 添加样式
font = Font(name='宋体', bold=True, italic=False, strike=False, color=colors.BLACK)
border = Border(left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000'))
fill = PatternFill(fill_type='solid', fgColor=colors.YELLOW)
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)
for i in range(1, 4):
ws.cell(row=1, column=i).font = font
ws.cell(row=1, column=i).border = border
ws.cell(row=1, column=i).alignment = alignment
for row in ws.iter_rows(min_row=2, max_row=3, min_col=1, max_col=3):
for cell in row:
cell.border = border
for cell in ws[2]:
cell.fill = fill
cell.border = border
# 示例1:将读取数据库中的数据导出至Excel
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('SELECT * FROM users')
data = c.fetchall()
for row_index, row in enumerate(data):
for cell_index, cell_value in enumerate(row):
ws.cell(row_index+4, cell_index+1, cell_value)
# 示例2:将从API接口获取的json数据导出至Excel
import requests
response = requests.get('https://api.github.com/users/github')
data = response.json()
for row_index, row in enumerate(data):
for cell_index, key in enumerate(row.keys()):
if row_index == 0:
ws.cell(row_index+7, cell_index+1, key)
ws.cell(row_index+8, cell_index+1, row[key])
# 保存Excel文件
wb.save('data_exported.xlsx')