如何在这个代码上进行修改,使得可以输出excel表格,且含有标题行作为绘图索引



```python
import tkinter as tk
from tkinter import filedialog
import openpyxl
from openpyxl import Workbook

def text_create(name, msg):
    desktop_path = "C:\\Users\\10154\\Desktop\\"  # 新创建的txt文件的存放路径
    full_path = desktop_path + name + '.txt'  # 也可以创建一个.doc的word文档
    file = open(full_path, 'a')
    file.write(msg)  # msg也就是文本内容
    file.write('\n')  #显示写入换行
    # file.close()

def select_file():
    # 选择Excel文件
    filename = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])

    # 打开Excel文件并读取内容
    Wk = openpyxl.load_workbook(filename)
    worksheet = Wk.active

    # 将Q_WS, P_Jun, λ添加到标题行
    worksheet.cell(1, 8).value = 'Q_WS'
    worksheet.cell(1, 9).value = 'P_Jun'
    worksheet.cell(1, 10).value = 'λ'

    # 输出表格中的内容并计算能耗
    for row in worksheet.iter_rows(min_row=2):
        row_text=''
        for cell in row:
            #print(cell.value,end=',')
            row_text+=f'{cell.value},'

        t0 = float(row[0].value)
        te = float(row[1].value)
        ε = float(row[2].value)
        P_R = float(row[3].value)
        P_Z = float(row[4].value)
        L = float(row[5].value)
        Q_s = float(row[6].value)
        Q = float(row[7].value)
        Q_WS = round((t0-te)*ε/L,2)
        P_Jun =round((P_R-P_Z)/L,2)
        λ = round(Q_s/Q,2)

        conclude = (Q_WS, P_Jun, λ)
        print(str(conclude))
        text_create('海底管道能耗计算结果', str(conclude))
    wb = Workbook()
    sheet = wb.active
    data = open('C:\\Users\\10154\\Desktop\\海底管道能耗计算结果.txt', 'r', encoding='utf_8')
    datas = data.readlines()  # readlines()依次读取所有行(直到结束符 EOF)并返回列表
    # 向表格中添加Q_WS, P_Jun, λ数据
    row[7].offset(column=1).value = Q_WS
    row[7].offset(column=2).value = P_Jun
    row[7].offset(column=3).value = λ
    for index, row in enumerate(datas):
        d = row.split()  # split()通过指定分隔符对字符串进行切片,并返回分割后的字符串列表
        for col in range(len(d)):
            sheet.cell(index + 1, col + 1, d[col])  # 表示我们要对第i行第j列单元格进行修改
    # sheet.cell(worksheet.row[0])
    wb.save('海底管道能耗计算结果.xlsx')




# 创建一个窗口
root=tk.Tk()

# 设置窗口的标题和大小
root.title("导入Excel文件")
root.geometry("300x200")

# 创建一个按钮,用于选择Excel文件
button = tk.Button(root, text="选择文件", command=select_file)
button.pack()

# 进入主循环
root.mainloop()

```

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7493165
  • 这篇博客也不错, 你可以看下不改变原excel格式添加新数据
  • 除此之外, 这篇博客: 爬虫实战6:爬取英雄联盟官网五个位置的综合排行榜保存到excel中的 获取一个位置的综合排行榜所有数据(上单为例) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 以上单排行榜为例:

    • 1、使用谷歌的无头浏览器访问该网页
      url = 'http://lol.qq.com/guides/hero.shtml?ADTAG=cooperation.glzx.web'
      # 创建一个参数对象,用来控制chrome以无界面的方式打开
      options = Options()
      # 后面的两个是固定写法 必须这么写
      options.add_argument('--headless')
      options.add_argument('--disable-gpu')
      # 创建浏览器对象
      driver = webdriver.Chrome(options=options)
      driver.get(url)
      
    • 2、获取上单的所有数据进行数据处理
      # 获取上单英雄的所有数据
      driver.find_element(By.XPATH, '//a[@data-types="top"]').click()
      element = driver.find_element(By.ID, 'rankTable')
      data = element.text.split('\n')
      data.pop(0)
      
    • 3、创建一个excel表格并写入第一行数据
      # 新建一个工作簿
      wb = Workbook()
      ws1 = wb.active
      # 更改sheet名称
      ws1.title = '上单英雄'
      # excel表单第一行
      first_line = ('排名', '排名波动', '英雄', '位置', '胜率', '登场率')
      for i in range(len(first_line)):
          ws1.cell(1, i + 1, first_line[i])
      
    • 4、处理空值,网页信息中的英雄排名波动有部分英雄是没有值的,这会影响到我们后面批量处理获得的数据,所以我们可以按照索引添加数据0
      在这里插入图片描述
      创建一个列表,将有空值的索引添加进去,并在该位置插入数据0
      # 排名波动空值
      employ = [28, 43]
      for i in range(46):
          if i in employ:
              data.insert(i * 5 + 1, '0')
      
    • 5、将所有获得的数据分别保存至变量
      # 将获取的数据进行处理并保存
          rank = data[i * 5]
          rank_float = data[i * 5 + 1]
          hero = data[i * 5 + 2]
          location = data[i * 5 + 3]
          win_rate = data[i * 5 + 4].split(' ')[0]
          appearance_rate = data[i * 5 + 4].split(' ')[1]
      
    • 6、将所有数据保存到excel表,并保存到本地
      # 将数据写入excel表格
          ws1.cell(i + 2, 1, rank)
          ws1.cell(i + 2, 2, rank_float)
          ws1.cell(i + 2, 3, hero)
          ws1.cell(i + 2, 4, location)
          ws1.cell(i + 2, 5, win_rate)
          ws1.cell(i + 2, 6, appearance_rate)
          # 保存excel表
          wb_name = '英雄联盟上单英雄总和排行榜数据.xlsx'
          wb.save(wb_name)
      
    • 7、完整代码如下
      from openpyxl import Workbook
      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      from selenium.webdriver.common.by import By
      
      url = 'http://lol.qq.com/guides/hero.shtml?ADTAG=cooperation.glzx.web'
      # 创建一个参数对象,用来控制chrome以无界面的方式打开
      options = Options()
      # 后面的两个是固定写法 必须这么写
      options.add_argument('--headless')
      options.add_argument('--disable-gpu')
      # 创建浏览器对象
      driver = webdriver.Chrome(options=options)
      driver.get(url)
      driver.implicitly_wait(10)
      # 新建一个工作簿
      wb = Workbook()
      ws1 = wb.active
      ws1.title = '上单英雄'
      # excel表单第一行
      first_line = ('排名', '排名波动', '英雄', '位置', '胜率', '登场率')
      for i in range(len(first_line)):
          ws1.cell(1, i + 1, first_line[i])
      # 获取上单英雄的所有数据
      driver.find_element(By.XPATH, '//a[@data-types="top"]').click()
      element = driver.find_element(By.ID, 'rankTable')
      data = element.text.split('\n')
      data.pop(0)
      # 排名波动空值
      employ = [28, 43]
      for i in range(46):
          if i in employ:
              data.insert(i * 5 + 1, '0')
          # 将获取的数据进行处理并保存
          rank = data[i * 5]
          rank_float = data[i * 5 + 1]
          hero = data[i * 5 + 2]
          location = data[i * 5 + 3]
          win_rate = data[i * 5 + 4].split(' ')[0]
          appearance_rate = data[i * 5 + 4].split(' ')[1]
          # 将数据写入excel表格
          ws1.cell(i + 2, 1, rank)
          ws1.cell(i + 2, 2, rank_float)
          ws1.cell(i + 2, 3, hero)
          ws1.cell(i + 2, 4, location)
          ws1.cell(i + 2, 5, win_rate)
          ws1.cell(i + 2, 6, appearance_rate)
          # 保存excel表
          wb_name = '英雄联盟上单英雄总和排行榜数据.xlsx'
          wb.save(wb_name)
          print(rank, rank_float, hero, location, win_rate, appearance_rate)
      
    • 8、运行结果
      在这里插入图片描述

    -

  • 您还可以看一下 李发展老师的手把手学习Excel电子表格课程中的 行、列以及单元格的插入与删除小节, 巩固相关知识点