QT+Excel

记得Excel里面,行和列都是从1开始的,而不是

void NewPage::loadRegistersFromExcel(){

QString desktopDir = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QString filepath = QFileDialog::getOpenFileName(NULL, "选择Excel", desktopDir, "*.xlsx *.xls");

if (filepath.isEmpty())  {
    QMessageBox::information(this, "提示", "未选择文件");
    return;
}

QXlsx::Document xlsx(filepath);
if (!xlsx.load())  {
    QMessageBox::critical(this, "错误", "无法加载 Excel 文件");
    return;
}

QXlsx::Worksheet *worksheet = dynamic_cast<QXlsx::Worksheet*>(xlsx.workbook()->sheet(0));
if (!worksheet) {
    qDebug() << "无法获取工作表";
    return;
}

// 清空现有的寄存器列表
registerList.clear();

// 从第二行开始读取数据(假设第一行为标题)
for (int row = 2; row < 29; ++row) {
    // 读取寄存器地址(假设在第1列)
    CellReference addressRef(row, 1);
    QString address = worksheet->read(addressRef).toString();

    // 读取寄存器描述(假设在第2列)
    CellReference descRef(row, 2);
    QString description = worksheet->read(descRef).toString();

    // 创建新的寄存器对象
    Register reg;
    reg.address  = address;
    reg.description  = description;

    // 读取32个位信息(假设位信息从第3列开始)
    for (int col = 3; col <= 34; ++col) {
        CellReference bitRef(row, col);
        QString bitName = worksheet->read(bitRef).toString();
        reg.bitFields.append(bitName);
    }

    // 将寄存器添加到列表
    registerList.append(reg);
}

// 更新寄存器列表视图
updateRegisterListView();

// 如果有数据,选中第一个寄存器
if (!registerList.isEmpty())  {
    QModelIndex defaultIndex = registerModel->index(0, 0);
    registerListView->setCurrentIndex(defaultIndex);
    updateBitGrid(registerList.first().address);
    descriptionTextEdit->setText(registerList.first().description);
    selectedRegisterLabel->setText("当前寄存器: " + registerList.first().address);
}

}

void NewPage::updateRegisterListView()
{

registerModel->clear();

// 添加数据到模型
foreach (const Register &reg, registerList) {
    QStandardItem *item = new QStandardItem(reg.address);
    registerModel->appendRow(item);
}

// 确认模型中的行数
qDebug() << "模型中共有" << registerModel->rowCount() << "行数据";

}

posted @ 2025-02-27 13:20  Itaqy  阅读(4)  评论(0)    收藏  举报