将列标题添加到 table 并为单元格加边框

Add column headings to the table & border the cells

我想在下面的代码中做两件事。

  1. 将列标题添加到 table

  2. 给单元格加边框

我想,列标题的解决方案可以通过“使用 for 循环或范围”来解决,但我不知道该怎么做。

对于边界线,我没有任何意见。

谢谢。

import sys
from PyQt5.QtWidgets import QDialogButtonBox
from PyQt5.QtWidgets import QFormLayout
from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import *
import openpyxl
filename = "data.xlsx"
def checkfile():
    from os import path
    if not path.exists(filename):
        wb = openpyxl.Workbook()

        ws = wb.worksheets[0]

        ws.cell(2, 1).value = 'First Name'
        ws.cell(3, 1).value = 'Second Name'
        ws.cell(4, 1).value = 'Age'
        ws.cell(5, 1).value = 'Sex'
        ws.cell(6, 1).value = 'Marital Status'
        ws.cell(7, 1).value = 'Education'
        ws.cell(8, 1).value = 'Job'
        wb.save(filename)
class InputDialog(QDialog):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("Information Window")
        self.first = QLineEdit()
        self.second = QLineEdit()
        self.third = QLineEdit()
        self.fourth = QLineEdit()
        self.fifth = QLineEdit()
        self.sixth = QLineEdit()
        self.seventh = QLineEdit()

        dlglayout = QVBoxLayout(self)
        formlayout = QFormLayout()
        formlayout.addRow("First Name:", self.first)
        formlayout.addRow("Second Name:", self.second)
        formlayout.addRow("Age:", self.third )
        formlayout.addRow("Sex:", self.fourth)
        formlayout.addRow("Marital Status:", self.fifth)
        formlayout.addRow("Education:", self.sixth)
        formlayout.addRow("Job:", self.seventh)
        dlglayout.addLayout(formlayout)
        btns = QDialogButtonBox()
        btns.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Save)
        dlglayout.addWidget(btns)
        btns.accepted.connect(self.accept)
        btns.rejected.connect(self.reject)

    def getInputs(self):
        return self.first.text(), self.second.text(), self.third.text(), \
        self.fourth.text(), self.fifth.text(), self.sixth.text(), self.seventh.text()

def writefile(data):
    wb = openpyxl.load_workbook(filename)
    ws = wb.worksheets[0]
    for c in range(2,100):
       if not ws.cell(2,c).value: break
    for r in range(len(data)):
       ws.cell(r+2,c).value = data[r]
    wb.save(filename)

if __name__ == '__main__':
    checkfile()
    app = QApplication(sys.argv)
    dialog = InputDialog()
    if dialog.exec():
        writefile(dialog.getInputs())
    exit(0)

在 openpyxml 中,您可以使用 styles object 设置单元格边框。对于 headers,只需创建一个字符串列表并枚举值以设置单元格值。

将此代码添加到 checkfile:

def checkfile():
    ..........
        
    # write headers
    for c,v in enumerate(['Entry 1','Entry 2','Entry 3','Entry 4','Entry 5']): 
       ws.cell(1,c+2).value = v
       
    # define border 
    bdr = openpyxl.styles.borders.Side(style='thin')          
    thin_border = openpyxl.styles.borders.Border(left=bdr, right=bdr, top=bdr, bottom=bdr)
    # set cell borders 
    for c in  range(1, 7):
       for r in  range(1, 9):
          ws.cell(r,c).border = thin_border # set border

    wb.save(filename)