局部区域数据的导入和导出(与xlwings交互)

【问题描述】

使用xlwings包将Excel工作表中指定的单元格区域(如C3:E6)中的数据导入到pandas的DataFrame中;或者反过来,将DataFrame中的数据写入到Excel工作表中的指定单元格区域。[大谦Excel,dqexcel点com]

【示例2-8】

本例使用的Excel文件的完整路径为“D:/Samples/ch02/05 局部区域数据的导入和导出(与xlwings交互)/进料检验.xlsx”。该文件打开后如图2-7所示,是各种零件的进料检验数据。现在用xlwings打开该Excel文件,将D1:F6范围内的数据读取到DataFrame。输出读取的数据。然后又用xlwings将读取的数据写入到Excel工作表中的K3处。

Document Image

图2-7 进料检验数据

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch02/05 局部区域数据的导入和导出(与xlwings交互)/进料检验.xlsx。该Excel文件的第一个工作表中A-H列为给定数据。用xlwings打开Excel文件,将D1:F6范围内的数据读取到DataFrame。输出读取的数据。然后又用xlwings将读取的数据写入到Excel工作表中的K3处。保存,退出。添加代码注释。
  • 代码
  • 根据提示词得到类似下面的代码:
code.python
import xlwings as xw
import pandas as pd
# 打开 Excel 文件
wb = xw.Book(r'D:/Samples/ch02/05 局部区域数据的导入和导出(与xlwings交互)/进料检验.xlsx')
# 定位需要读取的单元格范围
cell_range = 'D1:F6'
# 将指定单元格范围读取到 DataFrame 中
df = wb.sheets[0].range(cell_range).options(pd.DataFrame, header=1, index=False).value
# 输出读取的数据
print(df)
# 将读取的数据写入 Excel 工作表中的 K3 处
wb.sheets[0].range('K3').value = df
# 保存文件并退出 Excel
wb.save()
wb.close()

3. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出导入的数据。

code.python
>>> == RESTART: D:/samples/ 1.py =
    来料   数量     送检时间     出检时间
0   10000.0  44202.0  44202.0
1   30000.0  44202.0  44202.0
2  100000.0  44202.0  44202.0
3   50000.0  44202.0  44202.0
4   50000.0  44202.0  44202.0

重新打开Excel数据文件,会发现在第一个工作表的K3处写入了D1:F6范围内的数据。

【知识点扩展】

使用xlwings的转换器和选项工具,可以将Excel工作表中指定单元格区域内的数据读取到DataFrame。例如,下面的代码将工作表sht中单元格区域A1:E6内的数据读取到df中,df是一个DataFrame。

code.python
df=sht.range("A1:E6").options(pd.DataFrame).value

为什么要将Excel数据从工作表读取到DataFrame呢?因为用pandas处理数据速度更快,代码更简洁。

pandas处理完数据后,得到的结果可以写入到Excel工作表的指定单元格区域,如下面的代码将df的数据写入到工作表sht的A8单元格处。

code.python
sht.range(‘A8’).value=df